Visual Basic para Aplicaciones - Como Importar matriz entre Sub de VBA

Life is soft - evento anual de software empresarial
 
Vista:

Como Importar matriz entre Sub de VBA

Publicado por Hector Hernandez (2 intervenciones) el 08/05/2020 22:19:18
Buenas tardes

Soy un programador lirico de vba, no me dedico a la programación, pero me gusta desarrollar herramientas de trabajo. Y tengo el siguiente problema, quiero un importar la matriz "Melemen" en otro sub, Sub Revisa, pero no se como hacerlo, por lo que me dirijo a este foro, saludos

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
Sub Crea Matriz ()
 
Dim SAPELEM As Range
 
Dim Idele As Integer
Dim Ni As Integer
Dim Nf As Integer
 
Set SAPELEM = Worksheets("DATOS").Range("A3:F1000")
Nelem = SAPELEM.Cells(1,2)
 
ReDim Melemen(Nelem,4) As Variant
 
    For j = 1 To Nelem
 
     Idele = SAPELEM.Cells(9 + j, 2)
     Ni = SAPELEM.Cells(9 + j, 3)
     Nf = SAPELEM.Cells(9 + j, 4)
     Melemen(Idele, 1) = Idele
     Melemen(Idele, 2) = j
     Melemen(Idele, 3) = Ni
     Melemen(Idele, 4) = Nf
    Next
 
End Sub
 
Sub Revisa ( ReDim Melemen ()  As Variant   )
Dim Longi As Double
 
Ni=Melemen(Idele, 3)
Nf=Melemen(Idele, 4)
 
Longi=Nf-Ni
 
End Sub
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
Imágen de perfil de Antoni Masana
Val: 1.134
Oro
Ha mantenido su posición en Visual Basic para Aplicaciones (en relación al último mes)
Gráfica de Visual Basic para Aplicaciones

Como Importar matriz entre Sub de VBA

Publicado por Antoni Masana (498 intervenciones) el 11/05/2020 19:58:39
Te pongo el código con los cambios realizados:

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
Sub Crea Matriz ()
    Dim SAPELEM As Range
    Dim Idele As Integer
    Dim Ni As Integer
    Dim Nf As Integer
 
    Set SAPELEM = Worksheets("DATOS").Range("A3:F1000")
    Nelem = SAPELEM.Cells(1,2)
 
    ReDim Melemen(Nelem,4) As Variant
 
    For j = 1 To Nelem
        Idele = SAPELEM.Cells(9 + j, 2)
        Ni = SAPELEM.Cells(9 + j, 3)
        Nf = SAPELEM.Cells(9 + j, 4)
        Melemen(Idele, 1) = Idele
        Melemen(Idele, 2) = j
        Melemen(Idele, 3) = Ni
        Melemen(Idele, 4) = Nf
    Next
    Call Revisa(Meleme, Idele)        ' <--- Aqui
End Sub
 
Sub Revisa (Meleme, Idele)            ' <--- Aqui
    Dim Longi As Double
    Ni=Melemen(Idele, 3)
    Nf=Melemen(Idele, 4)
    Longi=Nf-Ni
End Sub

Y te pongo un pequeño ejemplo:

1
2
3
4
5
6
7
8
9
10
Sub a1()
    Dim Tabla(2) As String
    Tabla(1) = "Antonio"
    Tabla(2) = "Masana"
    Call a2(Tabla)
End Sub
 
Sub a2(T)
    MsgBox T(1) & " " & T(2)
End Sub

Saludos.
\\//_
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

Como Importar matriz entre Sub de VBA

Publicado por Hector hernandez (2 intervenciones) el 11/05/2020 22:12:06
Saludos foro investigando, ya puedo usar la matriz en otra sub (CalculateA), pero ahora necesito que el resultado de matriz calculada en Sub CalculateA, la pueda usar en la pirmera Sub ( Main() ), agradezco sus comentarios, saludos

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
Sub Main()
 Dim Nc As Integer
 Dim a1 As Double
 Nc = 1000
 a1 = 1.1
 
 ReDim kij(Nc, Nc) As Variant
 ReDim xi(Nc) As Variant
 ReDim v(Nc, Nc) As Variant
 Dim verifica As Double
 For i = 1 To Nc
  For j = 1 To Nc
   kij(i, j) = i * 5 + j
    xi(j) = j + i
  Next j
 Next i
 
  Call CalculateA(Nc, kij, xi, a1)
 
  verifica = v(10, 20) '********no reporta valor
 
  xx = verifca * a1
 
End Sub
Sub CalculateA(Nc As Integer, kij() As Variant, xi() As Variant, a1 As Double)
ReDim v(Nc, Nc) As Variant
Dim a As Long
       a = 0
       For i = 1 To Nc
          For j = 1 To Nc
             a = a + 1
             v(i, j) = a1 * (a + kij(i, j) * xi(i) * xi(j))
          Next j
       Next i
 
End Sub
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