2017-02-12 67 views
0

我試圖將工作表的代碼名稱分配給vriable。
有些時候它正確地獲取代碼名稱,有時它不會,變量保持爲空。未分配工作表代碼名稱

Dim sCodeName As String 
sCodeName = Worksheets(atar).CodeName 

atar是一個包含工作表名稱的變量。 當我停止代碼運行,並在調試模式coninue,它工作正常。 可能是什麼原因?

+0

也許你是一個'Worksheet'的'CodeName'(不後一個'Module')。在這種情況下,'atar'必須包含有效的工作表名稱(例如:'atar =「someSheetName」') – user3598756

+0

對不起,我犯了一個錯誤。 'atar'是工作表的名稱。 – Tzvibe

+0

然後檢查'atar'是否包含_valid_工作表名稱 – user3598756

回答

0

Worksheets沒有資格指的是與ActiveWorkbook相同,也許你假設太多關於哪些工作簿在某些情況下是活動的。

建議完全限定工作表。因此,獲得一個Workbook對象的引用,說wbFoo然後用sCodeName = wbFoo.Worksheets(atar).CodeName

+0

試過了,那不是問題.. – Tzvibe

0

你可以嘗試像下面的代碼來驗證atar並在工作表名稱中的一個存在於ThisWorkbook

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 
+0

Tnx,我讀過它,我用你的代碼找到工作表。它發現工作表,atar和Sht.Name是相等的,並且Worksheets(atar).CodeNamev給出一個空值。 – Tzvibe

-1

創建多個工作表但SOMETIMES不與宏觀工作表中工作,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