Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Dim saveIt As Boolean
If ThisWorkbook.Name = "Test.xlsm" Then
Sheets("Sheet1").Select
If Not IsEmpty(A1.Value) Then
MsgBox "This workbook is 'read only' Please rename this workbook."
strName = "Please enter a new file name."
ThisPAth = Application.ActiveWorkbook.Path
ThisFile = Range("B1").Value
ActiveWorkbook.SaveAs Filename:=ThisPath & ThisFile & ".xlsm", FileFormat:=52, CreateBackup:=False
Else
MsgBox "Cancelled."
End If
End If
End Sub
我有一个受密码保护的工作簿(Test.xlsm"严格用于数据输入。当用户以只读方式打开工作簿时,输入数据,然后退出工作簿/模板,我想要SaveAs对话框自动弹出以使Sheet1的A1内容成为"建议"在SaveAs框中自动填充的文件名的框。
我想如果我抓住了BeforeSave函数,我可以声明这个路径/文件名但是唉,它不起作用。自动填充框显示" Copy of Test.xlsm"。我甚至认为它没有看到上面的代码。
如何使用所需名称完成此框的自动填充。感谢。
------------更新------------------
将代码重写到下面,但它仍然没有在保存时阻止默认对话框。也许我误解了Workbook_BeforeSave功能。我认为只要文件被保存就会自动调用它。我从不希望用户使用名称Test.xltm保存文件(我将文件更改为模板以查看是否有所不同),但建议用户将文件重命名为B1中的值以用于标准化原因。代码不会自动调用。如果我通过从快速访问工具栏执行宏来调用它,我能够获得类似的代码,但是当用户选择"关闭",&#34时似乎无法自动执行它;保存"或者"另存为"来自"文件"下拉菜单。
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Dim saveDialog As FileDialog
Debug.Print "Hello"
Set saveDialog = Application.FileDialog(msoFileDialogSaveAs)
If ThisWorkbook.Name = "Test.xltm" Then
Application.EnableEvents = False
Debug.Print "Save as"
Set saveDialog = Application.FileDialog(msoFileDialogSaveAs)
With saveDialog
.InitialFileName = "foo.xlsm"
.Show
End With
Application.EnableEvents = True
Else
Debug.Print "Cancel"
End If
End Sub
模板受密码保护,并由用户只读打开,因此在退出/保存/另存为时,应始终打开“另存为”对话框。正确?并且不应该在这种情况下调用Workbook_BeforeSave吗?
答案 0 :(得分:0)
示例:
Sub saveDialogTest()
Dim saveDialog As FileDialog
Set saveDialog = Application.FileDialog(msoFileDialogSaveAs)
With saveDialog
.InitialFileName = "Foo.xlsx"
.Show
End With
End Sub
如果您使用此类FileDialog
,则可以更改建议的文件名。