Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vb.net 使用Application.Intersect为什么会出现类型不匹配_Vb.net_Excel_Excel Interop - Fatal编程技术网

Vb.net 使用Application.Intersect为什么会出现类型不匹配

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

这是我的密码。我认为这应该有效;我正在保存wb并尝试使用wb.Application获取Excel应用程序对象。它实际上可以工作,但XLApp.Intersect失败,出现“类型不匹配”错误

是否可以从工作簿中获取Excel应用程序,并且仍然使用Intersect方法

我还尝试将XLapp保存到一个全局变量并重新使用它,但这也不起作用;同样的错误

我试图避免使用Excel互操作引用来维护与旧版本Excel的向后兼容性


我注意到我的应用程序对象的类型是:Microsoft.Office.Interop.Excel.ApplicationClass

varocarbas的回答让我想到了我正在使用的各种类型。因此,我试验了对象的各种组合
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(...