我正在尝试使用 vba 引用具有通用名称和唯一编号的一系列工作表来清除每张工作表上的范围。但是我收到 1004 错误。
For lngWeek = 1 To 53
strSheet = "Week" & Trim(Str(lngWeek))
strRange = strSheet & "!B5:H7"
Range(strRange).Activate
Next
Run Code Online (Sandbox Code Playgroud)
工作表是 Week1、Week2 等,我需要清除每张工作表上的范围 B5:H7。从第 1 周一直到第 53 周。
为什么 Range.Activate 无法选择每个页面?
您在此处收到错误 1004:
Run Code Online (Sandbox Code Playgroud)Range(strRange).Activate
因为strRange是合格的,但Range不是;它是一个隐式的 ActiveSheet 引用,这意味着Range.Activate成员调用只能在strRange引用已经在ActiveSheet. 建议:重命名strRange为cellAddress或一些真正有意义的东西。“str”-for-String 没有用;“哦,那是地址”是 ;-)
为了能够选择特定的Range,您必须首先取消引用Worksheet您要使用的对象 - 其中sheetName包含工作表的名称:
Range(strRange).Activate
Run Code Online (Sandbox Code Playgroud)
然后strRange地址不再需要该WeekXX!部分:
Dim ws As Worksheet
Set ws = ThisWorkbook.Worksheets(sheetName)
Run Code Online (Sandbox Code Playgroud)
需要注意的是,除非它是为方便用户,通常有很少或几乎没有理由永远Select或Activate在VBA东西:当你正确限定所有对象你,你不会得到错误1004正在工作时,ActiveSheet不是您的代码假定工作表处于活动状态,因为代码将不再假设工作表处于活动状态。