[英]Converting workbook VBA module into a personal.xlsb causes read-only problems
我的宏在幾天前開始工作。 作為我的新手,我正在工作簿級別進行編碼,現在我將其變成了個人宏。 當我在其他工作簿中運行與個人宏完全相同的代碼時,就會遇到一些問題。 第一個問題,我設法進行了一些更好但不夠好的重新格式化:
With ThisWorkbook
For k = 1 To ThisWorkbook.Sheets.Count
If .Sheets(k).Name = "reportdata" Then
blnFound = True
Exit For
End If
Next k
If blnFound = False Then
.Sheets.Add
With ThisWorkbook
.Name = "reportdata" 'this is where the problem is at the moment
End With
End If
End With
Set datasheet = ThisWorkbook.Worksheets(1)
Set reportsheet = ActiveWorkbook.Worksheets("reportdata")
reportsheet.Move After:=Worksheets(1)
我要在這里創建的是另一個名為reportdata的工作表。 如果此工作表已經存在,則不會創建。
我認為我的問題可能出在ThisWorkbook參考中。 我在for循環中的索引似乎已關閉,因此它可能正在執行其他超出預期的工作。 我的意圖是,此宏的用戶擁有一個工作簿,該工作簿包含來自另一個來源的數據,該數據具有一個始終具有相同名稱的工作表。 因此,用例是非常靜態的。
如何在代碼的這一部分中以“全局”規模而不是僅在工作簿級別上進行引用?
預先感謝您可以給我的任何提示!
With ThisWorkbook
.Name = "reportdata" 'this is where the problem is at the moment
End With
該塊擴展為ThisWorkbook.Name =“ reportdata”,但是工作簿沒有可寫的Name屬性-您應該命名的是剛剛添加的工作表,而不是工作簿。
您可以通過使用錯誤處理而不是循環來實現您要嘗試的操作。 看看以下內容(您也可以濃縮一些內容)
Dim reportsheet as worksheet, datasheet as worksheet
With ThisWorkbook
' You can test if the sheet exists by handling the error if it doesnt
On Error Resume Next
Set reportsheet = .Sheets("reportdata")
On Error GoTo 0
' Test if worksheet exists and add if not
If reportsheet Is Nothing Then
Set reportsheet = .Sheets.Add(after:=.Sheets(1))
reportsheet.Name = "reportdata"
End If
Set datasheet = .Worksheets(1)
End With
它應該是
.Sheets(k).Name = "reportdata"
對?
另外,您的信息ActiveWorkbook
和ThisWorkbook
是不同的。 前者是激活的工作簿,而后者是寫入VBA代碼的工作簿
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.