Manejo de Formularios VBA en Excel

Tengo un cuadro en excel de ciertas cosas, en el que para adicionar información utilizo un formulario con unas TextBox, y luego cada celda toma el valor de determinada TextBox, mi pregunta es la siguiente, como hago para que la TextBox me tome el valor de la celda al cargar el formulario pero, que si no se le dan valores a la TextBox, se quede la celda tal y como estaba, pero si si se le da un valor a la TextBox, entonces, se cambie el valor de la celda

1 respuesta

Respuesta
1
Por lo que veo ya tenés una rutina que te vuelca el contenido de los textbox a las celdas, que será algo como esto (puede ser otro evento, como al hacer clic en un botón de comando)
Private Sub TextBox1_Change()
ActiveSheet.Range("a3").Value = TextBox1
End Sub
Lo que querés, es que al activar la hoja o dentro de la macro que abre el form, el textbox tome el valor de la celda, entonces debieras agregar algo así:
Private Sub Worksheet_Activate()
TextBox1.Value = ActiveSheet.Range("a3").Value
End Sub
Si no ingresas nada en ese textbox todo quedará como estaba.
Si te quedan dudas podes pedir una aclaración. Si lo solucionaste.
Hola Elsa, primero que todo, mil gracias por tomarte tu tiempo para responderme, aquí va la cosa, cuando meto la instrucción a la Sub Worksheet Activate tu solución funciona solo cuando cancelo el User Form, te explico. El User Form tiene ocho TextBox y dos CommandButton, uno de Aceptar y Otro de Cancelar, cuando le doy Cancelar, pues simplemente la orden es Unload UserForm, y listo! Ahí sigue con el valor, pero la orden que tengo en Aceptar es la siguiente:
Private Sub CommandButton1_Click()
With Sheets("Estado de Ahorro")
.Range("Incremento_Rentas_por_Cobrar") = "$" & FDatosAhorro1.CRentasxCobrar
.Range("Incremento_Depósitos_y_Exigibilidades") = "$" & FDatosAhorro1.CDepoyExi, etc, etc
Entonces lo que quiero es elaborar una opción para que el usuario no tenga que rellenar los ocho TextBox, porque no necesariamente todas las cuentas cambian, que por ejemplo pase por alto tres y de valor a los otros cinco, como hago para que la macro, cambie los valores de las celdas asociadas a los cinco textbox modificados, pero mantenga imperturbable los valores de las celdas asociadas a los tres textbox que dejaron quietos, porque así como está, los convierte en cero
Y otra cosa, incluyo el "$" & porque necesito que me quede el valor en pesos, si tu conoces una manera más ortodoxa de hacerlo, te agradecería tu colaboración
Mil gracias
Lo que te decía que coloques en la macro Userform Activate. (Yo utilicé Worksheet Activate) te sirve para que te muestre los valores que ya tienen las celdas permitiendo ingresar las modificaciones. Al guardar, si no se ingresó un cambio en el textbox5 por ejemplo, lo que guardará es el mismo valor pero no cero.
Pero lo mejor será guardar los valores en variables, y no mostrarlos (o si) en el form. Luego al aceptar comparará el contenido de las variables con los textbox y moverá a las celdas solamente los valores que se modificaron.
Sería algo así:
Private Sub UserForm_Activate()
Dim uno, dos, tres As Double 'aquí defino todas las variables
Worksheets(2).Select
uno = Range("a1").Value
dos = Range("a2").Value
tres = Range("a3").Value 'repito para las 8 celdas
End Sub
Si quieres que el form además, muestre los valores que ya tienen las celdas, agrega en la rutina las siguientes líneas, antes del End Sub:
textbox1.Value = uno
textbox2.Value = dos
textbox3.Value = tres
Luego en la rutina del botón de comando Aceptar se compara si el valor es el mismo, de no serlo se envía el contenido del textbox.
Private Sub cmdAceptar_Click()
If textbox1.Value <> uno Then
Range("a1").Value = textbox1.Value
End If
If textbox2.Value <> dos Then
Range("a2").Value = textbox2.Value
End If
If textbox3.Value <> tres Then
Range("a3").Value = textbox3.Value
End If
End Sub
Con definir las celdas en la hoja, con formato de moneda solucionas el problema que mencionas.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas