VBA como evaluar el valor de una variable a partir de un texto

Tengo un conocimiento nivel intermedio/Alto  en VBA, realizando una solución para un amigo, me encontré con un problema que no he podido encontrarle solución, espero me puedan ayudar

Lo voy a resumir de la manera más sencilla posible

En la celda a1 tengo escrito la palabra VAR1

sub test()

dim VAR1 as String

dim VAR2 as string

VAR1="Hola Mundo"

VAR2=FUNCION_QUE_NECESITO(range("a1").value)

' Necesito que el resultado de VAR2, sea Hola Mundo, es decir que busque el valor que esta guardado ' en la variable cuyo nombre esta escrito en la celda a1.

end sub

Respuesta
1

No creo que la sintaxis de VBA admita referenciar una variable mediante el valor de otra variable. Hasta donde yo sé, esto no es posible (aunque está claro que podría estar equivocado).

Si he entendido el problema, una posible solución sería que VAR1 fuese un rango con nombre en lugar de una variable de cadena. Surge un problema porque Excel devuelve un error si se intenta ponerle el nombre VAR1 a un rango con nombre, dado que desde hace varias versiones de Excel hay una celda que realmente se llama VAR1. Por lo tanto, en vez de VAR1 y VAR2 he utilizado Variable1 y Variable2:

Public Sub test()
    Dim Variable2 As String
    ThisWorkbook.Names.Add Name:="Variable1", RefersToR1C1:="=""Hola mundo"""
    Variable2 = Cadena_y_Largo(Evaluate(ThisWorkbook.Names(ThisWorkbook.Worksheets("Hoja1").[A1].Value).RefersTo))
    MsgBox Variable2
End Sub
Public Function Cadena_y_Largo(sCadena As String) As String
    Cadena_y_Largo = sCadena & ": " & CStr(Len(sCadena))
End Function

El sub le pasa a la función el valor que esté almacenado en el rango con nombre que se llame como el contenido de Hoja1!A1 (en este caso, "Hola mundo", puesto que A1=Variable1). La función lo único que hace es devolver la cadena que se le ha pasado como argumento y su longitud.

Saludos_

2 respuestas más de otros expertos

Respuesta
1

No entiendo... si ya le estás declarando el valor a una variable, ¿para qué quieres que la otra la cargue, no es mejor dejarla así? O bien, si lo que necesitas es que en 'a1' se ponga el valor que almacenaste... igual te pongo ambas

Sub test()
'
Dim VAR1 As String
Dim VAR2 As String
'
VAR1 = "Hola Mundo"
VAR2 = VAR1
' segunda opción
Range("a1").Value = VAR1
VAR2 = Range("a1").Value
'
End Sub
Respuesta
1

Coincido con jrgces, en VBA no puedes hacer referencia a una variable con el nombre de la variable, mientras que en otros lenguajes si es posible.

Siguiendo con tu ejemplo:

Es decir esto:

VAR2=range("a1").value

Te va a dar como resultado esto:

VAR2="var1"


Pero en VBA existen los array, colections y dictionary.

VAR2=FUNCION_QUE_NECESITO(range("a1").value)

Te pongo un ejemplo utilizando Dictionary:

Sub EvaluarVariable()
  Dim var1 As String
  Dim var2 As String
  Dim dic As Object
  Set dic = CreateObject("Scripting.Dictionary")
  var1 = "Hola Mundo"
  dic("var1") = var1
  var2 = dic(Range("A1").Value)
End Sub

El resultado en var2 es "Hola Mundo"

Más sobre dictionary:

https://excelmacromastery.com/vba-dictionary/ 

VAR2=FUNCION_QUE_NECESITO(range("a1").value)

También puedes llenar el dictionary con el valor de la celda A1:

Sub EvaluarVariable()
  Dim var1 As String
  Dim var2 As String
  Dim dic As Object
  Set dic = CreateObject("Scripting.Dictionary")
  var1 = "Hola Mundo"
  dic(Range("A1").Value) = var1
  var2 = dic(Range("A1").Value)
End Sub

El resultado en var2 = "Hola Mundo"

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas