2016-04-19 14 views
1

まず第一に、これはsaveasfilenameダイアログボックスに関するものではありません。チェック「『ファイル名』プロンプトワット/ VBAへの変更を保存する?

するかどうかをチェックフラグが設定されていする方法がある」したいがあなたの変更を 'filename.xsls'に保存するには?ダイアログボックスがVBAサブの間に表示されますか?

基本的に私はいくつかのデータを別のファイルにコピーし、MsgBoxを表示してファイルを閉じ、Excelがファイルが保存されていることを確認するようにユーザーに求めます。しかし、私はそのファイルをロックする古いプログラムを持っているので、プロンプトが表示されず、ファイルが保存されたように見えますが、実際はそうではありません。 '修正'するには、Excelとプログラムのすべてのインスタンスを閉じてからやり直す必要があります。それは頻繁に起こることはありませんが、あなたが注意を払っていない、または経験の少ない人が、保存を促すかどうかを確認することを知らない場合は、それを逃すことができます。

私が知りたいのは、ある種のチェック/フラグ値、1/0、真偽などを持ってダイアログボックスが表示されることを確認する方法がある場合です。そうでない場合は、Excelと他のプログラムを再起動する必要があることをユーザーに警告します。基本的に私は決して起こらないエラーをキャッチしようとしているので、これは解決できないかもしれません。ファイルがロックされているため、時にはそれが表示されず、VBAサブがちょうどに続く

Excel save changes dialog

これは私が参照しています]ダイアログボックスです。

+0

サブ 'Application.DisplayAlerts = false'をを持っている場合、それはどのようなメッセージボックスを抑制します。 – BruceWayne

+0

私はその種のコードを持っていません。そのダイアログボックスは常に表示されますが、レガシープログラムがそのファイルをロックするまれなインスタンスを除いてはそうです。コードは単に "ExportDestFile.Close"です – purplefolder

+1

ファイルを閉じ、 'Workbook.Save'や' Workbook.SaveAs'を使わない理由はありますか?あるいは、少なくとも「Workbook.Close」に真実を渡していますか?例えば、 'Workbook.Close True'は変更を保存し、ブックを閉じます。 IMHO可能な限り明示的にすることが最善です。 – Soulfire

答えて

0

他の問題を解決する方が良いでしょうが、投稿していないのでわからないのです。あなたがbascallyこれを行うことができますhttps://support.microsoft.com/en-us/kb/213428

を::とにかく、あなたが望むすべてがここで説明されて

Sub Auto_Close() 
If ThisWorkbook.Saved = False Then 
    'ThisWorkbook.Save this would autosave 
    Application.GetSaveAsFilename 'this displays the save as dialog 
End If 
End Sub 
+0

最初投稿の文章は、 'GetSaveAsFilename'ボックスに関するものではないと言います。 – Soulfire

+0

これはどのように役立つか分かりますが、ファイルが保存されないため問題にはならないでしょう - ロックされたファイルをどのように処理するかはわかりませんが、後で試すことができます。私はあなたが思っているところを見ます。 – purplefolder

+0

@Soulfireここで重要な部分は、If ThisWorkbook.Savedは、(私が思う)OPが必要とするものです。 –

0

を、私は周りの仕事としてこれをやってしまったと私はそこだ疑いが、それは本当に私の質問に対する解決策はありませんウィンドウクラスのチェックや何かを通してそれをやり遂げる方法になった。チャイルドに時間をかけて脳力を提供してくださった皆様、ありがとうございました:)

サブランの前後にファイルサイズの変数を2つ宣言しました。ファイルサイズが等しい場合、msgboxが表示され、ファイルが正しく書き込まれていないか、または既存のファイルを上書きしている可能性があります。

Dim ExportFileByte As Long 
Dim ExportBytePostFile As Long 

ExportFileByte = FileLen(ExportSourcePath) 

'(サブはここで実行され、.xlsファイルにいくつかのデータのコピーをエクスポート)

ExportBytePostFile = FileLen(ExportSourcePath) 
If ExportFileByte = ExportBytePostFile Then MsgBox ("Error: File may have not have saved, or file is being overwritten without changes (OK)") 
関連する問題