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?
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...