プロが教えるわが家の防犯対策術!

シートC5にある名前で保存する。
Windows("シート名.xlsm").Activate
Application.Dialogs(xlDialogSaveAs).Show Arg1:=Range("C5").Value

を実行すると正しく保存されますが、すぐ「名前を付けて保存」がもう一度開かれます。
どうしてでしょうか?
二度目はキャンセルを押して終了しますが、どうやったら二度目を表示させなくできますか?

お教えください。

A 回答 (4件)

次のコードを追加してはいかがでしょう。



ActiveWorkbook.Close SaveChanges:=True

この回答への補足

早速の回答ありがとうございます。
Windows("シート名.xlsm").Activate
Application.Dialogs(xlDialogSaveAs).Show Arg1:=Range("C5").Value

ActiveWorkbook.Close SaveChanges:=True

に変えて実行したのですが二度開かれます。

補足日時:2013/07/12 07:54
    • good
    • 0
この回答へのお礼

突然の出張が入りさきほど帰ってまいりました。
お礼が遅くなり申し訳ありませんでした。
なぜか、 Arg1:=Range("C5").Valueの部分を削除しましたら問題が解決しました。
ありがとうございました。

お礼日時:2013/07/14 08:04

とりあえず、原因から考えてみます。



正直な話、この2行だけを見せられても
「これだけだったら、ダイアログは1回しか出て来ないはずですよ。」
としか言えません。


まず思いつくのが、
プロシージャ内の処理は「これ(ご提示の2行)だけではないんじゃないか?」
という疑問です。
保存した後に「何かを更新するようなコード」があるのであれば、
当然ながら、上書き保存を確認するダイアログが出てきます。

プロシージャの末尾に
    ActiveWorkbook.Saved = True
の1行を追加し、「ブックが保存された状態」にしてやり、
それでもなおダイアログが出てくるのであれば、コード自体の見直しをオススメします。

ただし、これだと「名前を付けて保存」とは別物ですから、
おそらくこれは現象に合致しないでしょう。



例えばステップインモード(VBEでF8キー)などを利用して、
「どのタイミングで2回目のダイアログが表示されるか」判断してみてましょう。

個人的に気になるのは
> 実行すると正しく保存されますが、すぐ「名前を付けて保存」がもう一度開かれます。
の記述です。
ここから連想できるのは、
「実はこの2行の前に何らかの形で保存してあって(これで「正しく保存」)
 この2行のコードが“2回目のダイアログ”なんじゃないか?」
と言うことです。
つまりコードが

Sub Sample()
  (処理)
  (保存)

  Windows("シート名.xlsm").Activate
  Application.Dialogs(xlDialogSaveAs).Show Arg1:=Range("C5").Value
End Sub

と言う状態である可能性ですね。
こうじゃないと「2回目のダイアログ」の発生根拠が乏しいですから。


まぁ、何にせよ。
もっと具体的な回答をお望みであれば、出来る限り詳しい「状況」を補足くださいませ。
(私は見れないかもしれませんが。)
    • good
    • 0
この回答へのお礼

突然の出張が入りさきほど帰ってまいりました。
お礼が遅くなり申し訳ありませんでした。
なぜか、 Arg1:=Range("C5").Valueの部分を削除しましたら問題が解決しました。
ありがとうございました。

お礼日時:2013/07/14 08:03

こちらで試しましたが1回しかダイアログは開きませんでしたよ。


他の場所で何かおかしいのでは。

ちなみに、名前をつけて保存ならActiveWorkbook.SaveAsのほうがいいんじゃないでしょうか。
わざわざダイアログウィンドウを出す必然性があるなら仕方ないですが。
    • good
    • 0
この回答へのお礼

突然の出張が入りさきほど帰ってまいりました。
お礼が遅くなり申し訳ありませんでした。
なぜか、 Arg1:=Range("C5").Valueの部分を削除しましたら問題が解決しました。
ありがとうございました。

お礼日時:2013/07/14 08:03

すでに回答がありますように


ほかのタイミングで名前を付けて保存が実行されていませんかね?
ちなみに
Msgbox "1のタイミング"
Windows("シート名.xlsm").Activate
Application.Dialogs(xlDialogSaveAs).Show Arg1:=Range("C5").Value
Msgbox "1のタイミング"


とか、メッセージをいくつか表示させて問題部分を探し出す方法もありかと
思います。
    • good
    • 0
この回答へのお礼

突然の出張が入りさきほど帰ってまいりました。
お礼が遅くなり申し訳ありませんでした。
なぜか、 Arg1:=Range("C5").Valueの部分を削除しましたら問題が解決しました。
ありがとうございました。

お礼日時:2013/07/14 08:02

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!