2012-10-02 59 views
6

Necesito el nombre de ruta y el nombre del archivo que se abre con el cuadro de diálogo de archivo (macro de VBA en excel). Quiero mostrar esta información con un hipervínculo en mi hoja Excel. ¿Alguien puede ayudarme?Cómo obtener la ruta seleccionada y el nombre del archivo usando el control de diálogo de archivo abierto

Gracias de antemano

edición:

Esto es lo que acabo de encontrar:

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 

Con este código que tienen la ruta del archivo. Ahora sigo buscando una forma de obtener el nombre del archivo.

Tx

Respuesta

8

probar este

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

Jeje, borré mi publicación porque era idéntica a la tuya. El OP puede estar seguro de que funcionará :-) – Trace

+0

Tx, ¡esto es exactamente lo que necesitaba para la parte de la ruta del archivo! : D – VeVi

+0

@ user1346347 editado para devolver también el nombre de archivo –

1

creo que usted quiere esto:

Dim filename As String 
filename = Application.GetOpenFilename 

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

Tx a su reacción. Creo que no fui muy claro. Necesito abrir un archivo. De ese archivo, necesito saber la ruta del archivo y el nombre del archivo. He encontrado una solución para obtener el archivo de ruta. Lo agrego en mi pregunta. – VeVi

+0

Actualizado mi respuesta – JMK

+0

No obtengo mi nombre de archivo, ¿tal vez porque uso FileDialog? – VeVi

8

Usted puede conseguir cualquier parte de la ruta del archivo mediante FileSystemObject. GetFileName (filepath) le proporciona lo que desea.

código modificado a continuación:

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

El código inicia la búsqueda de archivos desde dos puntos de la raíz, si quiero iniciar la búsqueda de un directorio específico, para evitar ir a ese directorio cada vez, donde debería poner uno. Lo hice como

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 

Pero no podía comenzar alcance de "G: \ auditorías \ A2010"

1

Creo que esta es la forma más sencilla de llegar a lo que quieres.

de crédito a la respuesta de JMK para la primera parte, y la parte hipervínculo fue adaptado 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 
0

Creo que esto va a hacer:

Dim filename As String 
filename = Application.GetOpenFilename 
0

De Office 2010, no vamos a ser capaz de usar el control de cuadro de diálogo común, por lo que es bueno usar el objeto Aplicación para obtener los resultados deseados.

Aquí tengo un cuadro de texto y un botón de comando - pegue el siguiente código bajo el botón de comando haga clic en evento, que abrirá el cuadro de diálogo de archivo y agregará el nombre de archivo al cuadro de texto.

Dim sFileName As String 

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

TextBox1.Text = sFileName 
3

para extraer sólo el nombre de archivo de la ruta, puede hacer lo siguiente:

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

Solución simple de una línea. ¡Estupendo! Justo lo que necesitaba. – riderBill

0

Después de buscar en diferentes sitios web que buscan una solución en cuanto a cómo separar la ruta completa del nombre del archivo una vez la información completa de una sola pieza se obtuvo del Open File Dialog, y viendo cuán "complejas" eran las soluciones para un recién llegado a Excel como yo, me preguntaba si podría haber una solución más simple. Así que comencé a trabajar en eso por mi cuenta y llegué a esta posibilidad. (No tengo idea si alguien tuvo la misma idea antes.Al ser tan simple, si alguien tiene, yo excusarme.)

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 

y eso es todo !!! Sólo tienes que darle una oportunidad, y quiero saber cómo va ...

+0

¡Dios me ayude! Me acabo de dar cuenta de que Fabio Reche ya había dado la misma solución (2 de octubre de 15), aunque no tan completo como el mío, pero igual, ¡y justo debajo del mío! Puede ser debido a su brevedad, solo una línea y no lo vi. Mis disculpas, Fabio. –

+0

Esta solución no se compila en Excel (2016). No le gusta esta línea: 'fdString = (el OpenFileDialog.FileName)' No estoy familiarizado con 'the' como palabra clave. Además, para OpenFileDialog, ¿tiene que haber una referencia habilitada? – GlennFromIowa

0

El comando de abajo es suficiente para obtener la ruta del archivo de un cuadro de diálogo -

my_FileName = Application.GetOpenFilename("Excel Files (*.tsv), *.txt") 
Cuestiones relacionadas