自动填充只读Excel 2010 xlsm“另存为文件名”框

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),严格用于数据input,当用户以只读方式打开工作簿,input数据,然后退出工作簿/模板,我想另存为对话框自动popup将Sheet1的A1的内容设置为在“另存为”框中自动填充的“build议的”文件名。

我想,如果我抓住BeforeSave函数,我可以声明这个path/文件名,但唉,这是行不通的。 自动填充框显示“Test.xlsm的副本”。 我甚至不认为它看到上面的代码。

我怎样才能完成自动填充这个盒子所需的名字。 谢谢。

————更新——————

重新编写代码到下面,但它仍然不会在保存时阻塞默认对话框。 也许我误解了Workbook_BeforeSave函数。 我想这是自动调用,只要文件得到保存。 我不希望用户保存名称为Test.xltm的文件(我将文件更改为模板,以查看是否有所作为),但为了标准化原因,build议用户将文件重命名为B1中的值。 代码不会自动调用。 例如,如果我通过从快速访问工具栏执行一个macros来调用它,但是却能够得到类似的代码,但是当用户select“closures”,“保存”或“另存为”时,似乎无法自动执行它。从“文件”下拉菜单中select。

 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 

该模板受密码保护,并以只读方式打开,所以SaveAs对话框应该在退出/保存/另存为时始终打开。 正确? 在这种情况下Workbook_BeforeSave不应该总是被调用吗?

例:

 Sub saveDialogTest() Dim saveDialog As FileDialog Set saveDialog = Application.FileDialog(msoFileDialogSaveAs) With saveDialog .InitialFileName = "Foo.xlsx" .Show End With End Sub 

如果你这样使用FileDialog ,它将允许你改变build议的文件名。