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

Vba 自动填充只读Excel 2010 xlsm另存为文件名框,vba,excel,Vba,Excel,我有一个受密码保护的工作簿(Test.xlsm),严格用于数据输入。当用户以只读方式打开工作簿,输入数据,然后退出工作簿/模板时,我希望自动弹出的“另存为”对话框将Sheet1中A1的内容设为“建议”“在“另存为”框中自动填充的文件名 我想如果我挂起BeforeSave函数,我可以声明这个路径/文件名,但可惜它不起作用。自动填充框显示“Test.xlsm的副本”。我甚至认为它没有看到上面的代码 如何用所需名称自动填充此框。谢谢 ------------更新------------------ 将

我有一个受密码保护的工作簿(Test.xlsm),严格用于数据输入。当用户以只读方式打开工作簿,输入数据,然后退出工作簿/模板时,我希望自动弹出的“另存为”对话框将Sheet1中A1的内容设为“建议”“在“另存为”框中自动填充的文件名

我想如果我挂起BeforeSave函数,我可以声明这个路径/文件名,但可惜它不起作用。自动填充框显示“Test.xlsm的副本”。我甚至认为它没有看到上面的代码

如何用所需名称自动填充此框。谢谢

------------更新------------------

将代码重写到下面,但它仍然没有在保存时阻塞默认对话框。可能我误解了工作簿_BeforeSave函数。我认为它会在文件保存时自动调用。我从不希望用户以Test.xltm的名称保存文件(我将文件更改为模板,以查看这是否会产生影响)但出于标准化原因,建议用户将文件重命名为B1中的值。代码不会自动调用。例如,如果我通过从快速访问工具栏执行宏来调用它,我可以让类似的代码正常工作,但似乎无法让它在用户选择“关闭”、“保存”或“删除”时自动执行“文件”下拉菜单中的“另存为”

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
模板受密码保护,并由用户以只读方式打开,因此“另存为”对话框应在退出/另存/另存为时始终打开。是否正确?在这种情况下,不应调用“保存前”工作簿吗?

示例:

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
如果您像这样使用
文件对话框
,它将允许您更改建议的文件名。

修改的代码(有关编辑更改和进一步解释,请参见上文),但仍然无法使其按我希望的方式工作。
Sub saveDialogTest()
    Dim saveDialog As FileDialog

    Set saveDialog = Application.FileDialog(msoFileDialogSaveAs)

    With saveDialog
        .InitialFileName = "Foo.xlsx"
        .Show
    End With
End Sub