Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


4847 / 13644 ツリー ←次へ | 前へ→

【54077】実行時エラー1004について ひろ 08/2/23(土) 17:49 質問[未読]
【54079】Re:実行時エラー1004について りん 08/2/23(土) 18:11 回答[未読]
【54083】Re:実行時エラー1004について ひろ 08/2/23(土) 21:44 質問[未読]
【54084】Re:実行時エラー1004について りん 08/2/23(土) 22:00 回答[未読]
【54096】Re:実行時エラー1004について ひろ 08/2/24(日) 13:08 お礼[未読]

【54077】実行時エラー1004について
質問  ひろ  - 08/2/23(土) 17:49 -

引用なし
パスワード
   VBA初心者です。
勤務表ファイルの翌月分を新規作成するために下記のように理解不足なりに作ってみました。
ファイル名を「部署名(K5)+年月」とし、既存ファイルと同じフォルダに保存されるようにしています。
InputBoxの[OK]をクリックすると問題なく同じフォルダに既定のファイル名で保存されますが、[キャンセル]の場合、「実行時エラー1004 SaveAsメソッドは失敗しました。Workbookオブジェクト」とエラーが発生します。
希望として、[キャンセル]をクリックすると、直前の操作をキャンセル(InputBoxが消えるように)したいと考えています。
ご教授よろしくお願い致します。

Sub clear()
  Dim fn
fn = InputBox("翌月分ファイル名は既定の場所に保存されます。", "翌月分の新規作成・保存", Worksheets("勤務表").Range("K5") & Format(DateAdd("m", 1, Date), "yyyymm"))
If fn <> "true" Then
ThisWorkbook.SaveAs Filename:=ThisWorkbook.Path & "\" & fn & ".xls"
End If
End Sub

【54079】Re:実行時エラー1004について
回答  りん E-MAIL  - 08/2/23(土) 18:11 -

引用なし
パスワード
   ひろ さん、こんばんわ。

>希望として、[キャンセル]をクリックすると、直前の操作をキャンセル(InputBoxが消えるように)したいと考えています。

VB(A)のヘルプより引用します。
============================
InputBox 関数はテキスト ボックスの内容を返します。[キャンセル] ボタンをクリックすると、InputBox 関数は長さ 0 の文字列 ("") を返します。
============================

なので、

>Sub clear()
>  Dim fn
>fn = InputBox("翌月分ファイル名は既定の場所に保存されます。", "翌月分の新規作成・保存", Worksheets("勤務表").Range("K5") & Format(DateAdd("m", 1, Date), "yyyymm"))
 '戻り値が""でない場合は保存する
 If fn <> "" Then

>ThisWorkbook.SaveAs Filename:=ThisWorkbook.Path & "\" & fn & ".xls"
>End If
>End Sub

こんな感じです。
なお、(Application.)InputBoxメソッドの場合は、Falseを返します。
(参考)
htt p://www.vbalab.net/vbaqa/c-board.cgi?cmd=ntr;tree=53199;id=excel

【54083】Re:実行時エラー1004について
質問  ひろ  - 08/2/23(土) 21:44 -

引用なし
パスワード
   りんさん、早速のお返事ありがとうございます。
早速試してみると、希望どおりinputboxが閉じました。

ところが、もう一つ問題が発生してしまいました。
保存先にすでに同一名称のファイルがある場合、置き換えるか尋ねられます。
ここで、[いいえ]または[キャンセル]をクリックすると、"実行時エラー1004"が
再発してしまいます。どのように対処すればいいのでしょうか?
たびたびご迷惑をおかけしますが、ご検討いただければ幸いです。

【54084】Re:実行時エラー1004について
回答  りん E-MAIL  - 08/2/23(土) 22:00 -

引用なし
パスワード
   ひろ さん、こんばんわ。

>保存先にすでに同一名称のファイルがある場合、置き換えるか尋ねられます。
>ここで、[いいえ]または[キャンセル]をクリックすると、"実行時エラー1004"が
>再発してしまいます。どのように対処すればいいのでしょうか?

Dir関数で既存ファイルかどうかをチェックして分岐してみました。

Sub TEST()
  Dim fn、Ofile As String
  fn = InputBox("翌月分ファイル名は既定の場所に保存されます。", "翌月分の新規作成・保存", Worksheets("勤務表").Range("K5") & Format(DateAdd("m", 1, vvvDate), "yyyymm"))
  '戻り値が""でない場合は保存する
  If fn = "" Then
   MsgBox "キャンセル", vbExclamation, "ファイル指定"
  Else
   'ファイル名
   Ofile = ThisWorkbook.Path & "\" & fn & ".xls"
   '
   If Dir(Ofile) = "" Then
     '名前をつけて保存
     ThisWorkbook.SaveAs Filename:=Ofile
   Else
     If MsgBox(Ofile, vbOKCancel + vbExclamation, "上書きしますか?") = vbOK Then
      'アラート出さない
      Application.DisplayAlerts = False
      '名前をつけて保存
      ThisWorkbook.SaveAs Filename:=Ofile
      '戻す
      Application.DisplayAlerts = True
     Else
      MsgBox "キャンセル", vbExclamation, "上書き"
     End If
   End If
  End If
End Sub

こんな感じです。

【54096】Re:実行時エラー1004について
お礼  ひろ  - 08/2/24(日) 13:08 -

引用なし
パスワード
   りんさん、早いお返事ありがとうございます。
試してみましたが、うまくいきました。

しいて言えば、ファイル名の年月に不具合あったので、
4行目の"vvvDate"の"vvv"は除かせていただきました。
明日から仕事で使ってみようと思います。

もっと使いこなせるように勉強しようと思います。
感謝しています。どうもありがとうございました。

4847 / 13644 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free