Vb.net 使用Application.Intersect为什么会出现类型不匹配
这是我的密码。我认为这应该有效;我正在保存wb并尝试使用wb.Application获取Excel应用程序对象。它实际上可以工作,但XLApp.Intersect失败,出现“类型不匹配”错误 是否可以从工作簿中获取Excel应用程序,并且仍然使用Intersect方法 我还尝试将XLapp保存到一个全局变量并重新使用它,但这也不起作用;同样的错误 我试图避免使用Excel互操作引用来维护与旧版本Excel的向后兼容性Vb.net 使用Application.Intersect为什么会出现类型不匹配,vb.net,excel,excel-interop,Vb.net,Excel,Excel Interop,这是我的密码。我认为这应该有效;我正在保存wb并尝试使用wb.Application获取Excel应用程序对象。它实际上可以工作,但XLApp.Intersect失败,出现“类型不匹配”错误 是否可以从工作簿中获取Excel应用程序,并且仍然使用Intersect方法 我还尝试将XLapp保存到一个全局变量并重新使用它,但这也不起作用;同样的错误 我试图避免使用Excel互操作引用来维护与旧版本Excel的向后兼容性 我注意到我的应用程序对象的类型是:Microsoft.Office.Inte
我注意到我的应用程序对象的类型是:Microsoft.Office.Interop.Excel.ApplicationClassvarocarbas的回答让我想到了我正在使用的各种类型。因此,我试验了对象的各种组合
Dim ObjRange1作为对象
和声明类型Dim rg1作为Excel.Range
这是我测试过的代码,它运行良好,除了最后一个给我带来“类型不匹配”错误的代码
因此,我想答案是在将对象变量用作ObjRange3=XLApp.Intersect(ObjRange1,ObjRange2)
varocarbas的答案与使用DirectCast有关
rg = DirectCast(XLApp, Microsoft.Office.Interop.Excel.Application).Intersect(...
问题1:“为什么我的类型不匹配?(标题和问题的原始版本;我的答案)”。问题2:“是否可以从工作簿中获取Excel应用程序并仍然使用Intersect方法?”问题3(澄清您的想法需要一些帮助):“我试图避免使用Excel互操作引用来保持与旧版本Excel的向后兼容性。”。问题4:“下划线的意义是什么?”问题5:“Excel.Application和Excel.ApplicationClass之间的区别”您每次只能问一个问题。请把这个问题回复到原来的版本(为什么我会出现这个错误?)。否则,我将删除我的答案,因为它只回答了您问题集的一部分。@varocarbas我编辑了我的问题以删除其他问题。请避免使用注释进行扩展讨论。这是不可能的。请不要编辑您的问题,使现有的答案毫无意义或错误。
Sub testXL1()
Dim XLApp As Object
Dim wb As Object
Dim ws As Object
XLApp = CreateObject("Excel.Application")
XLApp.visible = True
wb = XLApp.Workbooks.Add()
XLApp = wb.application
ws = wb.worksheets(1)
ws.cells(1, 1) = "First"
ws.cells(2, 2) = "hello"
'this works fine
Dim rg1 As Microsoft.Office.Interop.Excel.Range
Dim rg2 As Microsoft.Office.Interop.Excel.Range
Dim rg3 As Microsoft.Office.Interop.Excel.Range
rg1 = ws.usedRange
rg2 = ws.columns("B")
rg3 = XLApp.Intersect(rg1, rg2)
rg3.Select()
'this works fine
Dim rg4 As Object
rg4 = XLApp.Intersect(rg1, rg2) 'Public member 'Intersect' on type 'Object()' not found.
rg4.Select()
'this works fine
Dim ObjRange1 As Object = ws.usedRange
Dim ObjRange2 As Object = ws.columns("B")
Dim rg5 As Microsoft.Office.Interop.Excel.Range
rg5 = XLApp.Intersect(ObjRange1, ObjRange2)
rg5.Select()
'this works fine
Dim ObjRange3 As Object
ObjRange3 = XLApp.Intersect(ObjRange1, ObjRange2)
ObjRange3.Select()
'this give a Type Mismatch error
ObjRange3 = XLApp.Intersect(ws.usedRange, ws.columns("B"))
ObjRange3.Select()
End Sub
rg = DirectCast(XLApp, Microsoft.Office.Interop.Excel.Application).Intersect(...