• ベストアンサー

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

シート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

  • excelマクロ、任意セルの値で名前を付けて任意のフォルダに保存

    マクロの初心者ですが、どうか教えてください。 テンプレートブックを名前を付けて保存するマクロで 苦戦しております。  ・ダイアログを必ず開く  ・その時の保存先はz:\あああ  ・ブック名はアクティブシートの任意のセルA1 --------------------------------------------- Application.Dialogs(xlDialogSaveAs).Show _ Arg1:=Range("A1").Value ここまではたどり着けたのですが、ダイアログが 当初のテンプレートブックの保存場所が開いてしまいます。 どうぞよろしくお願いいたします。

  • VBAの組み込みダイアログの引数Argについて

    エクセルVBAでの質問です。 エクセルとして名前をつけて保存なら Sub aaa() Application.Dialogs(xlDialogSaveAs).Show ARG1:="ABC.xls", ARG2:=1 End Sub テキストファイルとして名前をつけて保存なら Sub bbb() Application.Dialogs(xlDialogSaveAs).Show ARG1:="ABC.txt", ARG2:=3 End Sub CSVファイルとして名前をつけて保存なら Sub ccc() Application.Dialogs(xlDialogSaveAs).Show ARG1:="ABC.csv", ARG2:=6 End Sub でうまくいきます。 今度は、ファイルを開こうとxlDialogOpenに変えました。 Sub aaa2() Application.Dialogs(xlDialogOpen).Show ARG1:="ABC.xls" ', ARG2:=1 End Sub Sub bbb2() Application.Dialogs(xlDialogOpen).Show ARG1:="ABC.txt", ARG2:=3 End Sub 以上二つはファイル名入りのダイアログは出ました。でもダイアログの画面にはフォルダーしか表示されません。 Sub ccc2() Application.Dialogs(xlDialogOpen).Show ARG1:="ABC.csv", ARG2:=6 End Sub これは実行時エラーになりました。 どうも、Application.Dialogs(xlDialogSaveAs)とApplication.Dialogs(xlDialogOpen)では引数ARG2が違うようです。 Application.Dialogs(xlDialogOpen)でのARG2は何の指定なのでしょうか?またその数値の意味はなんでしょうか?

  • エクセルVBA 組み込みダイアログのコンパイルエラーについて

    ファイル保存のための組み込みダイアログでデフォルトの名前を指定したい場合、 Application.Dialogs(xlDialogSaveAs).Show 'ARG1:="あたらしいファイル", ARG2:=1) でOKなのですが、 キャンセルボタンを押された場合の処理をするため Dim boCheck As Boolean boCheck = Application.Dialogs(xlDialogSaveAs).Show 'ARG1:="あたらしいファイル", ARG2:=1) If boCheck = False Then キャンセルの場合の処理 Else そうでない場合の処理 End if とするとコンパイルエラーになります。 どこが悪いのでしょうか?

  • Application.Dialogs(xlDialogSaveAs)でキャンセルの取得

    エクセル2000です。 Sheet1を複製し名前をつけて保存するマクロを書きました。 以下のとおりですが、キャンセルされた場合でも「保存しました」のメッセージが出てしまいます。 キャンセルされたことを取得するにはどう書けばいいでしょうか? Sub tesy01() Dim ns As Workbook Dim fn As String Sheets("Sheet1").Copy Set ns = ActiveWorkbook With ns.Sheets(1) .Cells.Copy .Cells.PasteSpecial Paste:=xlValues Application.CutCopyMode = False fn = .Range("A1") & Format(Date, "yymmdd") End With Application.Dialogs(xlDialogSaveAs).Show ARG1:=fn & ".xls", ARG2:=1 ns.Close (False) Set ns = Nothing MsgBox "保存しました。" ThisWorkbook.Activate Sheets("Sheet1").Activate End Sub

  • エクセルの保存で。

    xls形式で保存したあとに、csv形式で保存するVBAを作りました。 csv形式で保存するときは指定したディレクトリ「c」を 表示してくれるのですが、 xls形式のときは実行時のカレントを指定しまいます。 なぜでしょう??? Sub filehozon() Dim MyFileA 'As String MyFileA = "c:\test" 'xls形式保存 Application.Dialogs(xlDialogSaveAs).Show arg1:=MyFileA, arg2:=1 Sheets(2).Copy Application.DisplayAlerts = False 'csv形式保存 Application.Dialogs(xlDialogSaveAs).Show arg1:=MyFileA, arg2:=6 ActiveWindow.Close Application.DisplayAlerts = True End Sub

  • フォルダ作成と別名保存【VBA】

    教えてください 現在、下の2つのマクロを使っています。 「O27」の値でフォルダを作るものとブックを別名保存するものです。 これを1つにまとめたいのですが単純に1つにまとめるとフォルダは作成されるのですがブックの別名保存がセルの値を参照してくれません。 また、MkDir でフォルダを作成すると同じ名前のフォルダが先にあるとエラーになってしまいます。 この2点を解消できる方法はないでしょうか? よろしくお願いいたします。 Sub 別名フォルダ() MkDir Worksheets("オーダーシート").Range("O27").Value End Sub Sub 別名保存() Application.Dialogs(xlDialogSaveAs).Show Arg1:=Range("O27").Value End Sub

  • エクセルで「名前を付けて保存」を自動的に名前を付けて保存したい

    エクセルで「名前を付けて保存」をする時に自動的に名前を付けて保存が出来るように出来ないでしょうか。 エクセルで見積書を作成後に「名前を付けて保存」→「受注番号入力」をしているので、これを「名前を付けて保存」をクリックした時にファイル名を自動的に受注番号が入れば少しでも時間短縮が出来るかと思い、相談させていただきます。 自分なりに参考書などを読み、下記のようになると思ったのですが、出来ません。 Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) If SavaAsUI Then Application.EnableEvents = False Application.Dialogs(xlDialogSaveAs).Show _ Arg1:=Me.Path & Application.PathSeparator & Sheet(1).Range("A1").Value Application.EnableEvents = True Cancel = True End If End Sub シート1に見積書があり、シート2、シート3はありません。 「A1」のセルに受注番号が入っています。 これのどこがダメなのか教えてもらえませんか。 もし、他に方法があるのであれば教えていただけませんか。 ご無理申します。

  • VBA マクロを削除して保存したい

    お世話になります。 下記のコードでシートをコピーし、新規ブックに保存しています。 マクロを削除して保存するにはどのようにしたらよいでしょうか? コードはsheet5に記入しています。 ちなみにセルだけをコピペして、シートの設定もコピーできるコード もあるハズですよね? 書式、列の幅、行の高さ、ページ設定、をコピーしたいので、 どなたかご教授お願いします。 Private Sub 保存() Dim ns As Workbook Dim msg As String Sheets("sheet5").Copy Set ns = ActiveWorkbook msg = IIf(Application.Dialogs(xlDialogSaveAs).Show(ARG1:="" & ".xls", ARG2:=1), "保存", "キャンセル") ns.Close (False) Set ns = Nothing MsgBox msg & "しました。" End Sub

  • VBA 別名で保存する際のarg引数

    WINは7、Excelは2013を使用しています。 VBAで別名で保存する際、 Application.Dialogs(xlDialogSaveAs).Show arg1:=(shn & "_集計"), arg2:=1 とすると、ファイルの種類のところで、Excel 97-2003ブック が選ばれるのですが、 ここを Excel ブック を選ぶ様に設定したいと思っています。 しかし、arg2:= のところの入れる数字が分かりません。 申し訳ありませんが、ご教示下さい。 もし一覧が載っているサイトをご存知でしたら、教えて下さると大変ありがたいです。 よろしくお願い致します。

  • ファイル保存時のダイアログ表示フォルダを変更したい

    ファイル保存時にネットワーク上のフォルダを表示するダイアログを表示するには どのように記述すればよろしでしょうか。ご教授よろしくお願い致します。 以下、教えていただいたコードですが Const PathName = "\\●●\○○\" Call SetCurrentDirectory(PathName) Application.Dialogs(xlDialogSaveAs).Show このコードでファイルを開くダイアログを記述すると 設定したネットワーク上のフォルダを表示するのですが Application.Dialogs(xlDialogOpen).Show  ---OK ファイル保存のダイアログを記述すると では、デスクトップがダイアログに表示されます。 Application.Dialogs(xlDialogSaveAs).Show ---NG Application.Dialogs(xlDialogSaveAs).Show の場合(保存ダイアログ表示)は どのように記述すれば、ネットワーク上のフォルダを表示できますでしょうか。 よろしくお願い致します。

専門家に質問してみよう