Usar nombre de control como variable en bucles

Tengo un formulario con veinte controles (cuadros combinados), cuyos nombres tienen la misma raíz (CTRVEHICULO) pero difieren de un número consecutivo que he colocado al final para distinguirlos. Ctrvehiculo1, ctrvehiculo2, etc.
Quiero crear un bucle para extraer el valor de cada control y realizar otras operaciones con ellos.
Quisiera saber que sintaxis puedo utilizar para que me reconozca este control con todas sus propiedades, ya que he intentado usar métodos de concatenación con & y no me lo reconoce.
"CTRVEHICULO" & n donde n es una variable incrmental que uso para controlar el bucle y variar el nombre del control.
1

1 respuesta

Respuesta
1
Seria mucho más fácil si realizaras un arreglo de controles, de esa forma se puede ir viendo la propiedad de cada uno de los controles a medida que el valor va incrementando.
Por ejemplo, el nombre de tus control sera CTRVEHICULO al segundo le pones el mismo nombre tal cual y el mismo visual basic te tirara un mensaje que dice:
"Ya existe un control llamado 'CTRVEHICULO' ¿Desea crear una matriz de controles?" y pones que si.
Y haces lo mismo con todos los otros. Ojo que para hacer una matriz de controles deben ser del mismo tipo es decir existe una matriz de Text1(n) y puede existir otra de Button1(n).
Espero y te sirva.
Cualquier duda me dices.
Bye.
Primero que nada gracias, por tu pronta respuesta. He intentado lo que me has sugerido, pero al salir del control y detectar que tiene el nombre repetido, lo que hace automáticamente es volver a dejar el nombre que le asigna por defecto y no me presenta la opción de crear la matriz. Es posible que haya alguna opción de conficguración que no está activa, pero no la veo en el menú de opciones de VB. Por si te sirve de algo trabajo con windows XP y Office 2003. La base de datos la tengo compatible con Access 2000.
En todo caso he intentado tanto cambiar el nombre al control (combox) que ya tenía, como hacerlo con otros nuevos de prueba.
Otra vez gracias anticipadas
Me acaba de resaltar una duda, los controles son todos del tipo TextBox o todos del tipo ComboBox, ¿etc? Ya que si no son todos del mismo tipo ya no podrías realizar una matriz de controles con los que tienes a no ser que si algunos textbox van por separado de las funciones.
Son todos combox. Gracias por la pregunta. Como te indiqué probé de crear dos controles nuevos (combox) y asignarles el mismo nombre y al segundo no le cambia el nombre (le deja el que le asigna por defecto) y no aparece el aviso para generar una matriz de control.
Prueba con esto.
Elimina los combobox que tengas, luego insertas uno nuevo en el formulario (solo uno), con este nuevo combobox que insertaste realizas lo siguiente:
Lo seleccionas y con el click derecho le pones copiar, luego te posicionas en algún lugar del formulario y le pones pegar y te saltara el mensaje que te mencione anteriormente.
Prueba con esto y me dices si te resulto.
Bye.
Me puse a leer uno de tus comentarios ¿Estas utilizando la macros de office?
Si es así la forma de trabajar es diferente.
Me avisas y te doy la solución para office.
Bye.
Para no hacerte perder tiempo te doy la solución de inmediato (Los pasos que te explicaba anteriormente son para vb 6.0 y si estas ocupando Office es muy distinto por eso no te resultaba (No leí bien tu comentario por eso no me di cuenta de ese detalle)).
Mira te dejo un ejemplo:
Private Sub UserForm_Click()
Dim i As Long
Dim j As Long
ComboBox1.Clear
ComboBox2.Clear
' El for tiene que dar la cantidad de vueltas segun la cantidad de controles, en este caso son dos combobox.
For i = 1 To 2
' Aca (en el With) leemos los controles del UserForm1 y queremos manejar los combobox y le 'concatemos el i donde i en cada vuelta del for toma el valor de un combobox distinto '(ojo siempre colocale un numero secuencial a los controles cuando desees hacer algo 'parecido)
    With UserForm1.Controls("ComboBox" & i)  
         ' Y solo a modo de ejmplo los rellenamos.
        For j = 0 To 10
             If i = 1 Then
                .AddItem j
             End If
             If i = 2 Then
                .AddItem j * 2
             End If
         Next
    End With
Next
End Sub
Muchas gracias, eso era lo que quería. Estaba por intentar algo parecido cambiando la sintaxis de la llamada al control
en lugar de Forms!nombreformulario!nombrecontrol
Iba a probar con
Forms(nombreformulario).Controls(nombrecontrol)
Creando una variable string a la cual le asignaría una cadena conactenada con la raíz del nombre del control & una variable n
Creo que es algo parecido a lo que me has sugerido. Te incluyo en mi lista de favoritos. Lo único que no me queda claro es por qué no funciona si la versión de Visual es 6.3
Muy bien.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas