Como conservo valores de commandbutton

Este es parte de mi código, como ves puse publicas las 3 variables k1 k2 k3, pero cuando activo el commandbutton1 los msgbox me aparece vacío el valor de cada variable. ¿Qué estoy haciendo mal?

Public K1, K2, K3

Private Sub CommandButton12_Click()
Dim K1, K2, K3 As String
K1 = "A"
K2 = "B"
K3 = "C"
MsgBox K1
MsgBox K2
MsgBox K3  'hasta aqui bien

End Sub

Private Sub CommandButton1_Click()
MsgBox K1
MsgBox K2
MsgBox K3
''aca me aparecen vacias las variables k1 k2 k3

End Sub

2 respuestas

Respuesta
2

Oscar, no tengo ni idea de Excel pero por si te sirve

No te muestra nada porque el valor de K1, K2 y K3 se lo das única y exclusivamente cuando pulsas el botón 12, de forma que cuando esa instrucción termina sus valores "desaparecen". Se acabó la película ya puedes tirar la entrada. Por tanto, o bien le das valor como si fuera una función, no declarando variables como estás haciendo o bien, si es tal como has puesto, puedes poner el código como

Private Sub Comando1_Click()
Call Comando12_Click
End Sub

Private Sub Comando12_Click()
Dim K1, K2, K3 As String
K1 = "A"
K2 = "B"
K3 = "C"
MsgBox K1
MsgBox K2
MsgBox K3 'hasta aqui bien

End Sub

De forma que cuando pulses el botón 1 le estás diciendo que ejecute lo que aparece en 12

Pero ya te digo que el Excel me suena a chino.

Gracias, ya voy entendiendo.

Pero y si necesito que conforme voy dándole a otros commandbuton me vaya modificando el valor de k1 k2 y k3 dependiendo del botón pulsado y que me mantenga esttos valores para ser usados en otro botón.

Me explico de otra forma: mi primer botón me asigna valores de k1 k2 y k3, otro botón toma estos valores hace operaciones y me da nuevos valores para k1 k2 y k3, a su vez necesito que use estos nuevos valores de k1 k2 y k3 para otro botón que a su vez cambiara los valores de k1 k2 y k3.

Aprecio su colaboración.

Como te dije el Excel no es lo mío. En Access le pondría un nombre a cada botón como, por ejemplo, A1, A2 y luego usaría

Dim i as integer

Dim ctl as control

 For i=1 to 6

     Set ctl = Controls("A" & i)

Aquí asignaría valores a k1, k2,... en función del botón que estuvieran pulsando

Next i

Pero como te decía, convendría que se lo preguntaras a los expertos en Excel.

Respuesta
2

Prueba con esto

Public K1, K2, K3 As String
Private Sub CommandButton1_Click()
MsgBox K1
MsgBox K2
MsgBox K3  'hasta aqui bien
End Sub
Private Sub CommandButton2_Click()
MsgBox K1
MsgBox K2
MsgBox K3
''aca me aparecen vacias las variables k1 k2 k3
End Sub
Sub valores()
K1 = "A"
K2 = "B"
K3 = "C"
End Sub
Private Sub UserForm_Initialize()
valores
End Sub

gracias de nuevo tengo este otro caso similar:

 mi primer botón me asigna valores de k1 k2 y k3, otro botón toma estos valores, hace operaciones y me da nuevos valores para k1 k2 y k3, a su vez necesito que use estos nuevos valores de k1 k2 y k3 como valores iniciales de otro botón que a su vez cambiara los valores de k1 k2 y k3.

cual recomedaria seria la mejor forma de lograr esto?

Para eso requieres hacer un formulario con 3 labels y en ellos guardar los valores para luego ser leídos por los siguientes combobox

Por ejemplo al darle click en el botón poner valores estos serán guardados en los labels, luego al dar click al segundo botón este multiplicara los labels por 2 y pondrá ahí los resultados, después al dar click en el 3er botón multiplicara los resultados del calculo anterior por 4 y así guardas las variables para usarlas entre commanbutons

Y este es el codigo

Private Sub CommandButton1_Click()
k1 = 1
k2 = 2
k3 = 3
Label1 = k1
Label2 = k2
Label3 = k3
End Sub
Private Sub CommandButton2_Click()
k1 = Label1
k2 = Label2
k3 = Label3
Label1 = k1 * 2
Label2 = k2 * 2
Label3 = k3 * 2
End Sub
Private Sub CommandButton3_Click()
k1 = Label1
k2 = Label2
k3 = Label3
Label1 = k1 * 4
Label2 = k2 * 4
Label3 = k3 * 4
End Sub

Hola, intente aplicar tu código usando las label, pero me sigue pasando igual, cuando activo el commandbutton2 todo me sale cero, las label vacías. Te envío el código en el que puse unos msgbox que uso para control y mostrarte lo que esta pasando. Agradezco tu tiempo y colaboración en ayudarme a descubrir mi error.

Private Sub CommandButton1_Click()
k1 = 1
k2 = 2
k3 = 3
label1 = k1
Label2 = k2
label3 = k3
MsgBox label1
MsgBox Label2
MsgBox label3
End Sub
Private Sub CommandButton2_Click()
k1 = label1
k2 = Label2
k3 = label3
MsgBox k3
MsgBox k2
MsgBox k1
label1 = k1 * 2
Label2 = k2 * 2
label3 = k3 * 2
MsgBox label1
MsgBox Label2
MsgBox label3
End Sub

Eso es porque para que funcione debes cargar los valores con el commandbutton1 o bien con el evento initialize para que se carguen en automático al abrir el archivo, este es el resultado de tu macro, como dije primero di click en el botón 1, luego en el 2

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas