Excel - no reconoce una Variable Publica

 
Vista:

no reconoce una Variable Publica

Publicado por Carolina (4 intervenciones) el 10/05/2024 16:23:19
Hola buen dia a todos!! tengo una consulta: Tengo definida en mi proyecto una variable publica, en la seccion ThisWorkbook de esta manera:

Public varp As Integer

Luego en la misma seccion tengo definido el evento open, de esta manera:
Private Sub Workbook_Open()
Dim varchivo_datos As String
Dim vlibro_activo

vlibro_activo = ActiveWorkbook.Name
varchivo_datos = ActiveSheet.Range("AA1") & "\ABITADATOS.xlsm"
If Dir(varchivo_datos) <> "" Then
Workbooks.Open varchivo_datos
Else
MsgBox "ATENCION: NO EXISTE EL ARCHIVO QUE CONTIENE LOS VALORES PARA COTIZAR, EL SISTEMA NO VA A ARROJAR NINGUN VALOR, COMUMIQUESE CON QUIEN CORRESPONDA"
End If
varp = Workbooks("ABITADATOS.xlsm").Sheets("COSTOS_ABITA").Range("G7")
Workbooks(vlibro_activo).Activate
Sheets("PEDIDOS").Select
ActiveSheet.Range("N6").Value = Now
ActiveSheet.Range("B6").Select
End Sub

Luego en la seccion Modulos tengo definido el siguiente proceso:
Sub valorizar_roller(ancho_c, alto_c, fila_modif)
Dim sistema As String
Dim mecanismo As String
Dim tipo_tela As String
Dim tipo_mec As String
Dim nom_tela As String
Dim col_modif As String
Dim vn_mecanismo As String
Dim v_m2 As Double
Dim vmts_tela As Double
Dim valor_tela As Double
Dim valor_ml As Double
Dim costo_fijo As Double
Dim valor_coloc As Double
Dim valor_dolar As Double

v_m2 = ancho_c * alto_c
vmts_tela = v_ancho * (alto_c + 0.2)
tipo_mec = Range("AB" & fila_modif).Value
tipo_tela = Range("AA" & fila_modif).Value
nom_tela = Range("B" & fila_modif).Value

MsgBox "VALOR DE LA VARIABLE PUBLICA VARP = " & varp

If Not tela_cotizada(fila_modif) Then
MsgBox "ATENCION: LA TELA QUE ESTA INTENTANDO PRESUPUESTAR AUN NO TIENE VALOR EN LA LISTA DE PRECIOS, DEBE PONERLE PRECIO UNITARIO MANUALMENTE EN LA COLUMNA N"
Sheets("PEDIDOS").Range("O" & fila_modif).Value = 0
Exit Sub
End If
If Sheets("PEDIDOS").Range("F" & fila_modif) <> "" Then
vn_mecanismo = Sheets("PEDIDOS").Range("F" & fila_modif)
Else
vn_mecanismo = Establecer_mecanismo_cortina(fila_modif)
End If
If vn_mecanismo = "" Then
MsgBox "ATENCION: el ancho ó el alto ingresados son ERRONEOS no coinciden con ninguno de los mecanismos existentes, por favor verifique estos datos para poder cotizar la cortina"
Exit Sub
End If
If Left(Sheets("PEDIDOS").Range("A" & fila_modif).Value, 17) = "ROLLER MOTORIZADA" Then
If vn_mecanismo <> "50" Then
mecanismo = "CORTINA M38"
Else
mecanismo = "CORTINA M50"
End If
Else
mecanismo = "CORTINA A" & vn_mecanismo
End If

