Excel VBA如何防止用户在msoFileDialogSaveAs中单击取消

时间:2018-07-17 11:20:43

标签: excel vba excel-vba if-statement filedialog

我是VBA的新手,我正在为老板创建模板。我想强迫用户“另存为”,以便他们不会覆盖模板。换句话说,当弹出“另存为”对话框时,我想禁用“取消”按钮。

这是我的代码:

Dim fPth As Object
Set fPth = Application.FileDialog(msoFileDialogSaveAs)

With fPth
    .InitialFileName = CTAPath
    .InitialFileName = CTAName & "_CAP DATA"
    .Title = "Save with your CTA file"
    .InitialView = msoFileDialogViewList
    .FilterIndex = 2
    If .Show = -1 Then
        .Execute

    End If
End With

我想在IF语句中创建一个ELSE语句,但我不知道应该是什么。我尝试搜索,但没有提出任何解决方案。

谢谢!

2 个答案:

答案 0 :(得分:2)

这不是这样做的方法:如果用户在“另存为”文件列表中选择文件本身,则可能会遇到相同的情况。
我建议您将文件设为只读,这样任何人都无法更改或覆盖它。

答案 1 :(得分:1)

我不确定您是否可以禁用Cancel按钮,但是有解决方法...

您可以循环.Show方法,直到用户按下Save按钮;)

例如:

Sub PreventCancel()

Dim fPth As Object
Set fPth = Application.FileDialog(msoFileDialogSaveAs)
Dim result As Variant

With fPth
    .InitialFileName = CTAPath
    .InitialFileName = CTAName & "_CAP DATA"
    .Title = "Save with your CTA file"
    .InitialView = msoFileDialogViewList
    .FilterIndex = 2
    Do
        result = .Show
    Loop While result <> True
   .Execute
End With

End Sub

[编辑]

我建议您使用Application.GetSaveAsFilename Method (Excel)而不是FileDialog,因为它可以使您更好地控制它。

请,也请阅读对您的问题的宝贵评论。