我有一个excel宏,它从另一个工作表中的特定列读取内容。我想在WITH语句中使用工作表名中的一个变量,但是在每一行中都会得到一个错误消息“在运行时,对象是必需的”。
我已经搜索了如何在对象名称中使用变量,并尝试过,但没有结果。
这段代码起作用
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有什么线索可以让我把这个弄到手吗?
发布于 2019-02-04 09:48:40
工作表可以通过以下四种方式来参考:
CodeName (默认情况下与选项卡的名称相同),除非后者被更改;不久前,我在这里写下了这个答案-- https://stackoverflow.com/a/52721327/5448626
编写With Blad2时,Blad2是工作表的代号。例如,这里的那个:

因此,它已经是一个变量,Excel可以识别它。另一方面,With ("Blad" & bld)是一个字符串,而不是工作表变量。
要使其工作,使用With Worksheets("Blad" & bld),使用工作表的工作表名称。
发布于 2019-02-04 09:53:44
您正在尝试使用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 Withhttps://stackoverflow.com/questions/54513348
复制相似问题