簡體   English   中英

應用程序定義或對象定義錯誤 (1004)

[英]Application-defined or object-defined error (1004)

我有一個電子表格,它允許用戶在單個頁面上輸入信息,然后按一個按鈕將所有信息發送到需要去的地方。 我有一個函數可以檢查工作表是否存在,然后創建模板工作表的副本並將其重命名為所需的名稱。

    Application.ScreenUpdating = False
    For i = 1 To 10
        OpName = Cells(i + 3, 2).Value
        If Not OpName = "" Then
            OpCheck (OpName)

因此,上面的代碼循環遍歷 B 行的單元格,並如上所述運行 opcheck 函數。

Function OpCheck(Init As String)
    Init = UCase(Init)
    exists = False
    For i = 1 To Worksheets.Count
        If Worksheets(i).Name = Init Then
            exists = True
        End If
    Next i
    If Not exists Then
        Sheets("Op Template").Visible = True
        Sheets("Op Template").Activate
        ActiveSheet.Copy After:=Worksheets(Sheets.Count)
        ActiveSheet.Name = Init
        RenameTable (Init)

        On Error Resume Next

    End If
    Sheets("Op Template").Visible = False

End Function

這是函數的代碼,錯誤發生在行中

ActiveSheet.Name = Init

這在一段時間內有效,但現在無法找到名稱為 TS 的工作表,並在嘗試使用已存在的名稱重命名新頁面時出錯。 我只是不明白為什么它首先找不到頁面。

提前致謝。

您的代碼有時無法找到的原因是因為您需要在找到工作表后退出For循環。 一個修復是:

For i = 1 To Worksheets.Count
    If Worksheets(i).Name = Init Then
        exists = True
        Exit For    ' ADD THIS LINE
    End If
Next i

其他一些代碼注釋:

  • 考慮將Function OpCheck更改為Sub OpCheck因為您沒有返回任何內容
  • 您的代碼可能導致Init在調用OpCheck的函數或子程序中被轉換為大寫。 為避免這種情況,請將聲明更改為: OpCheck(ByVal Init As String)

這部分代碼:

Sheets("Op Template").Visible = True
Sheets("Op Template").Activate
ActiveSheet.Copy After:=Worksheets(Sheets.Count)
ActiveSheet.Name = Init
RenameTable (Init)

避免使用ActiveSheet可以降低風險

dim ws as Worksheet
Set ws = Sheets("Op Template")
ws.Visible = True
ws.Copy After:=Worksheets(Sheets.Count)

' Instead of this
' ActiveSheet.Name = Init
' Something like this
Worksheets(Sheets.Count).Name = Init
RenameTable (Init)

希望有幫助

暫無
暫無

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

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