2017-05-12 57 views
0

它工作完美,直到我添加了一個消息框,並從那時代碼將不會重命名工作表,並使用「從(SHEET86)」表名稱複製,而不是。VBA代碼將不會重命名工作表

我有12套由自己的按鈕激活相同的代碼,他們都工作正常,但不是第一個。我甚至從工作宏中複製了一段代碼,並更改了單元格引用,但它不會像代碼中那樣重命名工作表。

我已經在這裏複製了宏,所以您可以看到它們在各方面都是相同的。我已經檢查並重新檢查按鈕是否有正確的宏分配無效,所以想知道是否有其他人以前經歷過這種情況,或者我應該在別處尋找?

Sub copySht1() 
    On Error Resume Next 

    Dim mySheetname As String 
    Dim MyCell As Range, MyRange As Range 

    Set MyRange = Sheet74.Range("D6") 

    For p = 1 To 1  
     mySheetname = MyRange.Text 
     Sheet86.Copy After:=Sheet84 
     ActiveSheet.Name = "Schedule - " & mySheetname 
     ActiveSheet.Range("C1").Value = "Schedule - " & mySheetname 
    Next p 
    MsgBox "Schedule for aircraft" & Cells(6, "D") & " Created" 
End Sub 


Sub copySht2() 
    On Error Resume Next 

    Dim mySheetname As String 
    Dim MyCell As Range, MyRange As Range 
    Set MyRange = Sheet74.Range("E6") 

    For p = 1 To 1 
     mySheetname = MyRange.Text 
     Sheet86.Copy After:=Sheet84 
     ActiveSheet.Name = "Schedule - " & mySheetname 
     ActiveSheet.Range("C1").Value = "Schedule - " & mySheetname 
    Next p 
End Sub 
+0

刪除'爲p = 1到1'和'下一個p'從兩個潛艇。 – Vityata

+3

我幾乎不建議:避免使用「On Error Resume Next」,這會使任何錯誤消息靜音,這是非常糟糕的做法!請參閱[VBA良好實踐 - 錯誤處理](http://stackoverflow.com/documentation/excel-vba/1107/vba-best-practices/5411/error-handling) –

+0

我建議:(1)使用Option Explicit ([看看如何](http://stackoverflow.com/documentation/excel-vba/1107/vba-best-practices/3554/always-use-option-explicit))(2)刪除「On Error Resume Next」並運行你的代碼。 (3)[編輯]你的問題,並告訴我們**你在哪裏得到一個錯誤和**錯誤信息是什麼。我認爲這是查看問題的最佳方式。 –

回答

0

我敢肯定,Sheet86Sheet84沒有聲明的變量。

第一:使用Sheets("Sheet86")

二:經常使用Option Explicit,以免回來給我們提供了這樣一個簡單的錯誤。

PS:我添加Peh的建議:在接下來的錯誤恢復只是當你知道什麼可能會導致錯誤,你知道它可以恢復。

+2

我建議始終使用'工作表'而不是'工作表'。 「Sheets」集合可以包含Chart或Worksheet對象。 「工作表」集合只包含工作表對象。因此,除非你需要包括圖表等,否則不要使用'Sheets'。 –

+0

@Peh感謝這些信息,我不知道 – Pierre

+1

'Sheet74','Sheet84'和'Sheet86'幾乎可以肯定是三種不同的'CodeName'因此它們對於他們來說可能是相當有效的。 (但是**有**這些表被刪除的可能性,'Option Explicit'一定會檢測到它。) – YowE3K

0

我砸死了這樣的解決方案,但你可以嘗試:

Sub copySht1() 
    On Error Resume Next 

    Dim mySheetname As String 
    Dim MyCell As Range, MyRange As Range 

    Set MyRange = Sheet74.Range("D6") 

     mySheetname = MyRange.Text 
     Sheet86.Copy After:=Sheet84 
     Sheet86.Activate 
     ActiveSheet.Name = "Schedule - " & mySheetname 
     ActiveSheet.Range("C1").Value = "Schedule - " & mySheetname 

    MsgBox "Schedule for aircraft" & Cells(6, "D") & " Created" 
End Sub 

只是爲了檢查是否會工作:)

+0

嗨Vityata,謝謝你的迴應。結果沒有變化。她仍然頑固...... –

0

我看不出任何問題的代碼。請仔細檢查您是否正在執行copySht1()兩次,或者如果工作表名稱(「Schedule - 」& mySheetname)已經存在。只有在這些情況下,自從使用'On Error Resume Next'後,它將採用「Sheet86(2)」(或)「從(Sheets86)複製」,它不會拋出實際的錯誤消息。

+0

謝謝拉姆的回覆。我已經檢查過,並且這個名字在其他地方沒有被使用。其他11個宏全部使用相同的工作表進行復制,唯一的區別在於從單元格「D6」派生的&mySheetname。生成的消息也會生成正確的文件名,它只是不會重命名該表。 –

0

非常感謝大家對我的問題的建議。在航空而不是編碼方面,我對學習VBA非常新,因此您的所有評論讓我搜索並找到更多關於它的信息。 現在問題已解決,我所做的是刪除工作表86並從頭開始重新創建它。然後,我用新名稱重新保存工作簿,關閉Excel,重新打開並且代碼現在按照預期工作。我只能猜測真正的問題,必須與片86做。 再次,非常感謝您花時間提供反饋.. 致以問候