我正在尝试创建几乎完全自动化的测试模板。我接近完成它!有几件事让我头疼不已!我对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
感谢您的帮助
答案 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