If mecanismo <> "" Then
If tipo_mec = "ML ECO" Then
valor_ml = Application.VLookup(mecanismo, Workbooks("ABITADATOS.xlsm").Sheets("PRECIOS").Range("J3:P50"), 3, FALSO) * ancho_c
costo_fijo = Application.VLookup(mecanismo, Workbooks("ABITADATOS.xlsm").Sheets("PRECIOS").Range("J3:P50"), 5, FALSO)
Else
valor_ml = Application.VLookup(mecanismo, Workbooks("ABITADATOS.xlsm").Sheets("PRECIOS").Range("J3:P50"), 2, FALSO) * ancho_c
costo_fijo = Application.VLookup(mecanismo, Workbooks("ABITADATOS.xlsm").Sheets("PRECIOS").Range("J3:P50"), 4, FALSO)
End If
End If
If nom_tela <> "" Then
If tipo_tela = "NORMAL" Then
valor_tela = Application.VLookup(nom_tela, Workbooks("ABITADATOS.xlsm").Sheets("PRECIOS").Range("S3:U22"), 2, FALSO) * (ancho_c * (alto_c + 0.2))
Else
valor_tela = Application.VLookup(nom_tela, Workbooks("ABITADATOS.xlsm").Sheets("PRECIOS").Range("S3:U22"), 3, FALSO) * (ancho_c * (alto_c + 0.2))
End If
Else
valor_tela = 0
End If
If Range("C" & fila_modif).Value = 1 Then
valor_coloc = Application.VLookup("COLOCACION 1", Workbooks("ABITADATOS.xlsm").Sheets("PRECIOS").Range("J3:K50"), 2, FALSO)
Else
valor_coloc = Application.VLookup("COLOCACION X", Workbooks("ABITADATOS.xlsm").Sheets("PRECIOS").Range("J3:K50"), 2, FALSO)
End If
If Sheets("PEDIDOS").Range("F" & fila_modif).Value = "" Then Sheets("PEDIDOS").Range("F" & fila_modif).Value = vn_mecanismo
valor_dolar = Workbooks("ABITADATOS.xlsm").Sheets("PRECIOS").Range("I3").Value
Sheets("PEDIDOS").Range("O" & fila_modif).Value = (valor_ml + costo_fijo + valor_tela + valor_coloc) * valor_dolar
End Sub


Pero acá el msgbox para ver el valor de la variable publica, me dice que varp no tiene valor, no me reconoce el valor de la variable varp definida en la seccion workbook.
Yo necesito que el valor de esa variable esté visible en todos mis modulos (tengo mas procesos definidos en otros modulos).
Bueno muchas gracias si pueden ayudarme!!!! Porque no encuentro donde esta el error, o es que tengo que definir todos los procedimientos en la seccion workbooks? yo quiero saber donde definir la variable publica y que tenga alcance en todos los modulos! Gracias nuevamente !!! Soy nueva en excel
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: 4.908
Oro
Ha mantenido su posición en Excel (en relación al último mes)
Gráfica de Excel

no reconoce una Variable Publica

Publicado por Antoni Masana (2499 intervenciones) el 11/05/2024 15:15:05
Te adjunto el código con los cambios.

Hay varias formas de hacerlo.
La variable pública solo es visible en su módulo.
Se puede usar una celda como variable pública.
Otra opción es el Módulo de Clase este formato no lo conozco por que no lo he usado.

En este caso, utilizo una Función que tiene una parámetro opcional y una variable estática.

1
2
3
4
5
Public Function Varp(Optional ByVal parametro As Variant)
    Static c_Varp As Integer
    If IsNumeric(parametro) Then c_Varp = parametro
    Varp = c_Varp
End Function

Viendo lo que se asigna a la variable Varp la función puede ser más simple

1
2
3
Public Function Varp(Optional ByVal parametro As Variant)
    varp( Workbooks("ABITADATOS.xlsm").Sheets("COSTOS_ABITA").Range("G7"))
End Function


En la sección ThisWorkbook de esta manera:

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
Public varp As Integer
 
Private Sub Workbook_Open()
    Dim varchivo_datos As String, Nulo as Integer
    Dim vlibro_activo
 
    vlibro_activo = ActiveWorkbook.Name
    varchivo_datos = ActiveSheet.Range("AA1") & "\ABITADATOS.xlsm"
    If Dir(varchivo_datos) <> "" Then
        Workbooks.Open varchivo_datos
    Else
        MsgBox "ATENCION: NO EXISTE EL ARCHIVO QUE CONTIENE LOS VALORES PARA COTIZAR, " & _
               "EL SISTEMA NO VA A ARROJAR NINGUN VALOR, COMUMIQUESE CON QUIEN CORRESPONDA"
    End If
 
    ' </> ----------------------------------------------------
    ' </> ---&--- Asigno el valor a la función
    ' </> ----------------------------------------------------
 
    Nulo = varp( Workbooks("ABITADATOS.xlsm").Sheets("COSTOS_ABITA").Range("G7"))
 
   Workbooks(vlibro_activo).Activate
    Sheets("PEDIDOS").Select
    ActiveSheet.Range("N6").Value = Now
    ActiveSheet.Range("B6").Select
End Sub

Luego en la seccion Modulos.

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
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
Public Function Varp(Optional ByVal parametro As Variant)
    Static c_Varp As Integer
    If IsNumeric(parametro) Then c_Varp = parametro
    Varp = c_Varp
