• ベストアンサー

マクロです。教えてください。

シートC5にある名前で保存する。 Windows("シート名.xlsm").Activate Application.Dialogs(xlDialogSaveAs).Show Arg1:=Range("C5").Value を実行すると正しく保存されますが、すぐ「名前を付けて保存」がもう一度開かれます。 どうしてでしょうか? 二度目はキャンセルを押して終了しますが、どうやったら二度目を表示させなくできますか? お教えください。

質問者が選んだベストアンサー

  • ベストアンサー
  • KURUMITO
  • ベストアンサー率42% (1835/4283)
回答No.1

次のコードを追加してはいかがでしょう。 ActiveWorkbook.Close SaveChanges:=True

jul7_30
質問者

お礼

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

jul7_30
質問者

補足

早速の回答ありがとうございます。 Windows("シート名.xlsm").Activate Application.Dialogs(xlDialogSaveAs).Show Arg1:=Range("C5").Value ActiveWorkbook.Close SaveChanges:=True に変えて実行したのですが二度開かれます。

すると、全ての回答が全文表示されます。

その他の回答 (3)

  • hallo-2007
  • ベストアンサー率41% (888/2115)
回答No.4

すでに回答がありますように ほかのタイミングで名前を付けて保存が実行されていませんかね? ちなみに Msgbox "1のタイミング" Windows("シート名.xlsm").Activate Application.Dialogs(xlDialogSaveAs).Show Arg1:=Range("C5").Value Msgbox "1のタイミング" とか、メッセージをいくつか表示させて問題部分を探し出す方法もありかと 思います。

jul7_30
質問者

お礼

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

すると、全ての回答が全文表示されます。
回答No.3

こちらで試しましたが1回しかダイアログは開きませんでしたよ。 他の場所で何かおかしいのでは。 ちなみに、名前をつけて保存ならActiveWorkbook.SaveAsのほうがいいんじゃないでしょうか。 わざわざダイアログウィンドウを出す必然性があるなら仕方ないですが。

jul7_30
質問者

お礼

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

すると、全ての回答が全文表示されます。
  • tsubuyuki
  • ベストアンサー率45% (699/1545)
回答No.2

とりあえず、原因から考えてみます。 正直な話、この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回目のダイアログ」の発生根拠が乏しいですから。 まぁ、何にせよ。 もっと具体的な回答をお望みであれば、出来る限り詳しい「状況」を補足くださいませ。 (私は見れないかもしれませんが。)

jul7_30
質問者

お礼

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

すると、全ての回答が全文表示されます。

関連するQ&A