创建工作表,从模板链接的新行 - 只有一步之遥

时间:2013-10-18 18:16:49

标签: excel vba excel-vba

我正在尝试创建几乎完全自动化的测试模板。我接近完成它!有几件事让我头疼不已!我对VBA真的很陌生,我的理解非常粗糙,我知道如何复制和放置东西,做一些小修改等等......

我有一个包含5张纸的文件。表单列出如下:摘要,WTemplate(隐藏),ATemplate(隐藏),引用(隐藏)和SummaryTemplate(隐藏)。这两个模板是必需的,因为它们是两种不同类型的测试。我在摘要表上有一个按钮,用于制作其中一个隐藏模板的副本,它会询问新工作表的名称(这就是我想要的)。

我需要的下一件事就是创建这些工作表时,我希望在Summary工作表中添加一行,其中包含所需的所有单元格链接。我在SummaryTemplate工作表中已经设置了一行。每个新行应该添加到它的系列中的最后一行,即 - 有一个用于W测试的部分和一个用于A测试的部分。

我可以通过2次不同的按钮点击来执行此操作,但是必须按特定顺序完成,否则会得到一堆垃圾!我试图把2个功能放在一起。我认为在创建行之前,工作表创建必须以某种方式结束。我还需要知道如何使用第一个问题的输入来在replace命令中进行更改(现在我有行创建,询问“你要链接哪个测试编号?” - 我希望它能够消失只需使用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': 范围类的插入方法失败 Debug将我发送到以下行: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

感谢您的帮助

2 个答案:

答案 0 :(得分: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,我认为您会发现它有效,

这样它就会使用你在调用第一个InputBox时设置的NewPageName的内容。

PS:使用F8逐步执行代码是查找意外结果(即第二个输入框)发生位置的好方法。

答案 1 :(得分:0)

YES !!!!!!!!!!!!

它有效!

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