Combobox y sheets("PRODUCTOS")

Hola, espero que te encuentres bien de salud al leer esto:
¿Cómo podría hacer que un combobox tenga en la propiedad rowsource un rango de una hoja no activa?
¿Es posible que mediante un código se explore el disco en busca de archivos con extensión especificada y poner estas rutas en la lista de un combobox?

1 Respuesta

Respuesta
1
En teoría la propiedad RowSource te "deberia" de aceptar rango de hojas de calculo, pero en realidad lo único que acepta es un String, por ello, esto no funciona:
cboClientes.RowSource = wsClientes.Range("A2:A9")
Por que aquí lo que me devuelve es un objeto Range, que es incompatible con lo que espera la propiedad que es String, por ello hay que hacerlo así:
cboClientes.RowSource = "A2:A9"
Pero como bien dices, esto te devuelve los valores de la hoja activa, ahora, para mostrar los valores de una hoja NO activa, hay dos métodos, el primero es ir agrando cada valor con el método AddItem, esto no es recomendable cuando tienes muchos valores que mostrar en el combo box, el segundo método, es activar la hoja, "sin que se note", y esto es muy rapido para cuando tienes muchos datos a mostrar, para tu segunda pregunta esta el objeto FileSearch, que es como si usaras la herramienta de buscar al abrir un libro, para mostrarlo la respuesta a tus dos pregunta considera el siguiente escenario
Un libro con dos hojas
Clientes y Reportes
En la hoja Clientes en la celda A1 = Nombre y de la celda A2 hasta la A10 nombre de clientes
Posiciónate en la hoja Reportes
Agrega un UserForm y dos Combo Box que se llamen
cboClientes y cboArchivos respectivamente a la hoja Clientes, dale el nombre de wsClientes, no confundas, la propiedad Name de la hoja, sigue siendo Clientes, pero el "objeto" worksheet se llama wsClientes, después, en el evento Initialize del UserForm, usa este código...
Private Sub UserForm_Initialize()
Dim EstaHoja As Worksheet
Dim Archivos As FileSearch
Dim co1 As Long
'1ER PREGUNTA ***
'Guardamos la hoja activa
Set EstaHoja = ActiveSheet
'Desactivamos la actualización en pantalla
'Esto es para que el usuario no vea que cambiamos de hoja
Application.ScreenUpdating = False
'Activamos la hoja Clientes
WsClientes. Activate
'Establecemos la propiedad RowSource
cboClientes.RowSource = "A2:A10"
'Activamos la hoja anterior
EstaHoja. Activate
'Activamos la actualización en pantalla
Application.ScreenUpdating = True
'Liberamos la memoria usada
Set EstaHoja = Nothing
'2DA PREGUNTA ***
'Creamos un objeto FileSearch de busqueda
Set Archivos = Application.FileSearch
With Archivos
'Establecemos el lugar de busqueda
.LookIn = "C:\"
'Le decimos que busque en los subdirectorios
.SearchSubFolders = True
'Le especificamos el tipo de archivos a buscar
.Filename = "*.xls"
'Ten cuidado al establecer las tres propiedades anteriores
'dependiendo del tipo de archivos, del lugar y si busca en
'los subdirectorios, la búsqueda puede ser algo grande
'Ejectuamos la búsqueda y le decimos que nos devuelve los
'valores por nombre y ordenados en forma ascendente
If .Execute(msoSortByFileName, msoSortOrderAscending) > 0 Then
'Si el resultado es mayor a 0 quiere decir que encontro archivos
For co1 = 1 To .FoundFiles.Count
'Agregamos cada ruta y nombre de archivo en el ComboBox
cboArchivos.AddItem .FoundFiles(co1)
Next co1
Else
MsgBox "No se encontraron archivos"
End If
End With
Set Archivos = Nothing
End Sub
Mauricio
P.D. No se te olvide finalizar la pregunta cuando estés satisfecho...

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas