所以在问这个之前我搜索并找到了类似于我在这里要做的事情。
基本上我有工作簿AlphaMaster。此工作簿是我想用来从每周创建新工作簿的模板。
在这个工作簿中有一些名为:周一至周六的表格和附加表格,其中包含周一,周二等的相应日期。
我创建了一个在打开工作簿时加载的表单。我想要的是当我点击表单运行它将:
使用适当的工作日重命名工作簿
工作簿以星期结束日期的名称命名为6张将在此之后重命名的日期(例如,截止日期为1月5日的一周)将其放入用户表单中:
WeekEnd:Jan-5-2014 日期 周一:12月30日 周二:12月31日 威尔:1月1日 周四:Jan.2 周五:1月3日 星期六:1月4日
比点击命令。到目前为止,这就是我所拥有的:
Private Sub CommandButton1_Click()
Dim thisWb As Workbook, wbTemp As Workbook
Dim ws As Worksheet
On Error GoTo dummkopf
Application.DisplayAlerts = False
Set thisWb = ThisWorkbook
Set wbTemp = Workbooks.Add
On Error Resume Next
For Each ws In wbTemp.Worksheets
ws.Delete
Next
On Error GoTo 0
For Each ws In thisWb.Sheets
ws.Copy After:=wbTemp.Sheets(1)
Next
wbTemp.Sheets(1).Delete
wbTemp.SaveAs "blahblahblah\New.xlsx"
new.xlsx我希望从表单中填写
Vorfahren:
Application.DisplayAlerts = True
Exit Sub
Whoa:
MsgBox Err.Description
Resume Vorfahren
End Sub
并发症:
目前,虽然这确实有效,但我无法更改文件的名称,并将其命名为.saveAs区域中的名称。我想我需要创建一个替代函数来处理这个问题。其次,完成后,我的工作表将按照与模板相反的顺序显示。
非常感谢有关从哪里开始的一些指导/建议!
答案 0 :(得分:1)
这里有几个问题:
您无法删除工作簿中的所有工作表。
您应该将工作表复制到最后以保留订单(如果源工作簿中的工作表已排序):
For Each ws In thisWb.Sheets
ws.Copy After:=wbTemp.Sheets(wbTemp.Sheets.Count)
wbTemp.Sheets(wbTemp.Sheets.Count).Name = "NewSheetName" ' <-- Rename the copied sheet here
Next
如果您的源工作表没有名称“Sheet#”,则之后删除默认工作表。
Application.DisplayAlerts = False
For Each ws In wbTemp.Sheets
If Instr(1, ws.Name, "Sheet", vbTextCompare) > 0 Then ws.Delete
Next
Application.DisplayAlerts = True
对于SaveAs,请参阅Workbook.SaveAs Method (Excel)。
答案 1 :(得分:0)
我在我的应用程序中使用它并且运行良好
Set bFso = CreateObject("Scripting.FileSystemObject")
bFso.CopyFile ThisWorkbook.FullName, destinationFile, True
复制完成后,您可以在新的Excel对象中打开它,随意使用它。