Vba 未分配工作表代码名
我正在尝试将工作表的代码名分配给vriable。Vba 未分配工作表代码名,vba,excel,Vba,Excel,我正在尝试将工作表的代码名分配给vriable。 有时它正确地获取了代码名,有时它不正确,变量保持空 Dim sCodeName As String sCodeName = Worksheets(atar).CodeName atar是一个包含工作表名称的变量。 当我停止代码运行,并在调试模式下运行时,它工作正常。 原因可能是什么 无限制的工作表与活动工作簿相同,可能您对某些情况下哪个工作簿处于活动状态的假设太多了 建议完全限定工作表。因此,获取对工作簿对象的引用,比如说wbFoo,然后使
有时它正确地获取了代码名,有时它不正确,变量保持空
Dim sCodeName As String
sCodeName = Worksheets(atar).CodeName
atar
是一个包含工作表名称的变量。
当我停止代码运行,并在调试模式下运行时,它工作正常。
原因可能是什么
无限制的工作表
与活动工作簿
相同,可能您对某些情况下哪个工作簿处于活动状态的假设太多了
建议完全限定工作表。因此,获取对
工作簿
对象的引用,比如说wbFoo
,然后使用sCodeName=wbFoo.Worksheets(atar).CodeName
您可以尝试下面的代码来验证此工作簿
中的一个工作表名称中是否存在atar
Option Explicit
Sub GetWorksheetCodeName()
Dim sCodeName As String
Dim atar As String
Dim Sht As Worksheet
'atar = "Sheet3" '<-- for tests only
' loop through all worksheets in ThisWorkbook
For Each Sht In ThisWorkbook.Worksheets
If Sht.Name Like atar Then
sCodeName = Worksheets(atar).CodeName
Exit For
End If
Next Sht
End Sub
选项显式
子GetWorksheetCodeName()
将sCodeName设置为字符串
作为字符串的Dim atar
将Sht变暗为工作表
“atar=“Sheet3””创建多个工作表,但有时不使用工作表中的宏仅使用VBA代码运行
Sub WSCreate()
Dim WSA As String
Dim WSB As String
Dim WS As Worksheet
WSA = "SheetA"
WSB = "SheetB"
Application.DisplayAlerts = False
On Error Resume Next
'DELETE MULTIPLE WORKSHEETS (IF Already Exist)
Set WS = Nothing
Set WS = Sheets(WSA)
WS.Delete
Set WS = Nothing
Set WS = Sheets(WSB)
WS.Delete
Set WS = Nothing
'CREATE MULTIPLE WORKSHEETS
With Application.ThisWorkbook
.Worksheets.Add.Name = WSA 'WSA = SheetA
.VBProject.VBComponents(Worksheets(WSA).CodeName).Name = WSA
.Worksheets.Add.Name = WSB 'WSB = SheetB
.VBProject.VBComponents(Worksheets(WSB).CodeName).Name = WSB
End With
If Err <> 0 Then Exit Sub
End Sub
子WSCreate()
将WSA设置为字符串
将WSB设置为字符串
将WS设置为工作表
WSA=“SheetA”
WSB=“SheetB”
Application.DisplayAlerts=False
出错时继续下一步
'删除多个工作表(如果已存在)
设置WS=Nothing
设置WS=图纸(WSA)
WS.Delete
设置WS=Nothing
设置WS=图纸(WSB)
WS.Delete
设置WS=Nothing
'创建多个工作表
使用Application.ThisWorkbook
.Worksheets.Add.Name=WSA'WSA=SheetA
.VBProject.VBComponents(工作表(WSA).CodeName.Name=WSA
.Worksheets.Add.Name=WSB'WSB=SheetB
.VBProject.VBComponents(工作表(WSB).CodeName).Name=WSB
以
如果错误为0,则退出Sub
端接头
可能您正在查找工作表
(不是模块
)的代码名
。在这种情况下,atar
必须包含有效的工作表名称(例如:atar=“someSheetName”
)对不起,我搞错了。”atar'是工作表的名称。然后选中atar
以包含有效的工作表名称它是一个有效的工作表名称,有时它使用相同的值。您可能对ActiveWorkbook
有问题:请参阅@SMeaden answerTnx,我阅读了它,我使用了您的代码来查找工作表。它发现工作表、atar和Sht.Name是相等的,但工作表(atar).CodeNamev给出了一个空值。