SaveFileDialogBoxで上層フォルダがリネームできるようにするには?

解決


hirobo-macros  2008-08-28 10:51:25  No: 101035  IP: 192.*.*.*

下記ファンクションを使用し、保存するのですが保存する場所にフォルダを作成しておきその中に保存させるよーにすると、実行されたフォームを閉じなければ作成されたフォルダをリネームしたり削除したりできません。

http://hp.vector.co.jp/authors/VA023539/tips/dialog/004.htm
このHPを参考にしているのですが、なにが足りないのかわかりません。

'↓処理部(Form1.Command1)
Private Sub Command1_Click()
Text1.Text = Module1.SaveFileDialogBox(Me.hWnd, "c:\", "*.*", "*.*")
End Sub

'↓モジュール部(Module1)
'<SaveFileDialogBox
Private Declare Function GetSaveFileName Lib "comdlg32.dll" _
    Alias "GetSaveFileNameA" (pOpenfilename As OPENFILENAME) As Long
Private Type OPENFILENAME
    lStructSize       As Long    '構造体のサイズ
    hwndOwner         As Long    '親ウィンドウのハンドル
    hInstance         As Long    'モジュールのインスタンスハンドル
    lpstrFilter       As String  'VBのファイルパターン
    lpstrCustomFilter As String  'カスタムフィルタ
    nMaxCustFilter    As Long    '同バイト数
    nFilterIndex      As Long    'フィルタのインデックス
    lpstrFile         As String  'フルパス名を受取るバッファ
    nMaxFile          As Long    '同バイト数
    lpstrFileTitle    As String  'ファイル名を受取るバッファ
    nMaxFileTitle     As Long    '同バイト数
    lpstrInitialDir   As String  '初期ディレクトリ名
    lpstrTitle        As String  'ダイアログボックスのキャプションタイトル
    flags             As Long    '動作を指定する定数の組合せ
    nFileOffset       As Integer 'フルパス中のファイル名までのオフセット
    nFileExtension    As Integer '同  拡張子までのオフセット
    lpstrdefext       As String  'デフォルトの拡張子
    lCustData         As Long    'フックプロシージャに渡すデータ
    lpfnHook          As Long    'フックプロシージャOFNHookprocへのポインタ
    lpTemplateName    As String  'テンプレートリソース名
End Type
Private Const OFN_HIDEREADONLY = &H4
Private Const OFN_OVERWRITEPROMPT = &H2
Private Const OFN_FILEMUSTEXIST = &H1000
Private Const OFN_PATHMUSTEXIST = &H800
Private Const OFN_EXPLORER = &H80000
Private strFileName   As String


Public Function SaveFileDialogBox(Ohwnd As Long, defaultDirectryPath As String, FilterName As String, Filter As String, Optional Title As String, Optional FileName As String, Optional SelectDir As String) As String '<2008_08_28
'\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
'名前を付けて保存ダイアログボックスを表示します。エラーやキャンセルの場合は"False"を返します。
'(例)MsgBox SaveFileDialogBox("xlsファイル","*.xls")->Xlsファイルを名前を付けて保存ダイアログボックスを表示し、値を格納します。
'\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
Dim tOpenFileName As OPENFILENAME
Dim lngRet        As Long
With tOpenFileName
        .hwndOwner = Ohwnd '<2008_08_28
        '構造体のサイズを設定
        .lStructSize = Len(tOpenFileName)
        'ファイルパターンを設定(複数指定する場合は続いて記入)
        .lpstrFilter = FilterName & vbNullChar & Filter
        '優先的に表示させるフィルタのインデックス
        .nFilterIndex = 1
        'ファイル名の内容を初期化
            .lpstrFile = FileName & String$(256, Chr$(0))
        '同バイト数
            .nMaxFile = 256
        'ファイル名を受取るバッファの設定(Nullで埋めておく)
            .lpstrFileTitle = String$(256, Chr$(0))
        '同バイト数
            .nMaxFileTitle = 256
        'デフォルトのフォルダ名の設定
        .lpstrInitialDir = defaultDirectryPath
        
        'ダイアログのキャプション名
        If Title = "" Then
            .lpstrTitle = "名前を付けて保存"
        Else
            .lpstrTitle = Title
        End If
        'flagsの動作の設定
        .flags = OFN_PATHMUSTEXIST Or OFN_FILEMUSTEXIST Or _
         OFN_HIDEREADONLY Or OFN_OVERWRITEPROMPT
End With
lngRet = GetSaveFileName(tOpenFileName)

If lngRet = 0 Then
    'キャンセルボタンを押した場合(クローズ・エラーも)
        SaveFileDialogBox = "False"
        Exit Function
Else
        SaveFileDialogBox = Left$(tOpenFileName.lpstrFile, InStr(tOpenFileName.lpstrFile, vbNullChar) - 1)
        seldir = ""
        Dim a As Integer '文字列の長さ
        Dim c As Integer '開始文字
        Dim d As String '検索された文字
        a = Len(SaveFileDialogBox)
        c = a - 1
        Do
            d = Mid(SaveFileDialogBox, c, 1)
            If "\" = d Then
                Exit Do
            End If
            c = c - 1
        Loop Until c < 1
        SelectDir = Mid(SaveFileDialogBox, 1, c)
End If
End Function

編集 削除
K.J.K.  2008-08-30 10:50:28  No: 101036  IP: 192.*.*.*

ChDir ステートメントを用いて、作業ディレクトリを他のに
してみるとか。

編集 削除
hirobo-macros  2008-09-01 11:32:35  No: 101037  IP: 192.*.*.*

K.J.K.さん  ありがとうございます。
SaveDialogBox処理後 ChDir "C:\"にしたところリネームなどできるよーに
なりました。

編集 削除