2013-10-18 46 views
2

我想創建一個幾乎完全自動化的測試模板。我接近完成了!有幾件東西讓我感到頭痛!我對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 

感謝所有幫助

+4

我沒有你的問題的答案,但有一些友好的建議。有了這種複雜程度,您需要編寫代碼而不使用「選擇」和「激活」。做一個互聯網搜索或得到一個體面的VBA書,它會解釋爲什麼。另外,習慣爲您操作的工作表,範圍和其他對象創建變量,並在創建/識別後立即將該對象分配給變量。您將獲得更好的Intellisense和更易維護/可靠的代碼。 –

+0

我會嘗試看看,但是,我必須自己學習! –

+0

http://stackoverflow.com/questions/10714251/excel-macro-avoiding-using-select – pnuts

回答

0

您所看到的第二個的InputBox原因是在Replacement:=InputBox(NewPageName),,因爲這是調用一個提示等於你以前選擇一個的InputBox。

Sheets("Summary").Select 
Cells.Replace What:="WTemplate", Replacement:=InputBox(NewPageName), LookAt:=xlPart, _ 
SearchOrder:=xlByRows, MatchCase:=True, SearchFormat:=False, _ 
ReplaceFormat:=False 

如果更改Replacement:=InputBox(NewPageName),Replacement:=NewPageName,我想你會發現它的工作原理,

它使用的NewPageName你被調用的第一次的InputBox時設置的內容的方式。 PS:使用F8單步執行代碼是找到意外結果(即第二個輸入框)正在發生的好方法。

+0

我試過你的建議,但沒有運氣,我認爲這個問題來自那裏沒有一個名單,直到宏結束。在創建表單之前,我通過選擇「新行」按鈕來注意到這一點。 –

0

是的!!!!!!!!!!!!

它的工作原理!

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 

Worksheets("Summary").Activate 
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 

Worksheets(NewPageName).Activate 

End Sub