¿Como cargar un valor recorriendos los controles (TextBox) de un formulario?

A tod@s!

En un formulario tengo un ListBox, al ejecutar una accion llama a una macro, ejecutando un codigo.

Este codigo esta en un modulo y consiste en recorrer las columnas de la fila elegida en el Listbox y añadiendolo a los TextBox de un formulario que se abre FinalizarOTs.

Sub RecorreListBox 

Dim FirstNumber As Integer, SecondNumber As Integer

Dim NumControl As Integer
NumControl = FirstNumber

If NumFormulario = 108 Then  "108=FinalizarOTs.Controls  105=BusquedaCierreOTs
For Each Control In FinalizarOTs.Controls
If Right(Control.Name, 3) < FirstNumber Then GoTo Jump
If Right(Control.Name, 3) > SecondNumber Then GoTo Jump
If Right(Control.Name, 3) = NumControl Then
Control.Value = 5
NumControl = NumControl + 1
GoTo Jump2
End If
Jump:
Next Control
Jump2:
End If
Next i
End Sub

El codigo lo hace bien... Solo que si quiero que se ejecute con otro formulario por ejemplo.

INumFormulario = 105 Then 
For Each Control In BusquedaCierreOTs.Controls

¿Cómo puedo hacerlo dentro de un mismo modulo? El codigo recorrera los controles de un formulario FinalizarOTs o de otro BusquedaCierreOTs dependiendo del valor de NumFormulario.

1 respuesta

Respuesta
3

No me queda claro cómo se obtiene el valor NumFormulario, ni si a lo que llamas un módulo es el formulario o es uno del tipo Modulo1... pero a lo que consultas, la respuesta sería así:

Sub RecorreListBox 
Dim FirstNumber As Integer, SecondNumber As Integer
Dim NumControl As Integer
NumControl = FirstNumber
If NumFormulario = 108 Then      '"108=FinalizarOTs.Controls  105=BusquedaCierreOTs
    For Each Control In FinalizarOTs.Controls
        If Right(Control.Name, 3) < FirstNumber Then GoTo Jump
        If Right(Control.Name, 3) > SecondNumber Then GoTo Jump
        If Right(Control.Name, 3) = NumControl Then
            Control.Value = 5
            NumControl = NumControl + 1
            GoTo Jump2              'atención...................
        End If
Jump:
    Next Control
Jump2:    
ElseIf NumFormulario = 105 Then
    For Each Control In BusquedaCierreOTs.Controls
        If Right(Control.Name, 3) < FirstNumber Then GoTo Jump3
        If Right(Control.Name, 3) > SecondNumber Then GoTo Jump3
        If Right(Control.Name, 3) = NumControl Then
            Control.Value = 5
            NumControl = NumControl + 1
            GoTo Jump4              'atención ....................
        End If
Jump3:
    Next Control
Jump4:
End If
End Sub

Revisa los saltos 'Jump' que te dejo marcados a ver si es lo que necesitas. 
En el código que dejaste no hay ningún bucle del tipo 'For i ... por lo que no se si necesitas la línea 'Next i' o ya sabrás dónde colocarla.

¡Gracias!

Así que tengo que repetir el código (bucle) para cada formulario dependiendo del valor que coja

NumFormulario, era algo que quería evitar.

Vale pues aclarada la duda, gracias Elsa.


                    

No necesariamente. Hay otras maneras de llamar a macros, por ejemplo con la instrucción Application. Run (ver videos Nº 75 y 86)

Pero en tu consulta no queda claro cómo llamas u obtienes el valor NumFormulario

Por ejemplo: al clic en un elemento de la lista, el nombre del formulario se obtiene de la primera columna del control Lista.

Private Sub ListBox1_Click()
nbreFormulario = ListBox1.List(ListBox1.ListIndex, 0)
For Each ct In nbreFormulario.Controls
    MsgBox ct.Name   'solo me envía el nombre de cada control
Next ct
End Sub

Otro ejemplo: el nro de formulario se encuentra en alguna columna de la lista, en mi ejemplo en la primera columna del elemento seleccionado.

Este ejemplo me parece que sería lo más cercano a lo que necesitas.

Private Sub ListBox1_Click()
Select Case ListBox1.List(ListBox1.ListIndex, 0)
    Case Is = 108
        nbreFormulario = "FinalizarOTs"
    Case Is = 105
        nbreFormulario = "BusquedaCierreOTs"
    'otros case
End Select
'llamar al formulario correspondiente 
For Each ct In nbreFormulario.Controls
    MsgBox ct.Name
Next ct
End Sub

Sdos!

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas