バロカルバの回答により、使用していたさまざまなタイプについて考えるようになりました。Dim ObjRange1 As Object
そこで、オブジェクトと宣言された型のさまざまな組み合わせを試しましたDim rg1 As Excel.Range
これが私がテストしたコードで、「型の不一致」エラーが発生した最後のコードを除いて正常に動作します。
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
したがって、答えは、オブジェクト変数をパラメーターとして使用する前に、範囲をオブジェクト変数に設定することだと思いますObjRange3 = XLApp.Intersect(ObjRange1, ObjRange2)
varocarbas の回答は、DirectCast の使用に関係していました
rg = DirectCast(XLApp, Microsoft.Office.Interop.Excel.Application).Intersect(...
.NET 開発者の視点から見た Excel オブジェクト モデルの理解