2016-08-23 8 views
1

私はワークブック「C:/abc.xlsm」を持っています。ブックを保存する前に、コピー先のパスをキャプチャする方法はありますか?

次に、 "C:/mno/xyz.xlsm"という名前で保存しようとしています。

保存操作をトラップしたいのですが(Workbook_BeforeSaveを使用してその操作を行うことができます)、目的のコピー先のパスを確認する必要があります。例えば

私は次のようにSTHを行うことができるようにしたいと思います:Workbookオブジェクトのプロパティを経由してウェブ検索を行うこと:私が試したもののためとして

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 

+0

* Save *を実行したときのそのSaveAsUIパラメータの値は何ですか?あなたがSaveAs *をしたときの価値は何ですか? –

+0

@ Mat'sMug、SaveAsの場合はTrue、Saveの場合はFalse。 – zaptask

+0

デバッガでこの手順を実行すると、イベントが終了した後***になるまで、[名前を付けて保存]ダイアログが表示されないことがわかります。ファイルパスをキャプチャする必要がある場合は、自分で保存ダイアログを表示する必要があります。 – Comintern

答えて

0

例:Before-Saveがキャンセルされ、保存ダイアログが表示されます。このダイアログは、次に検証できるsave-asパスを返します。最後にイベントが無効になるので、Me.SaveAs fileSaveNameメソッドはBefore-Saveイベントを再度発生させません。

注:Save-AsとSimple 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 
+0

入れ子にされたキャンセルは何もしません。あなたが最初に行うことはキャンセルをTrueに設定するからです。そして、最終的なセーブは答えに関係なく実行されます。ではない?とにかく、はい、私は論理を取得します(実際には、コメントから質問への指示の後にコード化しましたが、私は物理的に受け入れることができるという答えを出しました)。 – zaptask

+0

はい、そうです、私は答えを編集しました、ありがとう:)。 – dee

関連する問題