Entrada de datos con un formulario

Tengo un excel con un macro para entrar los datos desde un formulario. Desde el formulario entro los datos a la hoja, que va variando, que indico en el formulario. El problema es que es que los datos los inserta en la primera fila vacía y las filas no están del todo vacías ya que tengo unas fórmulas que calculan en función de lo que salga en las celdas vacías. Si necesitan más les puedo pasar el macro que tengo.

1 Respuesta

Respuesta
1

No está claro lo que comentás respecto a que las filas están todas vacias, pero no del todo vacia... si podés aclarar un poco más eso sería ideal. No entiendo si lo que querés es buscar poner la información en otro lado o si querés que el formulario no ponga los datos si no está completo

Hola primero gracias por contestarme. En mi excel tengo varias hojas y cada una de ellas es un grupo de clientes. Con el formulario entro los datos de mis clientes, este formulario me va guardando los datos en la hoja que le digo, El macro me busca la primera fila vacía de la hoja que le indico para ir introduciendo los clientes. Lo que pasa en que en cada hoja tengo celdas que me calcula unas operaciones al rellenar las que introduzco con el formulario y claro la fila ya no es vacía del todo.

Es decir del A hasta E lo entro con el formulario pero de F hasta I solo tengo fórmulas (la celda esta en blanco hasta que relleno de la A a la E).

Gracias de nuevo.

Ok, ahora entendí como funciona tu macro, pero no entiendo cual es el problema que tenés. Antes de seguir un par de preguntas:

1. Es un formulario "estándar" del Excel, ¿o es un formulario que creaste vos?

2. ¿Me podés pasar el código que usas para buscar la primer celda vacia?

Hola de nuevo el formulario lo cree yo viendo cosas por internet, en ella solo salia una introduccion desde el formulario pero si lo insertarlo en la hoja que prefiero. El problema es que empieza a poner los datos en la fila que ya no tengo las formulas. Gracias y un saludo.

Private Sub CommandButton1_Click()
    Dim primeraFilaVacia As Long
    Dim CeldaACambiar As String
    primeraFilaVacia = ObtenerFilaVacia(Sheets(ComboBox1.BoundValue))
    CeldaACambiar = "B" & CStr(primeraFilaVacia) & ":B" & CStr(primeraFilaVacia)
    Sheets(ComboBox1.Value).Range(CeldaACambiar).Value = TextBox1.Text
    CeldaACambiar = "C" & CStr(primeraFilaVacia) & ":C" & CStr(primeraFilaVacia)
    Sheets(ComboBox1.Value).Range(CeldaACambiar).Value = TextBox2.Text
    CeldaACambiar = "D" & CStr(primeraFilaVacia) & ":D" & CStr(primeraFilaVacia)
    Sheets(ComboBox1.Value).Range(CeldaACambiar).Value = TextBox3.Text
    CeldaACambiar = "E" & CStr(primeraFilaVacia) & ":E" & CStr(primeraFilaVacia)
    Sheets(ComboBox1.Value).Range(CeldaACambiar).Value = TextBox4.Text
End Sub
Function ObtenerFilaVacia(ws As Worksheet) As Long
    Dim rw As Range
    For Each rw In ws.UsedRange.Rows
        On Error Resume Next
        If ws.Range(rw.Address).SpecialCells(xlCellTypeBlanks).Address Then
        ObtenerFilaVacia = rw.Row + 1
    End If
    Next
    If ObtenerFilaVacia = 0 Then
        ObtenerFilaVacia = 1
    End If
End Function
Private Sub UserForm_initialize()
    Me.BackColor = RGB(0, 150, 400)
    For i = 1 To Sheets.Count
        ComboBox1.AddItem (Sheets(i).Name)
    Next i
    ComboBox1.ListIndex = 0
End Sub

Depende como tengas los datos, creo que podés cambiar "bastante" las macros para hacerlas más eficientes en su búsqueda. Supongo que tu base de datos lo tenés en la hoja como si fuese una tabla, donde en la fila 1 están los títulos, y a partir de la fila 2 ya están todos los datos. Si es así, te sugiero que cambies la función obtenerFilaVacia por la siguiente (asumo que siempre tenés datos en la columna B, por lo que dice el otro código)

Function ObtenerFilaVacia(ws As Worksheet) As Long
  ObtenerFilaVacia = Cells(1000000, 2).End(xlUp).Row + 1
End Function

Como ves, la función es muy simple así que creo que lo podés poner directo en el código principal

Y te cambio además el procedimiento del bóton para que sea un poco más sencillo todo el archivo

Private Sub CommandButton1_Click()
Dim primeraFilaVacia As Long
Dim CeldaACambiar As String
   primeraFilaVacia = obtenerFilaVacia(Sheets(ComboBox1.BoundValue))
   With Sheets(ComboBox1.Value)
      .Cells(primeraFilaVacia, 2).Value = TextBox1.Text     'columna B
      .Cells(primeraFilaVacia, 3).Value = TextBox2.Text     'columna C
      .Cells(primeraFilaVacia, 4).Value = TextBox3.Text     'columna D
      .Cells(primeraFilaVacia, 5).Value = TextBox4.Text     'columna E
   End With
   'a partir de aquí podrías poner las fórmulas, así las sacás de la hoja y esperás directamente a que te ingresen datos
End Sub

el último comentario es justamente para que simplifiques las hojas de la base y saqués todas las fórmulas si no tienen nada, y recién escribás la fórmula cuando ingresás datos. Cualquier duda avisame y lo aclaramos un poco más.

Hola Gustavo, perdona el retraso pero hasta ahora no lo he podido ver, me da error en la parte de " .Cells(primeraFilaVacia, 2) ... .

¿Después de estas filas yo tengo que introducir algo más?

En el punto donde te está dando error, pueden pasar 2 cosas:

1. Que no exista la hoja

2. Que no exista la celda

Para esto verificá cuanto valen las variables ComboBox1.Value y primeraFilaVacia (en la ventana de inmediato, poné directamente

? primeraFilaVacia, ComboBox1.Value

Para ver que valores tienen

Luego de esto comenta que te da para ver como seguimos

Hola Gustavo, no se mucho de vba todo lo estoy haciendo buscando por internet, no se como mirar el valor que tiene. He hecho esto, selecciono primeraFilaVacia le doy a la pestaña depuración y elijo inspección rápida, y me sale " Valor <fuera de contexto>" y el otro también.

Te explico en mi excel tendré unas 40 hojas todas iguales, cada hoja es un grupo de niños que hacen natación dependiendo del día y la hora. En cada hoja tendré unas 12 columnas de la B a la G (nombre, apellido, fecha de nacimiento, tipo de pago, descuento, preinscripción), estas columnas las rellenare con el formulario que estoy elaborando, y de la H a la L saldrá el precio del curso y lo que pagan por trimestre.

Los datos los empiezo a introducir desde la fila 3.

En el formulario pondré los datos del niño y en que hoja quiero que la inserte.

Si podés compartirme el archivo, mi mail es gfellayARROBAyahoo.com

que lo miro y te digo...

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas