2009-10-18 25 views
7

VB6を使用する共通のダイアログコントロールを使用してフォルダを選択する方法

コード。上記のコードから

CommonDialog1.DialogTitle = "Open File" 
CommonDialog1.Filter = "*.*" 
CommonDialog1.FilterIndex = 1 
CommonDialog1.Flags = cdlOFNAllowMultiselect + cdlOFNExplorer 
CommonDialog1.Flags = cdlOFNFileMustExist + cdlOFNHideReadOnly 
CommonDialog1.CancelError = True 
On Error Resume Next 
CommonDialog1.ShowOpen 
If Err Then 
    'MsgBox "Select Folder" 
    Exit Sub 
End If 

、私は、ファイルを選択していますが、私はフォルダのみを選択したいファイルを選択する必要はありません。私のコードを変更する方法。

vb6コードが必要ですか?

答えて

6

私は視覚的な基本的な仕事をするために持っていたが、私は代わりに開くファイルの名前を取得するための共通のダイアログボックスを使用してのあなたはすでに一部であるSHBrowseForFolder機能を使用すべきだと思うので、それはしばらくしていますのWindows APIの。その使用方法を説明するページには、linkがあります。

更新(2017):提供リンクが壊れているが、a backed-up version can be viewed on archive.org

+4

注:リンクが壊れています。 – Roylee

+0

しないでください。答えは自己完結型であり、何年もかけて壊れる可能性があるので外部リンクに依存してはいけません。あなたの答えを豊かにするための参考資料としてリンクを付けることができますが、その本体を構成すべきではありません。 – thebunnyrules

+0

リンクを確認したい人は、ここをクリックしてください:https://web.archive.org/web/20081204022345/http://www.base64.co.uk:80/shbrowseforfolder.html – thebunnyrules

6

フォルダを選択するには、シェルと自動化コンポーネントを使用できます。

Private shlShell As Shell32.Shell 
Private shlFolder As Shell32.Folder 
Private Const BIF_RETURNONLYFSDIRS = &H1 

Private Sub Command1_Click() 
    If shlShell Is Nothing Then 
     Set shlShell = New Shell32.Shell 
    End If 
    Set shlFolder = shlShell.BrowseForFolder(Me.hWnd, "Select a Directory", BIF_RETURNONLYFSDIRS) 
    If Not shlFolder Is Nothing Then 
     MsgBox shlFolder.Title 
    End If 
End Sub 

shell32.dllへの参照をプロジェクトに追加する必要があります。 [プロジェクト/参照...]メニューを使用して、shell32.dllを参照します。

また、Windows APIをTwotymzが提案するように使用することもできます。

+0

。 –

+0

@KenForslund:もっと適切な 'Title'以外の' shlFolder'オブジェクトで他のものを取り出すことができると思います。 –

+0

は表示されません。 .ParentFolderは次のフォルダ名ですが、まったく単純な単一の名前であり、あらゆる種類のパスではありません。これはまだ私の瞬間の必要性を解決しましたが、私はより強固な経路を期待していました。 –

1

私はオフィス> = 2K3のためのVBAでフォルダ選択ダイアログを開いて、とにかく、より一般的なVBAの質問ですが。

私は同じ機能が必要なので、とても難しいとは思えませんでした。リトルグーグルはそれを作った。ここ はすてきな簡単な解決策は、これは古いスレッドですが、多分誰かがこれによって助けられるでしょうtake a look

Function GetFolderName() 
    Dim lCount As Long 

    GetFolderName = vbNullString 
    With Application.FileDialog(msoFileDialogFolderPicker) 
     .InitialFileName = OpenAt 
     .Show 
     For lCount = 1 To .SelectedItems.Count 
      GetFolderName = .SelectedItems(lCount) 
     Next lCount 
    End With 
End Function 
+0

質問はVBAについてではなく、VB6についてです! VB6には 'Application.FileDialog'はありません。 –

2

です。 このコードは私のためにVB6で動作します。これは合理的にうまく動作しますが、shlFolder.Title値のみが選択されたディレクトリ名ではなくパス全体で

Private Sub ChooseDir_Click() 
    Dim sTempDir As String 
    On Error Resume Next 
    sTempDir = CurDir 'Remember the current active directory 
    CommonDialog1.DialogTitle = "Select a directory" 'titlebar 
    CommonDialog1.InitDir = App.Path 'start dir, might be "C:\" or so also 
    CommonDialog1.FileName = "Select a Directory" 'Something in filenamebox 
    CommonDialog1.Flags = cdlOFNNoValidate + cdlOFNHideReadOnly 
    CommonDialog1.Filter = "Directories|*.~#~" 'set files-filter to show dirs only 
    CommonDialog1.CancelError = True 'allow escape key/cancel 
    CommonDialog1.ShowSave 'show the dialog screen 

    If Err <> 32755 Then ' User didn't chose Cancel. 
     Me.SDir.Text = CurDir 
    End If 

    ChDir sTempDir 'restore path to what it was at entering 
End Sub 
+0

このコードを使用すると、拡張子が「〜#〜」のFileNameを返すファイルの名前を入力する必要があります。また、開くボタンを選択してフォルダ内に入り、名前を入力しないと機能しません。 。 –

+0

ここに「CurDir」があります。できます –

関連する問題