如何在保存工作簿之前捕获目标路径?

时间:2016-08-23 15:24:37

标签: excel vba excel-vba

我有一本工作簿" C:/abc.xlsm"。

然后我尝试将其保存为" C:/mno/xyz.xlsm"。

我想捕获保存操作(我可以使用Workbook_BeforeSave来执行此操作),然后我需要查看所需的目标路径。

例如,我希望能够做到这样:

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
    Dim destinationPath As String
    destinationPath = CaptureDestionationPath
    If InStr(1, destinationPath, "C:") Then
        Dim msgboxAnswer As Integer
        msgboxAnswer = MsgBox("It seems you are trying to save the file on your local drive. Is that intended", vbYesNo + vbQuestion, "")
        If msgboxAnswer = vbNo Then
            Cancel = True
        End If
    End If
End Sub

至于我的尝试:浏览Workbook对象属性并进行网络搜索。

1 个答案:

答案 0 :(得分:0)

示例:Before-Save被取消,并显示另存为对话框。此对话框返回保存为路径,然后您可以对其进行验证。最后,事件已停用,因此Me.SaveAs fileSaveName方法不会再次引发Before-Save事件。

注意:您应该添加变量SaveAsUI的if-check,以区分“另存为”和“简单保存”。

Option Explicit

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
    Cancel = True

    Dim fileSaveName
    fileSaveName = Application.GetSaveAsFilename
    If fileSaveName = False Then
        Exit Sub
    End If

    If InStr(1, fileSaveName, "C:") Then
        Dim msgboxAnswer As Integer
        msgboxAnswer = MsgBox("It seems you are trying to save the file on your local drive. Is that intended", vbYesNo + vbQuestion, "")
        If msgboxAnswer = vbNo Then
            Exit Sub
        End If
    End If

    Application.EnableEvents = False
    Me.SaveAs fileSaveName
    Application.EnableEvents = True
End Sub