[英]“<Application-defined or object-defined error> Error 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.