Visual Basic - Error 344 Indice para la matriz de objetos

Life is soft - evento anual de software empresarial
 
Vista:
sin imagen de perfil
Val: 5
Ha aumentado su posición en 37 puestos en Visual Basic (en relación al último mes)
Gráfica de Visual Basic

Error 344 Indice para la matriz de objetos

Publicado por Emanuel (2 intervenciones) el 29/10/2020 20:04:03
ESPAÑOL:

Estoy intentando traducir un programa cargando texto desde la base de datos.
Tengo controles que son arrays y otros que no.
El método funciona bien en los controles que no son arrays.
En los controles que sí son arrays me da un ERROR 344. No reconoce el indice para el control. Alguna solución?

ENGLISH:
I am trying to translate a program by loading text from the database.
I have controls that are arrays and others that are not.
The method works fine on controls that are not arrays.
In the controls that are arrays I get an ERROR 344. It does not recognize the index for the control. Any solution?


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
If Rs.RecordCount > 0 Then
        Rs.MoveFirst
        'Recorre el recordset para asignar el caption de los controles y objetos
        While Not Rs.EOF
            For Each ElControl In Controls
                'si está dentro lo deshabilita
                If ElControl.Name = Rs!nombre Then
                   ' Agregar mas controles si es necesario
                    If (TypeOf ElControl Is Label) Or _
                        (TypeOf ElControl Is Frame) Or _
                        (TypeOf ElControl Is CheckBox) Or _
                        (TypeOf ElControl Is OptionButton) Or _
                        (TypeOf ElControl Is Menu) Or _
                        (TypeOf ElControl Is CommandButton) Then
 
                        'Asigna el caption
                        If Rs!indice <> "" Then
                            ElControl(Rs!indice).Caption = Rs!texto
                        Else
                            ElControl.Caption = Rs!texto
                        End If
                    ElseIf (TypeOf ElControl Is TextBox) Then
                        'si es un textbox, RichTexbox etc...
                        If Rs!indice <> "" Then
                            ElControl(Rs!indice).Text = Rs!texto
                        Else
                            ElControl.Text = Rs!texto
                        End If
                    Else
                        'Error
                        MsgBox "Error: " & Err.Description, vbCritical
                    End If
                End If
            Next
            'Siguiente registro
            Rs.MoveNext
        Wend
    End If
 
 
    On Local Error Resume Next
    Rs.Close

Screenshot_1
Screenshot_2
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 5
Ha aumentado su posición en 37 puestos en Visual Basic (en relación al último mes)
Gráfica de Visual Basic

Error 344 Indice para la matriz de objetos

Publicado por Emanuel (2 intervenciones) el 30/10/2020 19:03:54
ESPAÑOL:
El control sí está en el formulario.
A la vez, chequeo que el mismo sea un array.
El error esta cuando le indico el indice a ese control. ERROR 344.

ENGLISH:
The control is on the form.
At the same time, I check that it is an array.
The error is when I indicate the index to that control. ERROR 344.

Screenshot_5
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de gilman
Val: 594
Bronce
Ha mantenido su posición en Visual Basic (en relación al último mes)
Gráfica de Visual Basic

Error 344 Indice para la matriz de objetos

Publicado por gilman (359 intervenciones) el 31/10/2020 09:27:14
El problema es que ElControl, no es el array de controles, es el control en si mismo así que si simplemente ejecutas:
1
ElControl.Caption = rs!Caption
funcionará
Pero antes tendrás que comprobar que la Index de ElControl coincide con rs!Indice

De todas formas deberías cambiar la forma en la que pones las propiedades, ya que si el formulario tiene muchos controles va a ser muy lento
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar