Hola
Estoy haciendo un formulario donde pongo un combo y quiero elegir los directorios, para poder listar luego los *.csv que haya en la carpeta correspondiente.
Hasta ahora, lo que he conseguido es esto:
Private Sub llenacombo(midir)
Dim minombre As String
ComboBox1.Clear
ComboBox1.Text = midir
minombre = dir(midir, vbDirectory)
Do While minombre <> ""
If (GetAttr(midir & "\" & minombre) And vbDirectory) = vbDirectory Then
ComboBox1.AddItem (minombre)
End If
minombre = dir
Loop
End Sub
Al llamar a la función, el argumento es el nombre del directorio que tengo seleccionado.
Aún no tengo convenientemente gestionado el código para hacer que vuelva al directorio anterior, pero no le veo problema.
Sin embargo, lo que me falta es poder presentar lo que se ve al entrar en "Mi PC", es decir, las unidades.
Agradecería ayuda para aprenderlo, pues ya no me urge.
Gracias.
¿Nadie sabe cómo hacer esto?
¿No hay ningún API que sirva para montar el típico diálogo de apertura de archivos de Windows?
Saludos
si quieres cualquier cuadro de diálogo de Excel, utiliza la colección Dialogs
Application.Dialogs(xlDialogOpen).Show
esto mostraría el cuadro de diálogo abrir y abriría el archivo, es decir, que muestra el diálogo y hace la operación correspondiente.
Tienes también el objeto FileDialog al que puedes definir los filtros y demás condiciones.
Si sólo quieres un nombre de archivo, prueba con GetOpenFilename
archivoelegido = Application.GetOpenFilename("archivos csv,*.csv", , "elige un archivo")
------
Ya sé Excel, pero necesito más ahora en pdf
------
Ya sé Excel, pero necesito más.
Uff, volviendo sobre el filedialog he visto esta respuesta que no te agradecí en su día (es posible que no la pudiera leer por alguna razón, pues no lo implementé en el trabajo que tenía en su momento), así que aprovecho para agradecértelo ahora.
Y continúo con una pregunta:
Tengo un filedialog para apertura de archivos al que le estoy poniendo los filtros.
El caso es que yo sé, mediante código, cómo se tiene que llamar el archivo que busco. Es decir, no solo la extensión, sino el nombre completo.
Cuando pongo este nombre en el filtro me dice que error 5 y que me vaya a cascala.
Dim fDialog As Office.FileDialog
Dim nombrearchivo As String
nombrearchivo = Right(Left(ThisWorkbook.Name, Len(ThisWorkbook.Name) - 5), Len(ThisWorkbook.Name) - 14) & ".xml"
With fDialog
.Filters.Clear
.Filters.Add "Archivo vinculado", nombrearchivo <------- Aquí es donde me dice que el argumento es erróneo.
.Filters.Add "Otros archivos", "*.xml"
.Filters.Add "Todos los archivos", "*.*"
If .Show = True Then
Else
End If
End With
la definición de los filtros espera unas extensiones de archivo, tipo *.loquesea
si pones un nombre completo salta ese error
por ejemplo, sí entiende un filtro de este estilo:
.Filters.Add "Excel", "*.xl*"
Prueba con la propiedad .InitialFilename del objeto filedialog, que te permite indicar el nombre del archivo que aparece por defecto, así por lo menos está preseleccionado.
With fDialog
.Filters.Clear
.InitialFileName = nombrearchivo
.Filters.Add "Otros archivos", "*.xml"
.Filters.Add "Todos los archivos", "*.*"
If .Show = True Then
Else
End If
End With
Por cierto, que ese InitialFileName puede ser una ruta completa a un archivo, no sólo un nombre, esto te permite elegir cualquier archivo del equipo si los tienes guardados en otro directorio.
------
Ya sé Excel, pero necesito más.
Pues muchísimas gracias. Lo probaré.