我正在尝试使用 vba 引用具有通用名称和唯一编号的工作表范围,以在每张工作表上明确范围。但我收到 1004 错误。
For lngWeek = 1 To 53
strSheet = "Week" & Trim(Str(lngWeek))
strRange = strSheet & "!B5:H7"
Range(strRange).Activate
Next
工作表是 Week1、Week2 等,我需要清除每张工作表上的 B5:H7 范围。从第 1 周一直到第 53 周。为什么 Range.Activate 无法选择每个页面?
最佳答案
您在这里收到错误 1004:
Range(strRange).Activate
因为
strRange
符合图纸要求,但 Range
不是;这是一个 implicit ActiveSheet reference ,这意味着 Range.Activate
成员(member)通话只能在 strRange
时有效指的是已经在 ActiveSheet
上的单元格.建议:重命名strRange
至cellAddress
或真正有意义的东西。 "str"-for-String 没用; “哦,那是一个地址”是 ;-)为了能够选择特定的
Range
,您必须首先取消引用 Worksheet
您打算使用的对象 - sheetName
包含工作表的名称:Dim ws As Worksheet
Set ws = ThisWorkbook.Worksheets(sheetName)
然后是 strRange
地址不再需要 WeekXX!
部分:ws.Activate
ws.Range("B5:H7").Select
请注意,除非是为了方便用户,否则通常没有理由 Select
或 Activate
VBA 中的任何内容:当您正确限定正在使用的所有对象时,当 ActiveSheet
时,您将不会收到错误 1004。不是您的代码假定的工作表处于事件状态,因为代码将不再假定工作表处于事件状态。
关于excel - 如何在 vba 中引用名称不同的工作表名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67692258/