Excel VBA質問箱 IV

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

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


9936 / 13646 ツリー ←次へ | 前へ→

【24651】SaveAsメソッドについて アントニオ馬場 05/5/1(日) 2:25 質問[未読]
【24655】Re:SaveAsメソッドについて ponpon 05/5/1(日) 10:08 回答[未読]
【24656】Re:SaveAsメソッドについて アントニオ馬場 05/5/1(日) 18:51 質問[未読]
【24658】Re:SaveAsメソッドについて つん 05/5/1(日) 19:35 回答[未読]
【24660】Re:SaveAsメソッドについて アントニオ馬場 05/5/1(日) 20:59 質問[未読]
【24661】Re:SaveAsメソッドについて ちゃっぴ 05/5/1(日) 21:18 回答[未読]
【24662】Re:SaveAsメソッドについて ちゃっぴ 05/5/1(日) 21:29 回答[未読]
【24671】Re:SaveAsメソッドについて 小僧 05/5/2(月) 14:15 回答[未読]
【24691】Re:SaveAsメソッドについて アントニオ馬場 05/5/3(火) 17:55 お礼[未読]
【24659】Re:SaveAsメソッドについて ponpon 05/5/1(日) 19:36 回答[未読]
【24657】Re:SaveAsメソッドについて MK本舗 05/5/1(日) 19:32 発言[未読]

【24651】SaveAsメソッドについて
質問  アントニオ馬場  - 05/5/1(日) 2:25 -

引用なし
パスワード
   初めて質問させていただきます。
SaveAsメソッドを使用して、既存のファイルに上書き保存するようにソースを書いているのですが、上書きの警告メッセージが表示されたときに『いいえ』または『キャンセル』を押すとエラーになってしまいます。エラーならずに警告メッセージの『いいえ』または『キャンセル』を押すにはどうしたらよいでしょうか?
お解りになる方がいらっしゃいましたらご教授願います。

【24655】Re:SaveAsメソッドについて
回答  ponpon  - 05/5/1(日) 10:08 -

引用なし
パスワード
   おはようございます。

もし 保存しているファイルを開いて、必ず上書き保存するなら 
 Saveメソッドを使ったらいかがでしょうか?

SaveAsメソッドを使うなら、
Errorトラップで回避する方法がよいでしょう。
On Error Resume Next
ThisWorkbook.SaveAs Filename:="ほげほげ"
On Error GoTo 0

または、
これだと上書きするかも聞いてきません。
Application.DisplayAlerts = False
ThisWorkbook.SaveAs Filename:="ほげほげ"
Application.DisplayAlerts = True

【24656】Re:SaveAsメソッドについて
質問  アントニオ馬場  - 05/5/1(日) 18:51 -

引用なし
パスワード
   ponponさんご回答ありがとうございます。
 
このマクロを使う人間に上書き保存をするかしないかを決めさせたいので、SaveメソッドやDisplayAlertsプロパティはできれば使いたくありません。

下記のほかにエラー処理の仕方はないでしょうか?
> On Error Resume Next
> ThisWorkbook.SaveAs Filename:="ほげほげ"
> On Error GoTo 0

【24657】Re:SaveAsメソッドについて
発言  MK本舗  - 05/5/1(日) 19:32 -

引用なし
パスワード
   横からすみません。

単なるブックを閉じる時の処理なら、

ThisWorkBook.Close

ではだめですか?

編集があったら上書きするか聞いてきます。
キャンセルしたら上書きされないでブック
が閉じます。

【24658】Re:SaveAsメソッドについて
回答  つん E-MAIL  - 05/5/1(日) 19:35 -

引用なし
パスワード
   こんばんは^^
横から失礼します。

>このマクロを使う人間に上書き保存をするかしないかを決めさせたいので、SaveメソッドやDisplayAlertsプロパティはできれば使いたくありません。

メッセージボックスであらかじめ聞いてあげればいかがですか?
それで、Yes ならSaveメソッドで上書き、NoならそのままExitあるいは、別の処理・・・というふうに分岐させてやればいいような思いますが・・・

【24659】Re:SaveAsメソッドについて
回答  ponpon  - 05/5/1(日) 19:36 -

引用なし
パスワード
   こんばんは。

On Error GoTo ER
ThisWorkbook.SaveAs Filename:="ほげほげ"

ER:
ThisWorkbook.Close False
これで、いかがでしょう

【24660】Re:SaveAsメソッドについて
質問  アントニオ馬場  - 05/5/1(日) 20:59 -

引用なし
パスワード
   すみません。私の説明が足りませんでした。

今開いているブックに上書き保存したいのではなくて、ブックを新規作成してその後に名前を付けて保存しています。

Workbooks.Add
ActiveWorkbook.SaveAs FileName:="アントニオ馬場5月1日.xls"

『アントニオ馬場』の部分は定形の名前で、その後にブックを作成した日付を付けてブックの名前にしています。

