2013-08-28 57 views
0

這是我的代碼。我認爲這應該工作;我保存了wb並嘗試使用wb.Application獲取Excel應用程序對象。它實際上工作,但XLApp.Intersect失敗,出現「類型不匹配」錯誤。使用Application.Intersect爲什麼我會得到類型不匹配

Dim wb As Object 

Sub First() 
    Dim XLApp As Object 
    XLApp = CreateObject("Excel.Application") 
    wb = myXL.XLApp.Workbooks.Add() 
End Sub 

Sub Second() 
    Dim XLApp as object = wb.Application 
    Dim rg as object = XLApp.Intersect(ws.UsedRange, ws.Columns("B")) 
End Sub 

是否可以從工作簿中獲取Excel應用程序並仍然使用Intersect方法?

我也嘗試將XLapp保存到一個全局變量並重新使用它,但那也沒有奏效;同樣的錯誤。

我試圖避免使用Excel Interop參考來維護與舊版本的Excel的向後兼容性。

MSDN Library _Application.Intersect Method

我發現我的應用對象的類型爲:Microsoft.Office.Interop.Excel.ApplicationClass

+0

做問題1:「爲什麼我會得到類型不匹配?(問題的標題和原始版本;我已經回答了什麼)」。問題2:「是否可以從工作簿獲取Excel應用程序並仍然使用Intersect方法?」問題3(需要一些幫助來清除你的想法):「我試圖避免使用Excel Interop參考來保持與舊版Excel的向後兼容性。」問題4:「下劃線的意義是什麼?」問題5:「Excel.Application和Excel.ApplicationClass之間的區別」 – varocarbas

+1

您可以每次只提問一個問題。請回答這個問題的原始版本(爲什麼我得到這個錯誤?)。否則,我會刪除我的答案,因爲它僅回答了您的一組問題。 – varocarbas

+0

@varocarbas我編輯我的問題,刪除其他問題。 –

回答

0

的varocarbas的回答讓我開始思考我用的是不同類型的。所以,我嘗試了對象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(... 

Understanding the Excel Object Model from a .NET Developer's Perspective

相關問題