簡體   English   中英

將工作簿VBA模塊轉換為personal.xlsb會導致只讀問題

[英]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"

對?

另外,您的信息ActiveWorkbookThisWorkbook是不同的。 前者是激活的工作簿,而后者是寫入VBA代碼的工作簿

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM