9
votes

Comment sélectionner un dossier uniquement à l'aide de la commande commune de la boîte de dialogue

Utilisation de VB6

Code. P>

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

0 commentaires

4 Réponses :


7
votes

Pour sélectionner un dossier, vous pouvez utiliser le composant Shell et Automation. XXX

Vous devrez ajouter une référence à shell32.dll à votre projet. Utilisez le menu Project / Références ... Menu, puis naviguez pour shell32.dll .

ou vous pouvez utiliser l'API Windows comme Twotymz suggère.


3 commentaires

Cela fonctionne raisonnablement bien, mais la valeur Shlfolder.Title n'est que le nom du répertoire sélectionné et non l'ensemble du chemin.


@Kenforslund: Je présume que vous pouvez récupérer quelque chose d'autre sur ce shlfolder Outre titre plus approprié.


ne semble pas si. .ParentFolder est le prochain nom de dossier, mais encore une fois, juste un seul nom unique, pas un chemin d'aucune sorte. Cela résolvait toujours mon besoin pour le moment, mais je m'attendais à un chemin plus robuste.



8
votes

Cela fait longtemps que je devais faire un travail de base visuel, mais je pense qu'au lieu d'utiliser la boîte de dialogue commune pour obtenir le nom d'un fichier à ouvrir, vous devez utiliser la fonction shbrowseforfololder qui fait déjà partie de l'API Windows. Voici un lien sur une page qui décrit son utilisation.

Mise à jour (2017): Le lien fourni est cassé mais une version sauvegardée peut être visionnée sur archive.org


4 commentaires

Ne fais pas ça. La réponse devrait être autonome et non dépendante sur des liens externes car ils peuvent briser au fil des ans. Un lien peut être donné comme une référence pour enrichir votre réponse, mais ne doit pas constituer le corps principal de celui-ci.


Toute personne qui souhaite voir le lien ininterrompu peut cliquer ici: web.archive.org/web/20081204022345/http://www.base64.co.uk:8 0 / ...


Cette version semble être bien: https://github.com/badcodes/vb6/tree / maître / folderrowser


@thebunnyrules - La réponse est autonome. Si la phrase contenant le lien ne contenant pas n'est pas là que la réponse aurait toujours un sens et informerait l'utilisateur de l'action nécessaire pour corriger le problème.



-1
votes

Je pense que c'est plus général de la VBA Question, d'ouverture de la boîte de dialogue Sélectionner un dossier dans VBA pour Office> = 2K3.

Je ne pouvais pas croire que c'est si difficile, car j'ai besoin de la même fonctionnalité. Peu de googling l'a fait. Voici une belle solution simple Jetez un coup d'œil P>

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


1 commentaires

La question concerne VB6, pas sur VBA!, Il n'y a aucun Application.FileDialog dans VB6;).



4
votes

C'est un vieux fil, mais peut-être que quelqu'un sera aidé par cela. Ce code fonctionne dans VB6 pour moi:

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


1 commentaires

En utilisant ce code, l'utilisateur doit entrer un nom pour un fichier qui retournera un nom de fichier avec une extension de ~ # ~ et si cela ira à l'intérieur du dossier en sélectionnant le bouton Ouvrir et sans saisir un nom. ne fonctionne pas;).