Solución:
.NET nos ha echado a perder 🙂 Su declaración no es válida para VBA.
Solo se puede dar un valor a las constantes al cargar la aplicación. Los declaras así:
Public Const APOSTROPHE_KEYCODE = 222
Aquí hay una declaración de muestra de uno de mis proyectos vba:
Si está buscando algo en el que declare una variable pública y luego desee 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 de trabajo:
Solo para ofrecerte un ángulo diferente.
Creo que no es una buena idea mantener variables públicas entre llamadas a funciones. Cualquier variable que necesite utilizar debe almacenarse en Subs and Functions y pasarse como parámetros. Una vez que el código termina de ejecutarse, no debe esperar que el proyecto VBA mantenga los valores de las variables.
La razón de esto es que hay una gran cantidad de cosas que pueden restablecer inadvertidamente el proyecto VBA mientras se usa el libro de trabajo. Cuando esto sucede, las variables públicas se restablecen a 0.
Si necesita que se almacene un valor fuera de sus subs y funciones, le recomiendo usar una hoja de trabajo oculta con rangos con nombre para cualquier información que deba persistir.
Seguro que lo sabes, pero si es una constante entonces const MyVariable as Integer = 123
de lo contrario, no tendrás 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.