我試圖將工作表的代碼名稱分配給vriable。
有些時候它正確地獲取代碼名稱,有時它不會,變量保持爲空。未分配工作表代碼名稱
Dim sCodeName As String
sCodeName = Worksheets(atar).CodeName
atar
是一個包含工作表名稱的變量。 當我停止代碼運行,並在調試模式coninue,它工作正常。 可能是什麼原因?
我試圖將工作表的代碼名稱分配給vriable。
有些時候它正確地獲取代碼名稱,有時它不會,變量保持爲空。未分配工作表代碼名稱
Dim sCodeName As String
sCodeName = Worksheets(atar).CodeName
atar
是一個包含工作表名稱的變量。 當我停止代碼運行,並在調試模式coninue,它工作正常。 可能是什麼原因?
Worksheets
沒有資格指的是與ActiveWorkbook
相同,也許你假設太多關於哪些工作簿在某些情況下是活動的。
建議完全限定工作表。因此,獲得一個Workbook
對象的引用,說wbFoo
然後用sCodeName = wbFoo.Worksheets(atar).CodeName
試過了,那不是問題.. – Tzvibe
你可以嘗試像下面的代碼來驗證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
Tnx,我讀過它,我用你的代碼找到工作表。它發現工作表,atar和Sht.Name是相等的,並且Worksheets(atar).CodeNamev給出一個空值。 – Tzvibe
創建多個工作表但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
也許你是一個'Worksheet'的'CodeName'(不後一個'Module')。在這種情況下,'atar'必須包含有效的工作表名稱(例如:'atar =「someSheetName」') – user3598756
對不起,我犯了一個錯誤。 'atar'是工作表的名稱。 – Tzvibe
然後檢查'atar'是否包含_valid_工作表名稱 – user3598756