自动填充只读Excel 2010 xlsm SaveAs文件名框

时间:2015-05-08 22:32:38

标签: excel vba excel-vba

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吗?

1 个答案:

答案 0 :(得分:0)

示例:

Sub saveDialogTest()
    Dim saveDialog As FileDialog

    Set saveDialog = Application.FileDialog(msoFileDialogSaveAs)

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

如果您使用此类FileDialog,则可以更改建议的文件名。