我正在尝试构建一个电子表格来跟踪项目数据,包括每个项目的工作表和提供摘要信息的概述表。我根据一组样本项目构建了一张表,这一切似乎都按照我的预期运作。但是,添加一个新项目需要花费很多精力,因此我决定给用户一个单击按钮,一个对话框来询问一个项目名称,然后让脚本完成剩下的工作。
我创建了一个模板表(方便地标题为" Template"),并且我尝试使用Worksheets("Name").Copy
方法将该表的重复脚本编写到工作簿的末尾在MSDN上。这种尝试反映在下面的前几行代码中。之后,我将模板行添加到概览表的列表末尾(名为" Dashboard")。
最终发生的事情(据我所知)是工作表无法复制,工作簿中的最后一个工作表被选中,ActiveSheet.Name = Name
最终重命名,炸毁我的信息中心使用INDIRECT
查找和表示数据的工作表。
这是我目前拥有的代码(效率低下):
Sub AddSOW()
' Duplicate the template sheet
Dim Name As String
Name = InputBox("SOW Name")
Worksheets("Template").Copy After:=Sheets(Sheets.Count)
ActiveSheet.Name = Name
Sheets("Dashboard").Select
' Find the last row of data
FinalRow = Cells(Rows.Count, 1).End(xlUp).Row
' Loop through each row
For x = 2 To FinalRow
' Decide if to copy based on column A
ThisValue = Cells(x, 1).Value
If ThisValue = "Template" Then
Cells(x, 1).Resize(1, 50).Copy
NextRow = Cells(Rows.Count, 1).End(xlUp).Row + 1
Cells(NextRow, 1).Select
ActiveSheet.Paste
ActiveCell.Value = Name
End If
Next x
End Sub
没有错误被抛出,它只是不起作用。单步通过也没有帮助。
答案 0 :(得分:0)
事实证明我造成了我自己的问题。
为了确保用户不修改模板工作表,我将其隐藏起来。复制它也复制.Visible
属性设置,因此工作表实际上是重复的,但由于它们不可见,书中可见的最后一页被选中,因此获得了重命名。
我通过一些错误检查更新了代码,因此取消输入框不会导致问题。这是工作代码。
Sub AddSOW()
Dim SName As String
SName = InputBox("SOW Name")
' Duplicate the template sheet
If SName <> "" Then
Worksheets("Template").Visible = True
Worksheets("Template").Copy After:=Sheets(Sheets.Count)
ActiveSheet.Name = SName
Worksheets("Template").Visible = False
Sheets("Dashboard").Select
' Find the last row of data
FinalRow = Cells(Rows.Count, 1).End(xlUp).Row
' Loop through each row
For x = 2 To FinalRow
' Decide if to copy based on column A
ThisValue = Cells(x, 1).Value
If ThisValue = "Template" Then
Cells(x, 1).Resize(1, 50).Copy
NextRow = Cells(Rows.Count, 1).End(xlUp).Row + 1
Cells(NextRow, 1).Select
ActiveSheet.Paste
ActiveCell.Value = SName
End If
Next x
End If
End Sub