下記コードでコモンダイアログでテキストボックスの内容をテキストファイルに名前をつけて保存したいのですが。。。。保存はできるのですが、ダイアログのキャンセルボタンを押しても保存されてしまいます。どこの部分が悪いのかご教授ください。その際、条件により.TXTと.UTTの拡張子で保存
したいのですが、自動で拡張子が変わる様にはできないのでしょうか?
AAA.Minのまま保存してもAAA.UTTで保存される様にしたいのです。
下記
Private Sub Command4_Click()
'★テキストボックスの内容をファイルへの書き出し
'エラーナンバー
Dim ErrNum
On Error Resume Next
CommonDialog1.Flags = 2 'ファイルの存在の為、上書きを確認
Select Case Opy
Case 2
CommonDialog1.Filter = "テキストファイル(*.txt)|*.txt" 'フィルターをかける
Case 4
CommonDialog1.Filter = "刃具情報ファイル(*.UTT)|*.UTT" 'フィルターをかける
End Select
CommonDialog1.ShowSave ' 保存ダイアログを表示
ErrNum = Err.Number
On Error GoTo 0
If ErrNum <> cdlCancel Then
MsgBox CommonDialog1.FileName & "を保存します"
Open CommonDialog1.FileName For Output As #1
Print #1, Min.Text4.Text
Close #1
End If
End Sub
> CommonDialog1.Flags = 2 'ファイルの存在の為、上書きを確認
「2」のようなマジックナンバーではなく、
「cdlOFNOverwritePrompt」などの定数を使うべきかと。
> ダイアログのキャンセルボタンを押しても保存されてしまいます。
もしかして、CancelError が False になっていたりとか。
> 自動で拡張子が変わる様にはできないのでしょうか?
[OK] が押された後、得られた FileName の内容を見て、
別の拡張子で保存してしまえば済むかと。
とはいえ、「拡張子が省略されたら付与する」というのならば兎も角、
「どんな拡張子を指定されても、特定の拡張子に変更してしまう」のは、
一般的なアプリケーションの仕様からは外れてしまう気がします。
(それでは、cdlOFNOverwritePrompt の意味が薄れてしまいますし…)
魔界さん早速のご教授ありがとうございました。
「cdlOFNOverwritePrompt」とCancelError が False は修正しました。
きちんとキャンセルできるようになりました。
拡張子に関しては、今回作ってる物が、Aの拡張子のファイルから必要な
物を抜き出し加工して、同じファイル名でBの拡張子にする為、間違って
上書きしてしまうと元ファイルが消えるので強制的に拡張子を変えて保存
したいのです。ダイアログを使うのは好きな所へ保存したいからですが、
もっと良い方法があるのでしょうか?
金
♥
おはよう!
♥
> 拡張子に関しては、今回作ってる物が、Aの拡張子のファイルから必要な
> 物を抜き出し加工して、同じファイル名でBの拡張子にする為、
別の拡張子のファイル名として得る方法は幾つかありますが、たとえば
'拡張子 txt の A ファイルを取得
strFileA = CommonDialog1.FileName
'拡張子 vb6 の Bファイル名を取得
With New FileSystemObject
strFileB = fso.BuildPath( _
fso.GetParentFolderName(strFileA), _
fso.GetBaseName(strFileA) & ".vb6")
End With
などで行えるかと思います。
あとは、保存前に B ファイルが既に存在していた場合に、
どのような動作にさせたいのかによって変わってくるかと。
> ダイアログを使うのは好きな所へ保存したいからですが、
ディレクトリの指定だけを行いたいのですか?
CommonDialog は「ファイル」を選択するものであって、
「ディレクトリ」を選択するものではありません。
ディレクトリの選択が必要なら、Shell オブジェクトの BrowseForFolder メソッドを
使うか、または SHBrowseForFolder API の選択を検討するべきかと。
ツイート | ![]() |