我有一个包含三个工作表的工作簿:产品,客户,期刊 . 我需要的是分配给上述每张表格中的按钮的宏 . 如果用户单击该按钮,则应将活动工作表保存为具有以下命名约定的新工作簿:
SheetName_ContentofCellB3_DD.MM.YYYY
哪里
-
SheetName应该是当前活动工作表的名称
-
ContentofCellB3每次活动表单元格B3的内容
-
DD.MM.YYYY当前日期
我写的下面的宏做了前面提到的:
Sub MyMacro()
Dim WS As Worksheet
Dim MyDay As String
Dim MyMonth As String
Dim MyYear As String
Dim MyPath As String
Dim MyFileName As String
Dim MyCellContent As Range
MyDay = Day(Date)
MyMonth = Month(Date)
MyYear = Year(Date)
MyPath = "C:\MyDatabase"
Set WS = ActiveSheet
Set MyCellContent = WS.Range("B3")
MyFileName = "MyData_" & MyCellContent & "_" & MyDay & "." & MyMonth & "." & MyYear & ".xls"
WS.Copy
Application.WindowState = xlMinimized
ChDir MyPath
If CInt(Application.Version) <= 11 Then
ActiveWorkbook.SaveAs Filename:= _
MyFileName, _
ReadOnlyRecommended:=True, _
CreateBackup:=False
Else
ActiveWorkbook.SaveAs Filename:= _
MyFileName, FileFormat:=xlExcel8, _
ReadOnlyRecommended:=True, _
CreateBackup:=False
End If
ActiveWorkbook.Close
结束子
但是有些问题我希望得到你的帮助:
-
如何更改上述宏,以便用户可以决定新工作簿的保存路径?
-
如何更改上面的宏以使新工作簿不包含作为初始工作簿工作表一部分的任何宏?
-
你在我的宏中看到任何可以做得更好的方法吗?
感谢大家提前的时间 .
附:对于我的使用情况,必须始终存在从excel 2007到excel 2002的向后兼容性
3 回答
为了搭载Lunatik的建议,你可以补充一下:
如果用户点击取消,
GetSaveAsFilename
将返回FALSE
. 您还可以提供默认文件名 .这是一种味道,但
Format(Date, "dd.mm.yyyy")
可以取代你的方法 .第一个很简单 . 使用
Application.GetSaveAsFilename
允许用户指定路径和文件名 .我已经使用Chip Pearson中的以下内容将VBA从复制的工作簿中剥离出来,它应该做你以后的事情:
抱歉,没有时间详细检查您的代码(离开工作!)
另一个应用:SHBrowseForFolder