添加C列NONE判断后VBA代码触发1004错误求助
问题分析与修正代码
错误原因
- 引号格式错误:代码中使用了中文全角引号(
“”),VBA仅识别英文半角引号(""),这会直接触发语法错误。 - 单元格引用逻辑错误:
ws.Range("C2:C")是引用整列C2至末尾,但循环是逐行处理A列数据,需要判断的是当前循环行(第i行)的C列值,而非整列。直接将整列与单个字符串比较会触发1004错误,因为无法将多值区域和单值直接匹配。 - 工作表引用隐患:
Worksheets(sheet1)若sheet1不是工作表的代码名,会导致对象引用错误,用工作表名称的字符串形式(如"Sheet1")兼容性更强。
修正后的代码
Sub Sheet2_Button_Click() Dim ws As Worksheet, lastR As Long, arrA, arrC, arrSpl, arrFin, i As Long, j As Long, k As Long Set ws = ActiveSheet lastR = ws.Range("A" & ws.Rows.Count).End(xlUp).Row ' 同时读取A、C列数据到数组,提升运行效率 arrA = ws.Range("A1:A" & lastR).Value2 arrC = ws.Range("C1:C" & lastR).Value2 ' 预估存储数组的最大容量,可根据实际情况调整 ReDim arrFin(1 To UBound(arrA) * 15, 1 To 1) For i = 1 To UBound(arrA) ' 匹配当前行A列非空且C列等于"NONE"的条件 If arrA(i, 1) <> "" And arrC(i, 1) = "NONE" Then arrSpl = Split(arrA(i, 1), vbLf) For j = 0 To UBound(arrSpl) k = k + 1 arrFin(k, 1) = arrSpl(j) Next j End If Next i If k > 0 Then Worksheets("Sheet1").Range("B:B").ClearContents Worksheets("Sheet1").Range("B1").Resize(k, 1).Value2 = arrFin End If End Sub
关键修改说明
- 替换中文全角引号为英文半角引号,解决语法识别问题。
- 新增C列数据数组
arrC,循环中直接通过arrC(i,1)判断对应行的C列值,既避免整列比较的错误,又大幅提升代码运行效率(数组操作远快于单元格引用)。 - 工作表引用改为
Worksheets("Sheet1"),避免非代码名引用的潜在错误。 - 统一
rows为规范写法Rows(VBA不区分大小写,但规范写法更易读)。
内容的提问来源于stack exchange,提问作者PYC
相关产品推荐
相关产品推荐

