我想創建一個幾乎完全自動化的測試模板。我接近完成了!有幾件東西讓我感到頭痛!我對VBA真的很陌生,我的理解非常粗糙,我知道如何複製和放置東西,並做一些小修改等等...創建工作表,從模板鏈接新行 - 只有1步遠
我有一個包含5張表的文件。表格如下所示:摘要,WTemplate(隱藏),ATemplate(隱藏),References(隱藏)和SummaryTemplate(隱藏)。 2個模板是必需的,因爲它們是2種不同類型的測試。我在彙總表上有一個用於製作其中一個隱藏模板副本的按鈕,它要求輸入新工作表的名稱(這正是我想要的)。
我需要的下一件事是創建這些表單時,我想要將一行添加到彙總表中,該表格中包含所有需要的單元格鏈接。我已經在SummaryTemplate表單中設置了一行。每個新行都應該添加到系列中最後一行的下方,即 - 有一個W測試部分和一個低於A測試部分。
我可以做到這一點,因爲2個不同的按鈕點擊,但他們必須按特定的順序,如果不是你得到一堆廢話!我正試圖將這兩個功能放在一起。我認爲在創建行之前,表單創建必須以某種方式結束。我還需要知道如何使用第一個問題的輸入來更改替換命令(現在我的行創建問「您想鏈接哪個測試編號?」) - 我想讓它消失並且只需使用1輸入)。
這裏有2個按鈕:
Private Sub NewWaterTest_Click()
Sheets("WTemplate").Visible = True
Sheets("WTemplate").Copy After:=Sheets("Summary")
NewPageName = InputBox("What would you like to call your new Worksheet")
ActiveWindow.ActiveSheet.Name = NewPageName
Sheets("WTemplate").Visible = False
End Sub
Private Sub NextRow_Click()
ActiveSheet.Unprotect
Sheets("SummaryTemplate").Visible = True
Worksheets("SummaryTemplate").Activate
ActiveSheet.Rows(1).EntireRow.Select
Selection.Copy
Worksheets("Summary").Activate
ActiveCell.Offset(1).Insert
Sheets("SummaryTemplate").Visible = False
Worksheets("Summary").Activate
Sheets("Summary").Select
Cells.Replace What:="WTemplate", Replacement:=InputBox("Which Test Number would you like to link?"), LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=True, SearchFormat:=False, _
ReplaceFormat:=False
ActiveSheet.Protect
End Sub
這就是我試圖拿出(沒有運氣):
Private Sub NewWaterTest_Click()
ActiveSheet.Unprotect
Sheets("WTemplate").Visible = True
Sheets("WTemplate").Copy After:=Sheets("Summary")
NewPageName = InputBox("What would you like to call your new Worksheet")
Sheets("WTemplate").Visible = False
Sheets("SummaryTemplate").Visible = True
Worksheets("SummaryTemplate").Activate
ActiveSheet.Rows(1).EntireRow.Select
Selection.Copy
Worksheets("Summary").Activate
ActiveCell.Offset(1).Insert
Sheets("SummaryTemplate").Visible = False
Worksheets("Summary").Activate
Sheets("Summary").Select
Cells.Replace What:="WTemplate", Replacement:=InputBox(NewPageName), LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=True, SearchFormat:=False, _
ReplaceFormat:=False
ActiveSheet.Protect
ActiveWindow.ActiveSheet.Name = NewPageName
End Sub
謝謝! 馬特
我不知道在哪裏發佈新的更新或新的東西我已經試過這樣:
我以爲我聽錯了!它現在給我一個
運行時錯誤「1004」:範圍類的 插入方法失敗 調試送我去行:ActiveCell.Offset(1).Insert(即代碼的第12行) 。它看起來像這樣可能工作,因爲它至少完成第一部分來創建新工作表並重新正確地重命名它。我認爲這與在嘗試引用新工作表之前未完成新工作表名稱有關。
Private Sub NewWaterTest_Click()
Sheets("WTemplate").Visible = True
Sheets("WTemplate").Copy After:=Sheets("Summary")
NewPageName = InputBox("What is the new test number?")
ActiveWindow.ActiveSheet.Name = NewPageName
Sheets("Wtemplate").Visible = False
ActiveSheet.Unprotect
Sheets("SummaryTemplate").Visible = True
Worksheets("SummaryTemplate").Activate
ActiveSheet.Rows(1).EntireRow.Select
Selection.Copy
Worksheets("Summary").Activate
ActiveCell.Offset(1).Insert
Sheets("SummaryTemplate").Visible = False
Worksheets("Summary").Activate
Sheets("Summary").Select
Cells.Replace What:="WTemplate", Replacement:=NewPageName, LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=True, SearchFormat:=False, _
ReplaceFormat:=False
ActiveSheet.Protect
End Sub
感謝所有幫助
我沒有你的問題的答案,但有一些友好的建議。有了這種複雜程度,您需要編寫代碼而不使用「選擇」和「激活」。做一個互聯網搜索或得到一個體面的VBA書,它會解釋爲什麼。另外,習慣爲您操作的工作表,範圍和其他對象創建變量,並在創建/識別後立即將該對象分配給變量。您將獲得更好的Intellisense和更易維護/可靠的代碼。 –
我會嘗試看看,但是,我必須自己學習! –
http://stackoverflow.com/questions/10714251/excel-macro-avoiding-using-select – pnuts