I’ve been trying to figure out ways to tell the difference between instances of excel that load the worksheets and ones that don’t
Currently I use code to open existing files that looks something like that:
Dim wkbWorkBook as Excel.Workbook
Dim objExcel As Excel.Application
wkbWorkBook = System.Runtime.InteropServices.Marshal.BindToMoniker(filename)
objExcel = wkbWorkBook.Parent
'To make the excel app visible while working with it:
objExcel.Visible = true
What i’ve noticed while using this code is that If I open a file that exists, but isn’t open in excel, when I make the Excel Application visible, the Worksheets aren’t visible, but they do exist (I can access worksheets.count and there is an appropriate number of sheets)
I try using Worksheets.Visible but I’ve noticed it only has an HRESULT error in the place where a “Visible” value would be. 
The same error occurs when I try to get the Visible property even when the worksheets are visible (in cases when I BindToMoniker() a file that is currently open in excel.. )
Part of my question is why the BindToMoniker() + Application = workbook.Parent is always giving me an Excel Application without any sheets loaded.. I can’t work with it when it’s like that..
without gurantees, but I would say worksheets.visible -> won’t work, becasue worksheets gives you a list of worksheets.
You cannot apply .visible on that -> you would have to use worksheets(1).visible
Additionally, if there aren’t any worksheets, this should fail anyways. you would have to check your count of worksheets first.
Another thing – i don’t know if this is possible under vb.net with interop, but maybe you can access specific worksheets through their internal codename – like this: