自动填充只读 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格式。关闭后就打不开了,也不能创建副本?

VBA Excel 2010 - 自动填充不填充

Excel 2010的,宏有密码,怎么破解

错误 1004:范围类的自动填充方法失败 vba excel 2010

如何将 Excel 中的默认保存更改为 .xlsm 类型

我的excel一打开,就会是空的,快捷方式上有个感叹号,格式是xlsm?