ComboBox con listado de carpetas
En su día puse la siguiente pregunta y obtuve mi respuesta. En principio totalmente adecuada, sin embargo, me ha surgido un pequeño problema. Yo busco carpetas y no archivos, por lo que la función Dir me da como resultado ("."), y no me obtiene las carpetas creadas.
Tengo una capeta denominada "Contabilidad". Dentro de esta carpeta tengo una carpeta para cada año, es decir, 2010, 2011... He creado un formulario en el que he puesto un comboBox para poder elegir el año. He añadido como valores unos cuantos años(me he cubierto poniendo desde 2010 hasta 2015), de tal forma que al elegir el año abre un excel guardado en la carpeta correspondiente a ese año.
Sin embargo, me gustaría que los posibles valores del ComboBox fueran sólo los ejercicios creados, o lo que es lo mismo las carpetas existentes dentro de la carpeta "Contabilidad", es decir, de momento 2010 y 2011, pero al crear el ejercicio 2012, que también aparezca en entre los posibles valores del ComboBox.
Creo que podría poner una función al cargar este formulario, utilizando la función Dir, pero no se como hacerlo.
Gracias
Experto
Hola:
Se me ocurre que cargues el combo con el rango de años, por ej al abrir el formulario, en lugar de asignarle un rango de valores desde sus propiedades.
En el evento Initialize del form colocá esto:
Private Sub UserForm_Initialize()
'por Elsamatilde
anio = Year(Date)
For i = 2010 To anio
ComboBox1.AddItem i
Next i
End Sub
Sdos
Elsa
http://aplicaexcel.galeon.com/index.htm
Usuario
Por tanto, ¿no es posible utilizar alguna función (p.e. Dir) que enumere las carpetas existentes en la carpeta Contabilidad y traspasar esos valores al ComboBox?
Experto
Si, también se puede, pero como mencionaste que ...'valores del ComboBox fueran sólo los ejercicios creados, o lo que es lo mismo las carpetas existentes...'
Si era lo mismo te dejé la más sencilla... Aquí va la más larga. Notarás que el combo lleva el nombre de los libros, es decir con extensión (*)
Private Sub UserForm_Activate()
'por Elsamatilde
Dim strArchivos As String
Dim strNombreCarpeta As String
'carpeta donde se hará la búsqueda - AJUSTAR
strNombreCarpeta = "C:\Documents and Settings\All Users\Documentos\CarpetaAños\"
'pasamos al directorio elegido
On Error GoTo sincarpeta
ChDir strNombreCarpeta
On Error GoTo 0
'recorremos la carpeta buscando archivos de esta extensión - AJUSTAR EXTENSIÓN
strArchivos = Dir("*.xlsm")
'recorremos los archivos de la carpeta
Do While strArchivos <> ""
'mostramos el nombre de cada archivo encontrado
ComboBox1.AddItem strArchivos
'obtenemos la siguiente entrada
strArchivos = Dir
Loop
Exit Sub
sincarpeta:
MsgBox "No se encuentra la carpeta en el directorio " & strNombreCarpeta, , "ERROR"
Unload Me
End Sub
Tengo una capeta denominada "Contabilidad". Dentro de esta carpeta tengo una carpeta para cada año, es decir, 2010, 2011... He creado un formulario en el que he puesto un comboBox para poder elegir el año. He añadido como valores unos cuantos años(me he cubierto poniendo desde 2010 hasta 2015), de tal forma que al elegir el año abre un excel guardado en la carpeta correspondiente a ese año.
Sin embargo, me gustaría que los posibles valores del ComboBox fueran sólo los ejercicios creados, o lo que es lo mismo las carpetas existentes dentro de la carpeta "Contabilidad", es decir, de momento 2010 y 2011, pero al crear el ejercicio 2012, que también aparezca en entre los posibles valores del ComboBox.
Creo que podría poner una función al cargar este formulario, utilizando la función Dir, pero no se como hacerlo.
Gracias
Experto
Hola:
Se me ocurre que cargues el combo con el rango de años, por ej al abrir el formulario, en lugar de asignarle un rango de valores desde sus propiedades.
En el evento Initialize del form colocá esto:
Private Sub UserForm_Initialize()
'por Elsamatilde
anio = Year(Date)
For i = 2010 To anio
ComboBox1.AddItem i
Next i
End Sub
Sdos
Elsa
http://aplicaexcel.galeon.com/index.htm
Usuario
Por tanto, ¿no es posible utilizar alguna función (p.e. Dir) que enumere las carpetas existentes en la carpeta Contabilidad y traspasar esos valores al ComboBox?
Experto
Si, también se puede, pero como mencionaste que ...'valores del ComboBox fueran sólo los ejercicios creados, o lo que es lo mismo las carpetas existentes...'
Si era lo mismo te dejé la más sencilla... Aquí va la más larga. Notarás que el combo lleva el nombre de los libros, es decir con extensión (*)
Private Sub UserForm_Activate()
'por Elsamatilde
Dim strArchivos As String
Dim strNombreCarpeta As String
'carpeta donde se hará la búsqueda - AJUSTAR
strNombreCarpeta = "C:\Documents and Settings\All Users\Documentos\CarpetaAños\"
'pasamos al directorio elegido
On Error GoTo sincarpeta
ChDir strNombreCarpeta
On Error GoTo 0
'recorremos la carpeta buscando archivos de esta extensión - AJUSTAR EXTENSIÓN
strArchivos = Dir("*.xlsm")
'recorremos los archivos de la carpeta
Do While strArchivos <> ""
'mostramos el nombre de cada archivo encontrado
ComboBox1.AddItem strArchivos
'obtenemos la siguiente entrada
strArchivos = Dir
Loop
Exit Sub
sincarpeta:
MsgBox "No se encuentra la carpeta en el directorio " & strNombreCarpeta, , "ERROR"
Unload Me
End Sub
2 Respuestas
Respuesta de Elsa Matilde
1
Respuesta de cottavi -