Variable con valor fijo, VBA

Quisiera saber como puedo realizar la siguiente acción:

He definido una función

Private Function a()
a = InputBox("Enter amount", "TodoExpertos", "0.00")
End Function
Sub test()
Worksheets(1).Activate
Range("a1").Value = a
Range("c5").Value = a
End Sub
Sub test2()
Worksheets(2).Activate
Range("b3").Value = a
Range("b6").Value = a
End Sub

"a" para que me capture un valor con un inputbox, pero necesito que dicho valor  se mantenga constante al utilizarla en el siguiente código. El problema que tengo es que cada vez que necesito el valor me muestra nuevamente el inputbox.

Respuesta
1

El pequeño error que tienes es que cada vez que vas a colocar el valor en la celda especificada, llamas a la función a(), te muestro una pequeña modificación para que puedas hacer lo que quieres:

Dim UserConst as String
Public Function a() As String
    a = InputBox("Enter amount", "TodoExpertos", "0.00")
End Function
Sub test()
    Worksheets(1).Activate
    UserConst = a()
    Range("a1").Value = UserConst
    Range("c5").Value = UserConst
End Sub

Estoy declarando una variable nueva tipo cadena UserConst, la función a() la estoy declarando también tipo cadena, estos son detalles minúsculos pero que al momento de correr grandes procesos mejoran el rendimiento.

El cambio importante esta en la línea UserConst = a(), allí estamos llamando a la función a() y estamos guardando su valor en la variable UserConst, esta es la variable que tiene un valor constante y sera copiado en las celdas indicadas.

Espero que esto te sirva y, recuerda puntuar la respuesta.

Muchas gracias por  la pronta repuesta, este codigo funciona correctamente para la macro test. Pero como puedo hacer para que cuando llame la variable a() en la macro Test2 no me pida otra vez el valor, es decir cuando corro test2 me vuelve a mostrar el inputbox para capturar dicho valor.

Disculpa la demora en la respuesta.

La declaración de la variable, hazla fuera de cualquier modulo, de esta forma estará disponible para todos y mantendrá su valor:

Public UserConst As String

Con respecto a los modulos quedan, asi:

Sub test()
    Worksheets(1).Activate
    UserConst = a()
    Range("a1").Value = UserConst
    Range("c5").Value = UserConst
End Sub
Sub test2()
    Worksheets(2).Activate
    Range("b3").Value = UserConst
    Range("b6").Value = UserConst
End Sub

En el macro test, te pide el valor a guardar en la variable publica UserConst a traves de la funcion a(); en el macro test2, ya inserta directamente el valor de la variable, pues esta se mantiene.

Es importante que la declaración de la variable este fuera de cualquier procedimiento.

¡Gracias! Funciona correctamente. Tal vez me pueda ayudar con otra consulta, voy a realizar una nueva pregunta.

Me alegro que te funcione, estaré al pendiente de tu nueva pregunta.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas