vba - valor - variables en visual basic
¿Es posible declarar una variable pública en vba y asignar un valor predeterminado? (8)
.NET nos ha echado a perder :) Su declaración no es válida para VBA.
Solo las constantes pueden recibir un valor en la carga de la aplicación. Usted los declara así:
Public Const APOSTROPHE_KEYCODE = 222
Aquí hay una declaración de muestra de uno de mis proyectos vba:
Si está buscando algo donde declare una variable pública y luego quiera inicializar su valor, debe crear un sub Workbook_Open y realizar su inicialización allí. Ejemplo:
Private Sub Workbook_Open()
Dim iAnswer As Integer
InitializeListSheetDataColumns_S
HideAllMonths_S
If sheetSetupInfo.Range("D6").Value = "Enter Facility Name" Then
iAnswer = MsgBox("It appears you have not yet set up this workbook. Would you like to do so now?", vbYesNo)
If iAnswer = vbYes Then
sheetSetupInfo.Activate
sheetSetupInfo.Range("D6").Select
Exit Sub
End If
End If
Application.Calculation = xlCalculationAutomatic
sheetGeneralInfo.Activate
Load frmInfoSheet
frmInfoSheet.Show
End Sub
Asegúrese de declarar el sub en el Objeto del libro en sí:
Quiero hacer esto pero no compilará:
Public MyVariable as Integer = 123
¿Cuál es la mejor manera de lograr esto?
Claro que lo sabes, pero si es una constante, entonces const MyVariable as Integer = 123
contrario, no tienes suerte; a la variable se le debe asignar un valor inicial en otro lugar.
Tú podrías:
public property get myIntegerThing() as integer
myIntegerThing= 123
end property
En un módulo de clase, créelo globalmente;
public cMyStuff as new MyStuffClass
Entonces cMyStuff.myIntegerThing
está disponible de inmediato.
Como se dijo anteriormente, para declarar variables accesibles globales puede hacerlo fuera de las funciones precedidas con la palabra clave pública.
Y, dado que la afectación NO ESTÁ PERMITIDA fuera de los procedimientos, puede, por ejemplo, crear un sub llamado InitGlobals que inicialice sus variables públicas, luego simplemente llame a esta subrutina al comienzo de sus declaraciones
Aquí hay un ejemplo de esto:
Public Coordinates(3) as Double
Public Heat as double
Public Weight as double
Sub InitGlobals()
Coordinates(1)=10.5
Coordinates(2)=22.54
Coordinates(3)=-100.5
Heat=25.5
Weight=70
End Sub
Sub MyWorkSGoesHere()
Call InitGlobals
''Now you can do your work using your global variables initialized as you wanted them to be.
End Sub
Esto es lo que hago cuando necesito constantes globales inicializadas:
1. Agregue un módulo llamado Globals
2. Agregue propiedades como esta en el módulo Globals
:
Property Get PSIStartRow() As Integer
PSIStartRow = Sheets("FOB Prices").Range("F1").Value
End Property
Property Get PSIStartCell() As String
PSIStartCell = "B" & PSIStartRow
End Property
Ha pasado bastante tiempo, pero esto puede satisfacerte:
Public MyVariable as Integer: MyVariable = 123
Es un poco feo, ya que tienes que volver a escribir el nombre de la variable, pero está en una línea.
Ha pasado un tiempo, pero creo que va a ser:
Public MyVariable as Integer
MyVariable = 123
Puede definir la variable en Declaraciones generales y luego inicializarla en el primer evento que se active en su entorno.
Alternativamente, podría crearse una clase con las propiedades relevantes e inicializarlas en el método Initialise
Solo para ofrecerte un ángulo diferente -
Encuentro que no es una buena idea mantener variables públicas entre llamadas a funciones. Todas las variables que necesite utilizar deben almacenarse en Subs y funciones y pasarse como parámetros. Una vez que el código se ejecuta, no debe esperar que el Proyecto VBA mantenga los valores de las variables.
La razón de esto es que solo hay una gran cantidad de cosas que pueden reiniciar inadvertidamente el Proyecto VBA mientras se usa el libro de trabajo. Cuando esto sucede, cualquier variable pública se restablece a 0.
Si necesita que se almacene un valor fuera de sus subs y funciones, le recomiendo utilizar una hoja de cálculo oculta con rangos con nombre para cualquier información que deba persistir.