End Function
 
Sub valorizar_roller(ancho_c, alto_c, fila_modif)
    Dim sistema As String
    Dim mecanismo As String
    Dim tipo_tela As String
    Dim tipo_mec As String
    Dim nom_tela As String
    Dim col_modif As String
    Dim vn_mecanismo As String
    Dim v_m2 As Double
    Dim vmts_tela As Double
    Dim valor_tela As Double
    Dim valor_ml As Double
    Dim costo_fijo As Double
    Dim valor_coloc As Double
    Dim valor_dolar As Double
 
    v_m2 = ancho_c * alto_c
    vmts_tela = v_ancho * (alto_c + 0.2)
    tipo_mec = Range("AB" & fila_modif).Value
    tipo_tela = Range("AA" & fila_modif).Value
    nom_tela = Range("B" & fila_modif).Value
 
    MsgBox "VALOR DE LA VARIABLE PUBLICA VARP = " & Varp()
 
    If Not tela_cotizada(fila_modif) Then
        MsgBox "ATENCION: LA TELA QUE ESTA INTENTANDO PRESUPUESTAR AUN NO TIENE VALOR EN " & _
               "LA LISTA DE PRECIOS, DEBE PONERLE PRECIO UNITARIO MANUALMENTE EN LA COLUMNA N"
        Sheets("PEDIDOS").Range("O" & fila_modif).Value = 0
        Exit Sub
    End If
 
    If Sheets("PEDIDOS").Range("F" & fila_modif) <> "" Then
        vn_mecanismo = Sheets("PEDIDOS").Range("F" & fila_modif)
    Else
        vn_mecanismo = Establecer_mecanismo_cortina(fila_modif)
    End If
 
    If vn_mecanismo = "" Then
        MsgBox "ATENCION: el ancho ó el alto ingresados son ERRONEOS no coinciden con ninguno de los " & _
               "mecanismos existentes, por favor verifique estos datos para poder cotizar la cortina"
        Exit Sub
    End If
 
    If Left(Sheets("PEDIDOS").Range("A" & fila_modif).Value, 17) = "ROLLER MOTORIZADA" Then
        If vn_mecanismo <> "50" Then
            mecanismo = "CORTINA M38"
        Else
            mecanismo = "CORTINA M50"
        End If
    Else
        mecanismo = "CORTINA A" & vn_mecanismo
    End If
 
    With Workbooks("ABITADATOS.xlsm").Sheets("PRECIOS")
        If mecanismo <> "" Then
            If tipo_mec = "ML ECO" Then
                valor_ml = Application.VLookup(mecanismo, .Range("J3:P50"), 3, FALSO) * ancho_c
                costo_fijo = Application.VLookup(mecanismo, .Range("J3:P50"), 5, FALSO)
            Else
                valor_ml = Application.VLookup(mecanismo, .Range("J3:P50"), 2, FALSO) * ancho_c
                costo_fijo = Application.VLookup(mecanismo, .Range("J3:P50"), 4, FALSO)
            End If
        End If
 
        If nom_tela <> "" Then
            If tipo_tela = "NORMAL" Then
                valor_tela = Application.VLookup(nom_tela, .Range("S3:U22"), 2, FALSO) * (ancho_c * (alto_c + 0.2))
            Else
                valor_tela = Application.VLookup(nom_tela, .Range("S3:U22"), 3, FALSO) * (ancho_c * (alto_c + 0.2))
            End If
        Else
            valor_tela = 0
        End If
 
        If Range("C" & fila_modif).Value = 1 Then
            valor_coloc = Application.VLookup("COLOCACION 1", .Range("J3:K50"), 2, FALSO)
        Else
            valor_coloc = Application.VLookup("COLOCACION X", .Range("J3:K50"), 2, FALSO)
        End If
 
        If Sheets("PEDIDOS").Range("F" & fila_modif).Value = "" Then Sheets("PEDIDOS").Range("F" & fila_modif).Value = vn_mecanismo
    End With
 
    valor_dolar = .Range("I3").Value
    Sheets("PEDIDOS").Range("O" & fila_modif).Value = (valor_ml + costo_fijo + valor_tela + valor_coloc) * valor_dolar
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

no reconoce una Variable Publica

Publicado por Carolina (4 intervenciones) el 13/05/2024 15:54:30
Hola Antoni, UN MILLON DE GRACIAS POR LA RESPUESTA!!!!!
ME QUEDO PERFECTO!
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