- ベストアンサー
CommonDialogの、細かい使い方。
コモンダイアログで、「ShowSave」を、やり、 保存画面を開いて、セーブさせようと思うのですが、 なぜか、保存押しても、キャンセル押しても、保存してしまいます。 学校で、MSDNをみたときには、 CommonDialog.CancelError = True On Error GoTo ErrHandler ~中身・・保存の、コーディング~ ErrHandler: End sub こういう風にやると、キャンセル押したときに、 下の、ErrHandler: この部分に、飛んで、終わるはずなんですが、うまくいきません。 誰か、 CommonDialog.ShowSave で、開いたときのちゃんとした、保存方法おしえてください。お願いします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
命令の場所の問題だと思います。 結論から書きます。 CMD.CancelError = True を、 CMD.ShowSave より前に書いてください。 説明: まず、補足にの内容では、CMD オブジェクトのCancelErrorプロパティが、ShowSave の後に設定 されているので、Show時点では無効になっています。 先に CancelError プロパティを設定してから ShowSave メソッドを実行すると、メソッド実行時点で プロパティが有効になります。 後、余計なことかもしれませんが、On Error GoTo ErrHandler も、ShowSave メソッドよりも先に記述 してください。じゃないと、エラーが起きても、エラー ハンドルにジャンプしません。多分エラーメッセージが 出ちゃうと思います。 これも、先に説明しているように、「エラーが起きたら ここに飛んでね」という命令がエラーが起こる個所( ここでは ShowSave)よりも後に設定していることに なってしまっているからです。先に設定してください。 それからもう一つ(おせっかいでごめんなさい。これで最後です)。 エラーハンドル(ここでは ErrHandler:)の前に、 Exit Sub してください。 じゃないと、エラーが起こってない場合も、エラーハンド ルに記述した部分を実行してしまいます。 質問と関係の無いところまで書いてしまってすみません。 これで回答になっていればいいのですが。 不明な点は補足してください。
その他の回答 (1)
- chirorin200x
- ベストアンサー率57% (8/14)
CancelError=True ← にしておけば、キャンセルボタンでエラーが起きるはずです。 コード全体を見ないとなんともいえませんが、例えば他にもエラートラップを使っていたりしませんか?一番良い方法は、ブレークポイントを指定して1行ずつ解析していくのが良いと思います。勉強にもなるし。 出来れば、使用しているコードを見せていただきたいのですが?それが、一番早いと思います。
補足
早速のレスありがとうございます。 とりあえず、CancelError=True は、やってあるんです。 それで、エラーも出るんですが、その後が、よくわかりません。 はじめたばっかで、すごく見にくいでしょうけど、乗せておきます。 最初から、やり方間違ってる可能性も・・・・。 ↓これは、ほんとに、保存用のボタンの部分だけです。 Private Sub hozonn_Click() CMD.ShowSave 'CMDは、COMMONDIALOG save2 = CMD.FileName 'SAVE2は、string CMD.CancelError = True On Error GoTo ErrHandler If Right(save2, 4) = ".csv" Then Open save2 For Output As #1 For i = 0 To 14 Write #1, lbl(i).BackColor Next i Close #1 Else save2 = save2 & ".csv" Open save2 For Output As #1 For i = 0 To 14 Write #1, lbl(i).BackColor Next i Close #1 End If ErrHandler: '問題の場所。 Exit Sub End Sub
お礼
これを見て、早速やってみたら、うまくいきました。ありがとうございます。 おせっかいとか、余計とか、かかれてますが、逆にとっても助かりました。それがなかったら、またさまよってました。 これで,やっと完成させられます。ほんとにありがとうございました。