コモンダイアログでの保存について


慎一  2007-09-19 05:54:24  No: 137547

下記コードでコモンダイアログでテキストボックスの内容をテキストファイルに名前をつけて保存したいのですが。。。。保存はできるのですが、ダイアログのキャンセルボタンを押しても保存されてしまいます。どこの部分が悪いのかご教授ください。その際、条件により.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


魔界の仮面弁士  2007-09-19 06:45:23  No: 137548

> CommonDialog1.Flags = 2      'ファイルの存在の為、上書きを確認
「2」のようなマジックナンバーではなく、
「cdlOFNOverwritePrompt」などの定数を使うべきかと。

> ダイアログのキャンセルボタンを押しても保存されてしまいます。
もしかして、CancelError が False になっていたりとか。

> 自動で拡張子が変わる様にはできないのでしょうか?
[OK] が押された後、得られた FileName の内容を見て、
別の拡張子で保存してしまえば済むかと。

とはいえ、「拡張子が省略されたら付与する」というのならば兎も角、
「どんな拡張子を指定されても、特定の拡張子に変更してしまう」のは、
一般的なアプリケーションの仕様からは外れてしまう気がします。
(それでは、cdlOFNOverwritePrompt の意味が薄れてしまいますし…)


慎一  2007-09-19 08:29:01  No: 137549

魔界さん早速のご教授ありがとうございました。
「cdlOFNOverwritePrompt」とCancelError が False は修正しました。
きちんとキャンセルできるようになりました。

拡張子に関しては、今回作ってる物が、Aの拡張子のファイルから必要な
物を抜き出し加工して、同じファイル名でBの拡張子にする為、間違って
上書きしてしまうと元ファイルが消えるので強制的に拡張子を変えて保存
したいのです。ダイアログを使うのは好きな所へ保存したいからですが、
もっと良い方法があるのでしょうか?


よいちゃん  2007-09-19 13:11:47  No: 137550


&#9829;


よいちゃん  2007-09-19 13:12:13  No: 137551

おはよう!
&#9829


魔界の仮面弁士  2007-09-20 18:40:35  No: 137552

> 拡張子に関しては、今回作ってる物が、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 の選択を検討するべきかと。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加