web-dev-qa-db-fra.com

Comment obtenir le chemin et le nom du fichier sélectionnés à l'aide du contrôle de la boîte de dialogue Ouvrir un fichier

J'ai besoin du chemin d'accès et du nom du fichier qui est ouvert avec File Dialog (macro VBA dans Excel). Je veux montrer cette information avec un lien hypertexte dans ma feuille de calcul. Quelqu'un peut-il m'aider?

Merci d'avance

modifier:

Voici ce que je viens de trouver:

Sub GetFilePath()

Set myFile = Application.FileDialog(msoFileDialogOpen)
With myFile
.Title = "Choose File"
.AllowMultiSelect = False
If .Show <> -1 Then
Exit Sub
End If
FileSelected = .SelectedItems(1)
End With

ActiveSheet.Range("A1") = FileSelected
End Sub

Avec ce code, j'ai le chemin du fichier. Maintenant, je cherche toujours un moyen d'obtenir le nom du fichier.

Tx

6
VeVi

Essaye ça

Sub Demo()
    Dim lngCount As Long
    Dim cl As Range

    Set cl = ActiveCell
    ' Open the file dialog
    With Application.FileDialog(msoFileDialogOpen)
        .AllowMultiSelect = True
        .Show
        ' Display paths of each file selected
        For lngCount = 1 To .SelectedItems.Count
            ' Add Hyperlinks
            cl.Worksheet.Hyperlinks.Add _
                Anchor:=cl, Address:=.SelectedItems(lngCount), _
                TextToDisplay:=.SelectedItems(lngCount)
            ' Add file name
            'cl.Offset(0, 1) = _
            '    Mid(.SelectedItems(lngCount), InStrRev(.SelectedItems(lngCount), "\") + 1)
            ' Add file as formula
            cl.Offset(0, 1).FormulaR1C1 = _
                 "=TRIM(RIGHT(SUBSTITUTE(RC[-1],""\"",REPT("" "",99)),99))"


            Set cl = cl.Offset(1, 0)
        Next lngCount
    End With
End Sub
10
chris neilsen

Vous pouvez obtenir n'importe quelle partie du chemin du fichier à l'aide de FileSystemObject. GetFileName (chemin du fichier) vous donne ce que vous voulez.

Code modifié ci-dessous:

Sub GetFilePath()
Dim objFSO as New FileSystemObject

Set myFile = Application.FileDialog(msoFileDialogOpen)
With myFile
.Title = "Choose File"
.AllowMultiSelect = False
If .Show <> -1 Then
Exit Sub
End If
FileSelected = .SelectedItems(1)
End With

ActiveSheet.Range("A1") = FileSelected 'The file path
ActiveSheet.Range("A2") = objFSO.GetFileName(FileSelected) 'The file name
End Sub
9
meticoeus

Pour extraire uniquement le nom de fichier du chemin, vous pouvez procéder comme suit:

varFileName = Mid(fDialog.SelectedItems(1), InStrRev(fDialog.SelectedItems(1), "\") + 1, Len(fDialog.SelectedItems(1)))
3
Fabio Reche

Je pense que tu veux ça:

Dim filename As String
filename = Application.GetOpenFilename

Dim cell As Range
cell = Application.Range("A1")
cell.Value = filename
1
JMK

Je pense que c'est le moyen le plus simple d'obtenir ce que vous voulez. 

Nous remercions JMK pour la réponse à la première partie et la partie hyperlien a été adaptée de http://msdn.Microsoft.com/en-us/library/office/ff822490(v=office.15).aspx

'Gets the entire path to the file including the filename using the open file dialog
Dim filename As String
filename = Application.GetOpenFilename

'Adds a hyperlink to cell b5 in the currently active sheet
With ActiveSheet
 .Hyperlinks.Add Anchor:=.Range("b5"), _
 Address:=filename, _
 ScreenTip:="The screenTIP", _
 TextToDisplay:=filename
End With
1
user1527032

Après avoir recherché différents sites Web, vous avez cherché une solution permettant de séparer le chemin d'accès complet du nom de fichier une fois que les informations complètes ont été obtenues à partir de la boîte de dialogue Ouvrir un fichier, et de voir à quel point les solutions données étaient complexes pour un nouvel arrivant Excel. comme moi, je me suis demandé s'il ne pourrait pas y avoir une solution plus simple. J'ai donc commencé à travailler seul et je suis arrivé à cette possibilité… .. (Je ne sais pas si quelqu'un a eu la même idée auparavant. Étant si simple, si quelqu'un l'a fait, je m'excuse.)

Dim fPath As String
Dim fName As String
Dim fdString As String

fdString = (the OpenFileDialog.FileName)

'Get just the path by finding the last "\" in the string from the end of it
 fPath = Left(fdString, InStrRev(fdString, "\"))

'Get just the file name by finding the last "\" in the string from the end of it
 fName = Mid(fdString, InStrRev(fdString, "\") + 1)

'Just to check the result
 Msgbox "File path: " & vbLF & fPath & vbLF & vblF & "File name: " & vbLF & fName

ET C'EST TOUT!!! Essayez, et laissez-moi savoir comment ça se passe ...

À partir d'Office 2010, nous ne pourrons plus utiliser le contrôle de boîte de dialogue commun. Il est donc agréable d'utiliser l'objet Application pour obtenir les résultats souhaités.

Ici, j'ai une zone de texte et un bouton de commande - collez le code suivant sous l'événement de bouton de commande, ce qui ouvrira la boîte de dialogue du fichier et ajoutera le nom du fichier à la zone de texte.

Dim sFileName  As String

sFileName = Application.GetOpenFilename("MS Excel (*.xlsx), *.xls")

TextBox1.Text = sFileName
0
Chikku Jacob
Sub GetFilePath()

Set myFile = Application.FileDialog(msoFileDialogOpen)

With myFile

.Title = "Choose File"

.AllowMultiSelect = False

If .Show <> -1 Then

Exit Sub

End If

FileSelected = Replace(.SelectedItems(1), .InitialFileName, "")

End With

ActiveSheet.Range("A1") = FileSelected

End Sub
0
Madhu kumar

Le code démarre la recherche de fichier à partir de la racine du côlon, si je veux lancer la recherche dans un répertoire spécifique, afin d'éviter de consulter ce répertoire à chaque fois, où je devrais en placer un. Je l'ai fait comme

Sub GetFilePath()
FileSelected = "G:\Audits\A2010"
Set myFile = Application.FileDialog(msoFileDialogOpen)
With myFile
.Title = "Choose File"
.AllowMultiSelect = False
If .Show <> -1 Then
Exit Sub
End If
FileSelected = .SelectedItems(1)
End With

ActiveSheet.Range("C14") = FileSelected
End Sub

Mais il n’a pas pu démarrer à partir de "G:\Audits\A2010"

0
RAJESH BAWKAR

La commande ci-dessous est suffisante pour obtenir le chemin du fichier à partir d'une boîte de dialogue - 

my_FileName = Application.GetOpenFilename("Excel Files (*.tsv), *.txt")
0
Akshat Agrawal

Je pense que cela va faire:

Dim filename As String
filename = Application.GetOpenFilename
0
Tanmay Nehete