Here is a little .Net app that shows how you can get hold of an excel instance so that you can use that Excel object from code - but with out using IDT. This is useful when writing classes rather than managed addins. I will hopefully make a post about how we can use .net classes from VBA in a little bit, but this is worth a post in it's own right.
here is the example app
Know, the most interesting method here is the bind to moniker one as that lets us get the application that a particular file is active in, and so give use the most certainty that we are targeting the Excel instance we wish to. I have stuck this into a function:
Imports xl = excel.application
'''Class for Getting an Excel Intance
Public Class GetExcelInstance
Public Function GetTargetXLApplication(ByVal sPassedFilePath As String) As Excel.Application
Dim sFilePath As String = sPassedFilePath
Dim wkbBindToBook As Excel.Workbook
Dim blXLBelongsToUs As Boolean ''FLAG FOR KILLING XL APP LATER
Dim cFiles As System.IO.FileInfo
Dim sWkbName As String
''get filename from path
cFiles = My.Computer.FileSystem.GetFileInfo(sFilePath)
sWkbName = cFiles.Name
Try
''Set our target wkb from the file path to our
''.net wkb ojbect dimed here
wkbBindToBook = Marshal.BindToMoniker(sFilePath)
''set the appliction referance to the host excel sever this workbook is running in
GetTargetXLApplication = wkbBindToBook.Application
''the following code manipulates the excel clients window state.
If GetTargetXLApplication.Visible = False Then
''we opened excel
GetTargetXLApplication.Visible = True
GetTargetXLApplication.Windows(sWkbName).Visible = True
blXLBelongsToUs = False ''FLAG FOR QUITING IF WE STARTED IT
' MsgBox("Moniker from no intance") ''for debug
Else
''excel was opened but we loaded a hidden file into it, lets make it visable
If GetTargetXLApplication.Windows(sWkbName).Visible = False Then
GetTargetXLApplication.Windows(sWkbName).Visible = True
' MsgBox("Moniker from existing intance") ''for debug
End If
' MsgBox("Moniker from existing intance") ''for debug
End If
Catch ex As Exception
MsgBox(ex.Message)
GetTargetXLApplication = nothing 'sets function to null object if error happen
End Try
End Function
The VS project files are here