• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:メッセージボックス vbYesNoCancel)

EXCEL VBA初心者によるメッセージボックスの使用について

このQ&Aのポイント
  • EXCEL VBA初心者がメッセージボックス vbYesNoCancelの使い方について質問しています。具体的には、はいの場合は通常使うプリンタで印刷し、いいえの場合はファイル名を指定して保存したいとしています。また、キャンセルの場合はマクロの実行をキャンセルするだけです。
  • 質問者はWindows XPとEXCEL 2003を使用しており、具体的なコードを提示しました。しかし、ファイルを保存する場合の処理についてはわからないとしています。
  • 質問の結論として、質問者はEXCEL VBA初心者であり、メッセージボックス vbYesNoCancelの使い方について困っていることが分かります。具体的な処理を知りたいとしています。

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

  • ベストアンサー
  • keithin
  • ベストアンサー率66% (5278/7941)
回答No.5

先の補足しておいたのはこういうことです。 ついでにワタシに質問されたワケじゃありませんが。 sub macro1()  dim s as string  select case msgbox("message", vbyesnocancel)  case vbyes   worksheets("Agreement(1)").printout  case vbno   worksheets("Agreement(1)").copy ’追加箇所   s = application.getsaveasfilename(activesheet.name) ’変更箇所   if s <>false then    activeworkbook.saveas filename:=s   end if  end select end sub

malixiang
質問者

お礼

ありがとうございます!! 私の思うとおりにできました!!

その他の回答 (5)

回答No.6

まず訂正です。スミマセン。 コピー元のシートは Sheets("Agreement(1)") ですね。 Case vbYes の箇所と同じシートに対して .Copy を実行する事で、新たなブックにシートがコピーされます。 それと。 すみません、keithinさんの回答も絡む内容です。気を悪くされないでくださいm(_ _)m GetSaveAsFilename の戻り値は Variant なので(Help参照)、戻り値を入れる変数は Varinat型 で定義して下さい。String型でも正常に動いちゃうのですが(^^; 厳密にしておいた方が良いと思います。 それと、ActiveSheet,ActiveWorkbook,Select,Selection 等は極力使わない方が良いです。 なぜかと言うと、VBA(マクロ)が動いている際中に、使用者が意図しない操作をした場合「現在アクティブになっている(選択されている)シート・ブック」が変更されてしまう可能性があるからです。 そのため、私のソースでは .Copy をした直後に ActiveWorkbook のオブジェクトを取得し、出来るだけ間隔を置かないようにしています。また、いきなり Sheet("Agreement(1)") と書くと、これも ActiveWorkbook.Sheet~ を意味しています。自分のブック内のシートなら ThisWorkbook.Sheet~ と明示した方が良いでしょう。  Sheets("Agreement(1)").Select  ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True 上記を明示的に表すと  ThisWorkbook.Worksheets("Agreement(1)").PrintOut Copies:=1, Collate:=True となります。こうしておけば、Select~PrintOutまでの間に使用者が何かしてしまうような心配はありません。まぁ、ほんの一瞬の事ですが(^^; ExcelVBAは自由度もあって簡単に作れる分、しっかりと作らないと他の人が使ったとき等、思わぬエラー,事象が発生します。 頑張って下さいね。 長々と失礼しました。(余計な事でしたら申し訳ありません)

malixiang
質問者

お礼

回答ありがとうございます。 私には、かなりハイレベルです。 がんばってみます。

回答No.4

ごめんなさい。 > Sheet1.Copy  ThisWorkbook.Worksheets("AAA").Copy に変更して下さい。

回答No.3

補足を読みました(^^) 1) 出力先フォルダを指定(FileDialog) 2) シート"AAA"を「新たなブック」にコピー 3) コピーして作成された「新たなブック」を、ファイル名"AAA"で保存 って事で良いでしょうか? そうなると....VBA初心者ではチョット難しいですよ(^^; 作成例をあげておきます。トライしてみて下さい。 Dim varPATH As Variant Dim wb As Workbook <省略>   Case vbNo     '保存先指定     varPATH = Application.GetSaveAsFilename("AAA.xls", "Excelファイル,*.xls")     If varPATH = False Then       MsgBox "キャンセルします"     Else       Application.ScreenUpdating = False       '画面表示を抑止       Sheet1.Copy                   '新たなブックにコピー       Set wb = ActiveWorkbook             'コピーで作られたブックを取得       wb.Close SaveChanges:=True, Filename:=varPATH  '指定されたファイル名で保存して閉じる       Application.ScreenUpdating = True        '画面抑止の解除     End If

  • keithin
  • ベストアンサー率66% (5278/7941)
回答No.2

作成例: sub macro1()  dim s as string  select case msgbox("message", vbyesnocancel)  case vbyes   worksheets("Agreement(1)").printout  case vbno   s = application.getsaveasfilename()   if s <>false then    activeworkbook.saveas filename:=s   else   'do nothing   end if  case else  'do nothing  end select end sub #補足 ’do nothingのルートは,実際のマクロでは分岐ルートを起こす必要もありません #補足 「名前を付けて保存」ルートでは,そこから更にキャンセルするの選択肢が発生します。 その際にどう処理を流すか(そこで止める・一つ前に処理を戻す・キャンセルさせないetc)は,また考えて工夫してみてください。

malixiang
質問者

お礼

回答ありがとうございます。 レベルが高すぎてさっぱりですが、がんばって考えます!!

回答No.1

> ファイル名を指定して保存 は、今使っているブックを保存する。と言う事で良いでしょうか? 「保存先は、使用する人が指定」と言う事なので、以下の様な動作が必要になります。 1) ファイルダイアログボックスを表示して、出力先フォルダを指定させる。 2) 1で指定されたフォルダ名に、ファイル名「AAA」を付加する。 3) 「ファイル名を付けて保存」する。   Dim objFD As FileDialog <省略>   Case vbNo     Set objFD = Application.FileDialog(msoFileDialogFolderPicker)     If objFD.Show Then       ThisWorkbook.SaveAs Filename:=objFD.SelectedItems(1) & "\AAA"     Else       MsgBox "キャンセルします"     End If こんな感じでしょうか。かなり簡略してますが。 FileDialogには表題(Title)を設定したり出来ますので、詳しくはヘルプを参照してください。

malixiang
質問者

お礼

ありがとうございました。

malixiang
質問者

補足

回答ありがとうございます。 保存の手順を少し変えたいのですが・・・ 保存方法を シート(Seat AAA)をコピー ダイアログボックスを表示させたときに 名前を"AAA"を表示させたいです。 <中略> Case vbNo Worksheets("Agreement(1)").Copy Application.Dialogs(xlDialogSaveWorkbook).Show Case Else Exit Sub ダイアログボックスにあらかじめファイル名を表示させたいです。 シート名をファイル名でも大丈夫です。