新規ブックを作成したとき、すでに同じ名前のブックがあった場合(同じ日に2回ブックを作成した場合)、上書きの警告が表示されます。

この時に『いいえ』または『キャンセル』を押してもエラーにならないようにしたいのです。

このエラー以外のエラーも各エラーごとに固有のメッセージを返したいと考えておりますので、できればOn Error Go Toは使いたくありません。

何かよいエラー処理の仕方はないでしょうか?
よろしくお願いいたします。

【24661】Re:SaveAsメソッドについて
回答  ちゃっぴ  - 05/5/1(日) 21:18 -

引用なし
パスワード
   > 新規ブックを作成したとき、すでに同じ名前のブックがあった場合
> (同じ日に2回ブックを作成した場合)、上書きの警告が表示されます。
> この時に『いいえ』または『キャンセル』を押してもエラーにならないように
> したいのです。

でしたら、同名Fileが存在するか否かを事前に確認してやればいいでしょう。
FileSystemObjectのFileExistsを使用する方法がお勧めです。

> このエラー以外のエラーも各エラーごとに固有のメッセージを返したいと
> 考えておりますので、できればOn Error Go Toは使いたくありません。

Error Codeで分岐すればいいだけの話では?
Debug.Print Err.Number

SaveAs Method(に限らずFile操作)では、
Errorが発生する理由はいろいろあります。

(たとえば、必要なAccess権がない、Mediaが読み取り専用、
必要な空き容量が足りない・・・etc)

同名Fileが存在するというのは、その一例に過ぎません。

もし、安易にError Trapを使用しないほうがよいと参考書等に
書いてあったからといって、それを鵜呑みにしているのであれば、
それはさっさと捨て去ることをお勧めします。

VBAで完全に(Processが)停止するErrorなんて少数なので、
Error Trapを積極的に利用したほうがいいと思います。

ただし、どういった原因でErrorになるのかは
調べておいてください。
(参考書等に書いてある安易に使うべきではないと言うことは
こういうことです。)

また、Debug時はCommentOutしておきましょう。

【24662】Re:SaveAsメソッドについて
回答  ちゃっぴ  - 05/5/1(日) 21:29 -

引用なし
パスワード
   追伸

以前にも書きましたが、On Error Goto Statement で Gotoを使うのがいやだ
という人も多いですが、私が思うに根本的な原因は Goto Statementに
あるわけではなく、1 Procedureで何度もGoto Statementを使うような
長いものを作ることが問題です。

1 Procedure 当り、1 Goto Statementでしたら、可読性は全く落ちません。
つまり、分割しろってことです。
ぶっちゃけ、Saveするだけの専用Classを用意してしまっても
いいわけで・・・

私は、よくVBSとか書きますが、Goto Statementがないと
Error処理はつらいですよ。
(まあ、いやなら死ぬほど苦労してください。
もちろん処理内容にもよりますが・・・)

そういったDemeritを承知の上で、どうしてもというのであれば
On Error Resume Next でもいいでしょう。

【24671】Re:SaveAsメソッドについて
回答  小僧  - 05/5/2(月) 14:15 -

引用なし
パスワード
   みなさんこんにちは。

ちゃっぴさんから頂いたヒントの「FileExists」を使った判定です。

Function 存在チェック(FLG As Boolean)
Dim SName As String
Dim FSO As Object
  SName = "アントニオ馬場" & Format(Now(), "m月d日") & ".xls"
  Set FSO = CreateObject("Scripting.FileSystemObject")

  FLG = True
  
  If FSO.FileExists(ActiveWorkbook.Path & "\" & SName) Then
    If MsgBox("本日2回目の処理です。上書きしますか?", vbOKCancel) = vbCancel Then
      FLG = False
    End If
  End If
  Set FSO = Nothing
End Function

メインのモジュールから
  Call 存在チェック(Chk) 'ChkはBoolean型

で呼び出して、戻り値:ChkがFalseなら
>Workbooks.Add

以下の処理を行わないのは如何でしょうか?

【24691】Re:SaveAsメソッドについて
お礼  アントニオ馬場  - 05/5/3(火) 17:55 -

引用なし
パスワード
   以下のコードを試してみたいと思います。

>Function 存在チェック(FLG As Boolean)
>Dim SName As String
>Dim FSO As Object
>  SName = "アントニオ馬場" & Format(Now(), "m月d日") & ".xls"
>  Set FSO = CreateObject("Scripting.FileSystemObject")
>
>  FLG = True
>  
>  If FSO.FileExists(ActiveWorkbook.Path & "\" & SName) Then
>    If MsgBox("本日2回目の処理です。上書きしますか?", vbOKCancel) = vbCancel Then
>      FLG = False
>    End If
>  End If
>  Set FSO = Nothing
>End Function
>
みなさん本当にありがとうございました。

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