2012-10-02 8 views
6

Potrzebuję nazwy ścieżki i nazwy pliku, który jest otwierany za pomocą okna dialogowego plików (makro VBA w programie excel). Chcę pokazać te informacje za pomocą hiperłącza w moim arkuszu excelsheet. Czy ktoś może mi pomóc?Jak uzyskać wybraną ścieżkę i nazwę pliku przy użyciu kontrolki okna dialogowego Otwórz plik

góry dzięki

edit:

To co właśnie znaleziono:

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 

z tym kodem mam ścieżkę do pliku. Teraz wciąż szukam sposobu na pobranie nazwy pliku.

Tx

Odpowiedz

8

Spróbuj

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 
+0

Hehe, usunąłem mój post, ponieważ był identyczny z twoim. OP może mieć pewność, że zadziała :-) – Trace

+0

Tx, to jest dokładnie to, czego potrzebowałem dla części ścieżki pliku! : D – VeVi

+0

@ user1346347 edytowane, aby również zwrócić nazwę pliku –

1

Myślę, że chcesz to:

Dim filename As String 
filename = Application.GetOpenFilename 

Dim cell As Range 
cell = Application.Range("A1") 
cell.Value = filename 
+0

tx do reakcji. Myślę, że nie wyjaśniłem się bardzo jasno. Muszę otworzyć plik. Z tego pliku muszę znać ścieżkę pliku i nazwę pliku. Znalazłem rozwiązanie, aby pobrać ścieżkę do pliku. Dodaję to w moim pytaniu. – VeVi

+0

Zaktualizowałem moją odpowiedź – JMK

+0

Nie otrzymuję nazwy pliku, może dlatego, że używam FileDialog? – VeVi

8

można uzyskać dowolną część ścieżki pliku za pomocą FileSystemObject. GetFileName (ścieżka do pliku) daje ci to, co chcesz.

Zmodyfikowany kod poniżej:

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 
0

Kod rozpoczyna wyszukiwanie plików z korzenia okrężnicy, jeśli chcę, aby rozpocząć wyszukiwanie z określonego katalogu, aby uniknąć zamiar do tego katalogu za każdym razem, gdzie należy umieścić jeden. Zrobiłem to jak

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 

Ale to nie może rozpocząć odległości od „G: \ Audyty \ A2010”

1

Myślę, że to najprostszy sposób, aby dostać się do tego, co chcesz.

zgłosił odpowiedź JMK za pierwszej części, a część hiperłącze został zaadaptowany z 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 
0

myślę, że to zrobi:

Dim filename As String 
filename = Application.GetOpenFilename 
0

Od Office 2010, nie będziemy można używać wspólnej kontroli okna dialogowego, więc dobrze jest użyć obiektu Application, aby uzyskać pożądane wyniki.

Tutaj mam pole tekstowe i przycisk Polecenie - wklej następujący kod pod zdarzenie click click przycisku polecenia, które otworzy okno dialogowe pliku i doda nazwę pliku do pola tekstowego.

Dim sFileName As String 

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

TextBox1.Text = sFileName 
3

Aby wyodrębnić tylko nazwę pliku ze ścieżki, można wykonać następujące czynności:

varFileName = Mid(fDialog.SelectedItems(1), InStrRev(fDialog.SelectedItems(1), "\") + 1, Len(fDialog.SelectedItems(1))) 
+0

Proste, jednoliniowe rozwiązanie. Wspaniały! Dokładnie to, czego potrzebowałem. – riderBill

0

Po poszukiwaniach różnych stron internetowych szuka rozwiązania, w jaki sposób oddzielić pełną ścieżkę z nazwą pliku raz pełne jednoczęściowe informacje uzyskano z okna dialogowego Otwieranie pliku, a widząc, jak "złożone" rozwiązania były dla nowicjuszy Excela takich jak ja, zastanawiałem się, czy może być prostsze rozwiązanie. Zacząłem więc pracować nad tym samodzielnie i doszedłem do tej możliwości. (Nie mam pojęcia, czy ktoś wcześniej miał ten sam pomysł.Będąc tak proste, jeśli ktoś ma, to wybaczyć sobie.)

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 

i to jest to !!! Wystarczy spróbować, i daj mi znać jak poszło ...

+0

Boże, pomóż mi! Właśnie zdałem sobie sprawę, że Fabio Reche dał już to samo rozwiązanie (2 października, 15), chociaż nie tak kompletny jak mój, ale taki sam, i tuż pod moim! Może być ze względu na jego zwięzłość, tylko jedną linię i nie widziałem tego. Moje przeprosiny, Fabio. –

+0

To rozwiązanie nie jest kompilowane w programie Excel (2016). Nie lubi tej linii: 'fdString = (the OpenFileDialog.FileName)' Nie jestem zaznajomiony z 'the' jako słowem kluczowym. Ponadto, w przypadku OpenFileDialog, czy musi być włączona referencja? – GlennFromIowa

0

Komenda poniżej wystarczy, aby uzyskać ścieżkę do pliku z okna dialogowego -

my_FileName = Application.GetOpenFilename("Excel Files (*.tsv), *.txt") 
Powiązane problemy