自动填充只读 Excel 2010 xlsm SaveAs 文件名框
Posted
技术标签:
【中文标题】自动填充只读 Excel 2010 xlsm SaveAs 文件名框【英文标题】:Autofill Read only Excel 2010 xlsm SaveAs file name box 【发布时间】:2015-05-08 22:32:37 【问题描述】: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",它严格用于数据输入。当用户以只读方式打开工作簿,输入数据,然后退出工作簿/模板时,我想要另存为对话框自动弹出,将 Sheet1 的 A1 的内容作为“建议”文件名,该文件名会自动填充到“另存为”框中。
我想如果我抓住了 BeforeSave 函数,我可以声明这个路径/文件名,但是唉,它不起作用。自动填充框显示“Test.xlsm 的副本”。我什至认为它没有看到上面的代码。
如何使用所需名称自动填充此框。谢谢。
------------更新-------
将代码重写到下面,但它仍然没有在保存时抓住默认对话框。也许我误解了 Workbook_BeforeSave 功能。我认为只要保存文件就会自动调用它。我从不希望用户使用名称 Test.xltm 保存文件(我将文件更改为模板以查看是否有所不同),但出于标准化原因建议用户将文件重命名为 B1 中的值。代码不会被自动调用。例如,如果我通过从快速访问工具栏中执行宏来调用它,我就可以让类似的代码工作,但似乎无法让它在用户选择“关闭”、“保存”或“另存为”时自动执行从“文件”下拉菜单中。
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 吗?
【问题讨论】:
【参考方案1】:例子:
Sub saveDialogTest()
Dim saveDialog As FileDialog
Set saveDialog = Application.FileDialog(msoFileDialogSaveAs)
With saveDialog
.InitialFileName = "Foo.xlsx"
.Show
End With
End Sub
如果您像这样使用FileDialog
,它将允许您更改建议的文件名。
【讨论】:
修改后的代码(见上文编辑更改和进一步解释),但仍然无法按我想要的方式工作。以上是关于自动填充只读 Excel 2010 xlsm SaveAs 文件名框的主要内容,如果未能解决你的问题,请参考以下文章
excel2010每次写好VBA运行完成之后,保存为xlsm格式。关闭后就打不开了,也不能创建副本?