Estoy creando variables públicas en mi programa para usarlas en varios subs del módulo.
Public c As Range, wsSrc As Worksheet, wsDest As Worksheet, cDest As RangeSin embargo, también quiero que estas variables tengan el siguiente valor en toda la función
Set wsSrc = Workbooks("SourceBook").Worksheets("SourceSheet") Set wsDest = Workbooks("DestBook").Worksheets("DestSheet")¿Hay alguna manera de que pueda configurarlos y que sus valores se trasladen a toda la función? También para c y cDest, los estoy cambiando en las funciones, por lo que no quiero que se definan globalmente. Solo wsSRC y wsDest . ¿Las variables en VBA son inmutables?
Esta es una cuestión de alcance. Para usar variables en un módulo, no es necesario configurarlas como públicas: Public se usa para hacer que las variables estén disponibles para otros módulos.
En este caso, solo necesita declarar variables fuera de la función.
'Module begining Dim wsSrc As Worksheet, wsDest As Worksheet Function f1 Dim c As Range, cDest As Range '... wsSrc and wsDest are acessible, eg: Set c = wsSrc.Columns(2).Find(What:="Commercial Income", LookIn:=xlValues, _ LookAt:=xlPart, MatchCase:=False) End Function Function f2 '... wsSrc and wsDest are also acessible here End FunctionSin embargo, para evitar problemas de inicialización, puede usarlos como propiedades, por lo que cada vez que se llaman, el valor se devuelve correctamente:
'Module begining Property Get wsSrc As Worksheet Set wsSrc = Workbooks("SourceBook").Worksheets("SourceSheet") End Property Property Get wsSrc As Worksheet Set wsDest = Workbooks("DestBook").Worksheets("DestSheet") End Property Function f1 Dim c As Range, cDest As Range '... wsSrc and wsDest are acessible End Function Function f2 '... wsSrc and wsDest are also acessible here End Function