我在VBA上有一个代码使我的Excel冻结(填充单元格)并给出输出消息,例如“没有足够的内存来运行”+错误1004,但我不明白为什么,因为它真的是一个简单的公式..完整代码中只有一部分会导致问题,这就是:
Sub mismatches()
Dim sht As Worksheet, cell As Range, areaToTrim As Range, LastRow As Long
LastRow = Cells(Rows.Count, "A").End(xlUp).Row
Set sht = ThisWorkbook.Worksheets("Mismatches")
sht.Activate
Range("O1").EntireColumn.Insert
sht.Cells(1, 15) = "Mismatch DRP"
Range("02:0" & LastRow).Value = _
"=IF(ISNA(VLOOKUP(K2,CDL_data!D:D,1,0)),""N/A"",I2)"
Range("02:0" & LastRow).Select
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone,
SkipBlanks:=False, Transpose:=False
我想确切地说代码的其他部分几乎完全相同,只有公式不同,但它们运行正常!即使我已经使用过这种公式,公式中的某些东西也必须“错误”或“太重”。我已经尝试了只有3行的完整代码(在表单“Mismatches”上)但是在“CDL_data”表单中有9000行(用于Vlookup)。
答案 0 :(得分:1)
你可能有一个拼写错误,在列引用中使用零而不是字母O.这意味着您引用了大量的整行,可能是9000行,并将Vlookup函数插入到每行16384个单元格中,这大约是需要计算Vlookup的1.47亿个单元格。
您可能希望使用零
更改此部分代码 Range("02:0" & LastRow).Value = _
"=IF(ISNA(VLOOKUP(K2,CDL_data!D:D,1,0)),""N/A"",I2)"
Range("02:0" & LastRow).Select
,使用字母O作为列引用:
Range("O2:O" & LastRow).Value = _
"=IF(ISNA(VLOOKUP(K2,CDL_data!D:D,1,0)),""N/A"",I2)"
Range("O2:O" & LastRow).Select
您可能希望将VBE字体更改为使用与大写字母O相比明显不同的字符的字体,以避免此类错误。 Consolas在零上使用对角线打击,这使得它很容易与O区分开来。
通常,如果您希望代码运行得更快,请避免选择内容然后根据选择进行操作。在大多数情况下,可以直接对该范围采取行动。