我試圖找出Excel中的問題。我收到了內存不足的錯誤,我懷疑這不是問題,但我不知道。Excel VBA內存不足錯誤If語句
基本上,我試圖製作一個宏來搜索電子表格中5個選項卡中的列(該列可以在5中的任何一箇中,並且它會發生很大變化),並且當它發現它時,執行一個vlookup匹配以將列返回到主選項卡中的相應位置。這是我的代碼下面,似乎它應該工作,但我得到內存不足的錯誤。當我去調試時突出顯示的行是if語句中的第一行Vrange = rB
行。
Dim i As Integer
Dim r As Range
'
Dim wsMaster As Worksheet: Set wsMaster = Workbooks("LBImportMacroTemplate.xlsm").Worksheets("MasterTab")
Dim wsB As Worksheet: Set wsB = Workbooks("LBImportMacroTemplate.xlsm").Worksheets("B")
Dim wsE As Worksheet: Set wsE = Workbooks("LBImportMacroTemplate.xlsm").Worksheets("E")
Dim wsL As Worksheet: Set wsL = Workbooks("LBImportMacroTemplate.xlsm").Worksheets("L")
Dim wsI As Worksheet: Set wsI = Workbooks("LBImportMacroTemplate.xlsm").Worksheets("I")
Dim wsT As Worksheet: Set wsT = Workbooks("LBImportMacroTemplate.xlsm").Worksheets("T")
'
Dim rBHeading As Range: Set rBHeading = wsB.Range("A2:ZA2")
Dim rEHeading As Range: Set rEHeading = wsE.Range("A2:ZA2")
Dim rLHeading As Range: Set rLHeading = wsL.Range("A2:ZA2")
Dim rIHeading As Range: Set rIHeading = wsI.Range("A2:ZA2")
Dim rTHeading As Range: Set rTHeading = wsT.Range("A2:ZA2")
'
Dim rB As Range: Set rB = wsB.Range("A:ZA")
Dim rE As Range: Set rE = wsE.Range("A:ZA")
Dim rL As Range: Set rL = wsL.Range("A:ZA")
Dim rI As Range: Set rI = wsI.Range("A:ZA")
Dim rT As Range: Set rT = wsT.Range("A:ZA")
'
Dim mf_iA_TEXT As String: mf_iA_TEXT = "iA"
'
If Application.CountIf(rBHeading, "iA") = 1 Then
Vrange = rB
Mrange = rBHeading
ElseIf Application.CountIf(rEHeading, "iA") = 1 Then
Vrange = rE
Mrange = rEHeading
ElseIf Application.CountIf(rLHeading, "iA") = 1 Then
Vrange = rL
Mrange = rLHeading
ElseIf Application.CountIf(rIHeading, "iA") = 1 Then
Vrange = rI
Mrange = rIHeading
Else
Vrange = rT
Mrange = rTHeading
End If
'
Dim mf_iA As Variant: mf_iA = Application.Match(mf_iA_TEXT, Mrange, 0)
'
With ActiveSheet
lastrow = .Cells(.Rows.Count, "A").End(xlUp).Row
MsgBox lastrow
End With
'
For i = 2 To lastrow
wsMaster.Cells(i, 2) = Application.VLookup(wsMaster.Cells(i, 1), Vrange, mf_iA, 0)
Next i
'
End Sub
我也嘗試用case語句來完成這個工作,但是我覺得我對上面的代碼有了進一步的瞭解。如果你可以讓我知道,如果這個代碼是愚蠢的,或者如果我能解決內存不足錯誤,我將不勝感激。如果我能使這個工作起來,我會用更多的專欄來複制這個過程,以防萬一。謝謝!!
如果你沒有調暗'Vrange',那麼Excel會將它視爲'Variant'並嘗試加載你的範圍'rB'的全部內容(它定義爲'Set rB = wsB.Range(「 A:ZA「)')作爲這個新變量'Vrange'的數組。由於該數組爲27列,超過65000(或超過100萬Excel 2007+)行,因此Excel崩潰。基本上你需要用'Dim Vrange as Range'這行聲明Vrange作爲範圍變量,然後在你的If .. Elseif ..語句中將它設置爲期望的範圍。 – tigeravatar 2015-02-09 16:58:05
看起來你還需要做同樣的'Mrange' – tigeravatar 2015-02-09 17:01:04
哦,男人,我認爲這樣做!這是很好的信息,非常感謝你! – msim 2015-02-09 17:02:59