我有一个excel宏,可以从另一张纸的特定列中读取内容。我想在WITH语句的工作表名称中使用变量,但在For Each行中不断收到错误消息“运行时错误,需要对象”
我已经搜索了如何在对象名称中使用变量并尝试了该操作,但无济于事。
此代码有效
With Blad2
strData = Range(id & "1") & vbLf & vbLf
For Each c In .Range(id & "2:" & id & "10")
If c.Value <> "" Then
strData = strData & " - " & c.Value & vbLf
End If
Next c
End With
此代码失败。我肯定知道变量bld有一个数值,并使用MsgBox进行了测试
With ("Blad" & bld)
strData = Range(id & "1") & vbLf & vbLf
For Each c In .Range(id & "2:" & id & "10")
If c.Value <> "" Then
strData = strData & " - " & c.Value & vbLf
End If
Next c
End With
有什么线索可以使它正常工作吗?
答案 0 :(得分:2)
可以通过4种方式引用工作表:
CodeName
,默认情况下与标签的名称相同,除非更改了标签的名称; 前段时间,我在这里写下了这个答案-https://stackoverflow.com/a/52721327/5448626
当您编写With Blad2
时,Blad2
是工作表的代号。例如,这里的一个:
因此,它已经是一个变量,并且Excel可以识别它。另一方面,With ("Blad" & bld)
是字符串,而不是工作表变量。
要使其正常工作,请使用With Worksheets("Blad" & bld)
,并使用工作表的工作表名称。
答案 1 :(得分:2)
您要使用的是Variable Variable
作为SheetCode名称。你不能那样做。要实现您想要的目标,请尝试此...
Dim bld As Long: bld = 2
Dim shtCode As String
shtCode = "Blad" & bld
With Sheets(ThisWorkbook.VBProject.VBComponents(shtCode).Properties("Name").Value)
Debug.Print .Name
End With