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

为何VBA过程仅在指定工作表运行?动态范围报错求助

VBA运行时错误'1004'排查与修复

问题根源

你遇到的运行时错误'1004',核心原因是未明确指定Cells对象所属的工作表:

  • 在标准模块中,Cells默认指向当前活动工作表,而非你要操作的wsPOMOC。当执行wsPOMOC.Range(Cells(3, 1), Cells(ilewierszy + 2, 1))时,相当于试图用活动工作表的单元格去定义wsPOMOC的范围,两个工作表不匹配就会触发错误。
  • 而在wsPOMOC的工作表模块中,Cells默认归属该工作表,所以代码能正常运行。

修复方案

给所有Cells对象加上wsPOMOC.前缀,明确指定其归属的工作表;同时修正代码中屏幕更新的收尾错误:

Sub FilrtrowanieUnikatowychDanych()

    Application.ScreenUpdating = False

    Dim wyraz As Range
    Dim Ciagpolaczony As String
    Dim ilewierszy As Integer
    Dim zakres As Range

    wsPOMOC.Range("A3").CurrentRegion.Clear

    Arkusz1.Range("Tabela1").AdvancedFilter Action:=xlFilterCopy, _
        CriteriaRange:=Arkusz1.Range("Tabela1[Kolumna1]"), CopyToRange:= _
        wsPOMOC.Range("A3"), Unique:=True

    ilewierszy = wsPOMOC.Range("A3").CurrentRegion.Rows.Count
    ' 明确指定Cells属于wsPOMOC工作表
    Set zakres = wsPOMOC.Range(wsPOMOC.Cells(3, 1), wsPOMOC.Cells(ilewierszy + 2, 1))

    Arkusz1.Range("B3").Clear

    For Each wyraz In zakres
        Ciagpolaczony = Ciagpolaczony & wyraz & ",!"
    Next wyraz

    Arkusz1.Range("B3").Value = "!" & Trim(Ciagpolaczony)

    ' 恢复屏幕更新(原代码此处错误设置为False)
    Application.ScreenUpdating = True
End Sub

额外优化建议

可以直接用CurrentRegion获取完整的筛选结果范围,避免手动计算行数,让代码更简洁可靠:

' 替换原有的行数计算和范围定义代码
Set zakres = wsPOMOC.Range("A3").CurrentRegion
' 如果不需要包含表头,可调整为:
' Set zakres = wsPOMOC.Range("A3").CurrentRegion.Offset(1).Resize(wsPOMOC.Range("A3").CurrentRegion.Rows.Count - 1)

内容的提问来源于stack exchange,提问作者Grzegorz

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 15:38:36