Definir una variable que represente un rango

Se que puedo hacer un procedimiento:
Sub MiRutina(MiRango)
Set MiRango=ThisWorbook.Sheets("Hoja1").Range("C3:H10")
End Sub
y después llamar mediante Call dentro de otro procedimiento a MiRango
Sub OtraRutina()
Call MiRutina(MiRango)
End Sub
Pero cómo puedo hacer que una variable represente el rango de una hoja y la pueda utilizar en todos los módulos de un proyecto sin necesidad de usar Call, tal como se utiliza Public Const
Public Const MiConstante1 = 1962
Sub OtraRutina()
MsgBox MiConstante
End Sub
{"Lat":18.1267652095782,"Lng":-94.4304943084717}

1 respuesta

Respuesta
1
Hice la prueba como sigue
En modulo1 :
Option Explicit
Public Const r = "$A$1:$C$1"  ' le pasamos el rango como string
Y lo utilizo en modulo 2
Option Explicit
Sub SSS()
Dim s As Range
Set s = ActiveSheet.Range(r)  ' utilizamos el string
s.Select
Set s = Nothing ' eliminas la instancia
End Sub
Gracias calvuch
Por tu respuesta
Pero tendría que declarar
Set s = ActiveSheet.Range(r)  ' utilizamos el string
en cada modulo que necesite al rango r
y a fin de cuentas es muy parecido a usar call
como ya lo habia expuesto antes.
Así que pienso que no me he explicado bien
He leído que
Public Property Set
Indica que el procedimiento Property Set
es accesible para todos los demás procedimientos de todos los módulos.
Y Si se usa en un módulo que contiene la instrucción Option Private,
el procedimiento no está disponible fuera del proyecto.
Y que dentro de este puedo declarar una variable como Range
no se si por allí este la solución
se que se hace un modulo de clase y este se hace un objeto que se
puede utilizar en cualquier modulo de un proyecto
yo pensaba que con
Public Set r=$A$1:$C$1
ya podría utlizar a r en cualquier modulo sin declararlo
asi:
Sub UnProced()
r.Value=7
End SUb
Sub OtroProced()
r.Cells(1,2).ColorIndex=8
End Sub
o sea utilzar a r como el objeto r="$A$1:$C$1"
Sin tener que declararlo en cada modulo
A ver yo pensaba que necesitabas declara un rango para utilizarlo en todos los módulos del proyecto, (del mimo libro obvio)
¿Probaste haciendo lo que te sugerí?
He declarado en "un solo modulo"
Public Const r = "$A$1:$C$1"
y luego en el modulo 2 he puesto
Sub UnProced()
  Range(r).Value = 7
End Sub
Y fíjate que asigna el valor lo más bien al rango indicado como constante
en cuanto al sub
Sub OtroProced()
  r.Cells(1,2).ColorIndex=8
End Sub
indica que el objeto no admite la propiedad o metodo, pero
asi
Sub OtroProced()
   Range(r).Borders.ColorIndex = 8
End Sub
No hay problema
Dale una miradita a la semántica tal vez va por allí.
Bye
Lo olvidaba
También puedes probar esto
La otra forma que puedes utilizar es la siguiente
en el evento Workbook_Open del libro
llama la sub iniciar
Private Sub Workbook_Open()
iniciar
End Sub
en un modulo cualquiera declara:
Option Explicit
Public Const r = "$A$1:$C$1"  ' le pasamos el rango como string
Public t As Range
Sub iniciar()
    Set t = Range(r)
End Sub
y ya esta puedes utilizar  t como rango  de esta forma
Sub UnProced()
   t.Value = 7
End Sub
Sub OtroProced()
t.Borders.ColorIndex = 8
End Sub
al cerrar el libro liberas la instancia del objeto t
Private Sub Workbook_WindowDeactivate(ByVal Wn As Window)
   Set t = Nothing
End Sub
No tengo otra forma que ofrecerte.
Probé ambas y funcionan bien, el segundo es ams acotado ya que operas directamente la variable t en este caso con la sintaxis t.value y no range(r). value
bye
Muchas gracias calvuch y Experto,
Si: me puse a pensar en la solución que ambos me dieron
y la verdad para qué buscar un objeto
r = Range("$A$1:$C$1")
Si al declarar la constante r
r="$A$1:$C$1"
Se puede llamar ese objeto con Range así como lo explican
Range(r) y hacer todo lo que quiero con ese objeto en todos los modulo
sus respuestas y ejemplos son sencillos y elegantes
y en la ciencia estas son las solucuiones que perduran
Muchas gracias de nuevo y perdonen mi ignorancia, todo lo que he aprendido de macros en excel ha sido leyendo y es la primera vez que acudo a un foro...
Gracias, sigan con su gran apoyo...

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas