Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 未分配工作表代码名_Vba_Excel - Fatal编程技术网

Vba 未分配工作表代码名

Vba 未分配工作表代码名,vba,excel,Vba,Excel,我正在尝试将工作表的代码名分配给vriable。 有时它正确地获取了代码名,有时它不正确,变量保持空 Dim sCodeName As String sCodeName = Worksheets(atar).CodeName atar是一个包含工作表名称的变量。 当我停止代码运行,并在调试模式下运行时,它工作正常。 原因可能是什么 无限制的工作表与活动工作簿相同,可能您对某些情况下哪个工作簿处于活动状态的假设太多了 建议完全限定工作表。因此,获取对工作簿对象的引用,比如说wbFoo,然后使

我正在尝试将工作表的代码名分配给vriable。
有时它正确地获取了代码名,有时它不正确,变量保持空

 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给出了一个空值。