Ciclo y Userform

Hola expertos, Necesito ayuda con Visual Basic en Excel en 3 puntos importantes:
El primero es que quiero que los textbox enten restringidos a solo números y que cuando se presenta la digitación de una letra u otro carácter aparezca un mensaje de error y se boore el valor del textbox para ser ingresado nuevamente.
Lo otro que quiero hacer es que quiero que cuando se abra el archivo de excel se ejecute inmediatamente el userform que yo quiera.
El tercer punto es que quiero manejar un ciclo para cambiar de celdas, meterle un dato e ir a la siguiente pero no se como hacerlo, no soy programador y entiendo poco del lenguaje de Visual. Gracias de antemano por su atención.

1 Respuesta

Respuesta
1
Por ser tu primer consulta quizás no lo sepas, pero es muy importante para el foro en general y los usuarios, que buscan respuestas aquí, en particular, que las consultas sean separadas por 'temas'. REcordalo por favor para la próxima vez.
Forzar ingreso de nros en textbox:
Cada Textbox debe tener esta rutina, reemplazando el nombre por el que corresponda:
Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
 'Validando ingreso de datos numericos
    If IsNumeric(TextBox1.Text) = False And Len(TextBox1.Text) <> 0 Then
    MsgBox "Ingrese datos numericos"
    TextBox1.Text = ""
    Cancel = True
    End If
End Sub
La 2da parte de la comparación es porque aquí se controla si el control quedó vacío, en este caso no marcará error y continuará.
MOSTRAR UN USERFORM AL ABRIR EL LIBRO:
En el Editor, seleccioná el objeto ThisWorkbook (o Este Libro) y copiá esto, ajustando el nombre de tu UF:
Private Sub Workbook_Open()
UserForm1.Show
End Sub




¿Manejar un ciclo?
Esta no me quedó clara, por favor ingresala nuevamente aclarando un poco más este punto en nueva consulta.
Sdos
Elsa
* Todo lo que necesitas para aprender Macros lo encontrarás aquí
http://aplicaexcel.galeon.com/index.htm
Gracias por responder.
Pues es que quiero que el ciclo de forma automática me escriba en la celda el numero que yo le diga, y que pase a la siguiente y vuelva y haga lo mismo con toro numero que yo le diga. El problema es que no se como manejar ese desplazamiento de celdas para que al solo ejecutarse el ciclo se llenen las celdas con los valores, es decir, cual es el comando para ese movimiento entre celdas.
¿Si fui claro esta vez?
Necesitas controlar el evento WorkSheet_Change de tu hoja, dentro del Editor.
Por ejemplo, la siguiente rutina, cada vez que ingresas un dato en A2 lo mueve a C5, posicionándose nuevamente en A2
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$A$2" Then
Range("C5").Value = Target.Value
Target.Select
End If
End Sub
Espero que el ejemplo te sirva para lograr lo que estás intentando, que no me quedó del todo claro.
No olvides finalizar (fueron 3 consultas) y continúa en una nueva.
No me entendiste, parece que me explique bien, lo que quiero es lograr que la la celda A2 por ejemplo, tenga el valor 10, luego que la celda A3 tenga el valor 10 + es, siendo 10 el valor de la celda anterior y por un valor cualquiera que yo le pongo. Luego la celda A4 tenga el valor 10 + por + por y así sucesivamente. ¿Cómo logro eso?
Con la cantidad de consultas diferentes que se leen, no es fácil 'imaginar' lo que el usuario quiere. Siempre es bueno que la consulta venga desde el inicio con un ejemplo explicado de lo que se quiere obtener
Pruébalo así. El dato se ingresa SIEMPRE en A1 completándose la col A a partir de fila2
Private Sub Worksheet_Change(ByVal Target As Range)
'se controla lo ingresado en A1 y que no esté vacío
If Target.Address = "$A$1" Then
If Target.Value <> "" Then
'se busca cuál es la última fila con datos en col A
    fila = Range("A65536").End(xlUp).Row
'si todavía no hay datos, se guarda el valor en A2, sinó en fila sgte acumulando el valor anterior
    If fila < 2 Then
        Cells(2, 1) = Target.Value
        Else
        Cells(fila + 1, 1) = Cells(fila, 1) + Target.Value
    End If
'se posiciona nuevamente en A1 para seguir ingresando valores
    Target.Select
End If
End If
End Sub

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas