Listbox como Variable de Subrutina

25/03/2008 - 17:47 por Luis | Informe spam
Qué tal foro! Necesito de su ayuda... Miren resulta que dentro de una
macro debo ejecutar una subrutina para 10 listbox distintos, es un
poco tedioso y poco elegante escribir el mismo código 10 veces,
únicamente modificando el nombre del listbox que debo utilizar (cabe
recalcar que cada listbox está en una página distinta de un control
multipage, y hay otros listbox dentro del formulario para los cuales
no se ejecuta la subrutina). Por esta razón quisiera saber si existe
la posibilidad de indicar el listbox como variable de entrada, de tal
manera que pueda llamar la subrutina con tan sólo definir el nombre
del listbox previamente, algo así como:

'Módulo Principal
dim LISTA as listbox
Sub Principal()
...
set LISTA as listbox1
subrutina LISTA
...
End Sub

'SUBRUTINA
Sub Subrutina(list as listbox)
...
End Sub

He podido realizar este procedimiento cuando tengo varios combobox
poniendolos como variable de entrada de una subrutina, pero no lo he
logrado hacer con checkbox puesto que toma el valor del mismo (true or
false), temo que me ocurra lo mismo al utilizar un listbox.

De paso sería interesante saber qué controles pueden ser utilizados de
esta forma (como variables de entrada en una subrutina) y cuáles no?

Espero que hayan podido entenderme...

Saludos!
 

Leer las respuestas

#1 Héctor Miguel
25/03/2008 - 21:17 | Informe spam
hola, Luis !

1) (hasta donde se) considerando que los controles en formularios no pueden "repetir" el code-name de otros
aun si estos se encuentran en diferentes paginas de un control multi-page, siguen estando en el miso formulario
y suponiendo que no les cambias el nombre por omision (ListBox1, ListBox2,... ListBox_n)

podrias utilizar bucles para hacer referencia a la secuencia en la numeracion de los controles (p.e.)
Dim n As Byte
For n = 1 To 7
<formulario.>Controls("listbox" & n) = xyz
Next

o... si se trata de controles con secuencias saltadas (1, 3, 7, etc.) definir matrices para la secuencia (p.e.)
Dim Numero As Variant, n As Byte
Numero = Array(1, 3, 7)
For n = LBound(Numero) To UBound(Numero)
<formulario.>Controls("listbox" & Numero(n)) = xyz
Next

tambien podrias "llamar" a otros procedimientos pasando como argumento solo el numero (p.e.)
Call Procedimiento_para_ListBoxes(3)

donde:
Sub Procedimiento_para_ListBoxes(n As Byte)
<formulario.>Controls("listbox" & n) = xyz
End Sub

hay otras formas y alternativas (pero creo que) "esta" es de las menos complicadas -?-

2) con respecto de la segunda parte de tu consulta (cuales controles son "pasables" como objeto a sub-rutinas)
con la salvedad de si la sub-rutina "toma" sus argumentos/variables/... ByVal o ByRef (creo que)
habria que analizar los porques y el objetivo de las sub-rutinas -?-
(de todas formas, puedes consultar en la ayuda en linea vba-excel {F1} por los temas al respecto) ;)

saludos,
hector.

__ 1 __
... debo ejecutar una subrutina para 10 listbox distintos
es un poco tedioso y poco elegante escribir el mismo codigo 10 veces
unicamente modificando el nombre del listbox que debo utilizar
(cabe recalcar que cada listbox esta en una pagina distinta de un control multipage
y hay otros listbox dentro del formulario para los cuales no se ejecuta la subrutina).
... quisiera saber si existe la posibilidad de indicar el listbox como variable de entrada
de tal manera que pueda llamar la subrutina con tan sólo definir el nombre del listbox previamente, algo asi como:

dim LISTA as listbox
Sub Principal()
...
set LISTA as listbox1
subrutina LISTA
...
End Sub

Sub Subrutina(list as listbox)
...
End Sub



__ 2 __
He podido realizar este procedimiento cuando tengo varios combobox poniendolos como variable de entrada de una subrutina
pero no lo he logrado hacer con checkbox puesto que toma el valor del mismo (true or false)
temo que me ocurra lo mismo al utilizar un listbox.
De paso seria interesante saber que controles pueden ser utilizados de esta forma
(como variables de entrada en una subrutina) y cuales no?...

Preguntas similares