You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

添加C列NONE判断后VBA代码触发1004错误求助

问题分析与修正代码

错误原因

  1. 引号格式错误:代码中使用了中文全角引号(“”),VBA仅识别英文半角引号(""),这会直接触发语法错误。
  2. 单元格引用逻辑错误:ws.Range("C2:C")是引用整列C2至末尾,但循环是逐行处理A列数据,需要判断的是当前循环行(第i行)的C列值,而非整列。直接将整列与单个字符串比较会触发1004错误,因为无法将多值区域和单值直接匹配。
  3. 工作表引用隐患: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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 16:04:54