Guardar datos en hoja según selección de combobox

La ayuda que necesito hoy es la siguiente:

Tenga una planilla de calificaciones y deseo llenar los datos de los estudiantes en la base de datos de excel con un formulario, tengo en el formulario aprox. 11 Texbox y un ComboBox del cual quiero seleccionar el curso y que se guarden los datos en la hoja que le corresponde a cada curso.

Tengo el siguiente código que me activa la hoja seleccionada, pero a la hora de guardar los datos no llegan a ninguna, sin embargo el mensaje que me da "Se ha escrito un registro en la base de datos de la institución" al aceptar me dice "Desea añadir otro registro". Lo raro es que no me aparece nada en ninguna hoja.

Quiero que me ayuden a condicionar el código que hice:

Private Sub ComboBox1_Change()
On Error Resume Next
Application.ScreenUpdating = False
'Ir a la hoja
Irhoja = ComboBox1
Sheets(Irhoja).Select
Application.ScreenUpdating = True

End Sub

Private Sub CommandButton1_Click()
Dim LastRow As Object

Set LastRow = Hoja1.Range("A65536").End(xlUp)

LastRow.Offset(1, 0).Value = TextBox1.Text
LastRow.Offset(1, 2).Value = TextBox3.Text
LastRow.Offset(1, 3).Value = TextBox4.Text
LastRow.Offset(1, 4).Value = TextBox5.Text
LastRow.Offset(1, 5).Value = TextBox6.Text
LastRow.Offset(1, 6).Value = TextBox7.Text
LastRow.Offset(1, 7).Value = TextBox8.Text
LastRow.Offset(1, 8).Value = TextBox9.Text
LastRow.Offset(1, 9).Value = TextBox10.Text
LastRow.Offset(1, 10).Value = TextBox11.Text
LastRow.Offset(1, 11).Value = TextBox12.Text
LastRow.Offset(1, 12).Value = TextBox13.Text
LastRow.Offset(1, 13).Value = TextBox14.Text
LastRow.Offset(1, 14).Value = TextBox15.Text

MsgBox "Se ha escrito un registro en la Base de Datos de Institución"

response = MsgBox("¿Desea añadir otro registro?", _
vbYesNo)

If response = vbYes Then
TextBox1.Text = ""
TextBox3.Text = ""
TextBox4.Text = ""
TextBox5.Text = ""
TextBox6.Text = ""
TextBox7.Text = ""
TextBox8.Text = ""
TextBox9.Text = ""
TextBox10.Text = ""
TextBox11.Text = ""
TextBox12.Text = ""
TextBox13.Text = ""
TextBox14.Text = ""
TextBox15.Text = ""
TextBox1.SetFocus

Else
Unload Me
End If

End Sub

Private Sub UserForm_Initialize()

Dim hoja As Worksheet
ComboBox1.Clear
For Each hoja In Worksheets
Mysheet = hoja.Name
ComboBox1.AddItem Mysheet
Next

End Sub

'En modulo tengo:

Sub muestrauserform()
UserForm1.Show
End Sub

Si es posible me puede mandar el nuevo código al correo:

[email protected]

O cualquier otro codigo que considere mejor que mio.

2 Respuestas

Respuesta
1

Se que el post tiene su tiempo pero trato de aplicar el codigo y me arroja error este :

h.Cells(u, i) = Me.Controls("Textbox" & i)

 a que se refiere?  y si no solo tengo texbox sino tambien combo, options etc. este codigo funciona?  no quise abrir otra pregunta ya que es el mismo hilo 

problema solucionado saludos

Respuesta
1

Cambia todo tu código por lo siguiente:

Private Sub ComboBox1_Change()
'Act.Por.Dante Amor
End Sub
'
Private Sub CommandButton1_Click()
'Act.Por.Dante Amor
    For Each h In Sheets
        If ComboBox1 = h.Name Then
            existe = True
            Exit For
        End If
    Next
    '
    If existe = False Then
        MsgBox "La hoja seleccionada en el combo, no existe", vbExclamation
        ComboBox1.SetFocus
        Exit Sub
    End If
    '
    Set h = Sheets(ComboBox1.Value)
    u = h.Range("A" & Rows.Count).End(xlUp).Row + 1
    For i = 1 To 15
        If i <> 2 Then h.Cells(u, i) = Me.Controls("Textbox" & i)
    Next
    '
    If MsgBox("Se ha escrito un registro en la Base de Datos de Institución" _
              & vbCr & vbCr & _
              "¿Desea añadir otro registro?", vbYesNo) = vbYes Then
        For i = 1 To 15
            If i <> 2 Then Me.Controls("Textbox" & i) = ""
        Next
        TextBox1.SetFocus
    Else
        Unload Me
    End If
End Sub
'
Private Sub UserForm_Initialize()
'Act.Por.Dante Amor
    For Each hoja In Worksheets
        ComboBox1.AddItem hoja.Name
    Next
End Sub

Con los cambios que te envié no es necesario cambiarse o seleccionar la hoja, lo que hace esta instrucción es establecer en la variable h el objeto hoja que seleccionaste en el combo. Posteriormente se hace referencia a la variable h:

Set h = Sheets(ComboBox1.Value)
h.Cells(u, i) = Me.Controls("Textbox" & i)


Saludos. Dante Amor

Recuerda valorar la respuesta.

¡Gracias! 

Eres un genio.

Agradezco su ayuda y continué así colaborando que Dios os colma de bendiciones

El código me funciona bien...

Pero tengo un problema...

Cuando me guarda los datos en la base de datos, no busca la ultima fila ocupada sino que escribe los datos en la siguiente fila así se hubiese borrado por el usuario y me deja ese espacio en blanco y continua en la fila siguiente.

Ejemplo:

escribo por primera vez los datos de un estudiante o los guarda en la 3, luego escribo los datos de otro estudiantes y los guarda en la fila 4, pero si borro o elimino los datos de la fila 4 entonces el próximo dato lo guarda en la fila 5 y me deja la fila 4 en blanco; ¿Que puedo hacer en el código para que siempre guarde los datos después de la ultima fila ocupada?

Agradezco ante mano su ayuda y disculpe por que soy novato en esto de programación, quiero aprender...

El código me funciona bien...

Pero tengo un problema...

Cuando me guarda los datos en la base de datos, no busca la ultima fila ocupada sino que escribe los datos en la siguiente fila así se hubiese borrado por el usuario y me deja ese espacio en blanco y continua en la fila siguiente.

Ejemplo:

escribo por primera vez los datos de un estudiante o los guarda en la 3, luego escribo los datos de otro estudiantes y los guarda en la fila 4, pero si borro o elimino los datos de la fila 4 entonces el próximo dato lo guarda en la fila 5 y me deja la fila 4 en blanco; ¿Que puedo hacer en el código para que siempre guarde los datos después de la ultima fila ocupada?

Agradezco ante mano su ayuda y disculpe por que soy novato en esto de programación, quiero aprender...

El código me funciona bien...

Pero tengo un problema...

Cuando me guarda los datos en la base de datos, no busca la ultima fila ocupada sino que escribe los datos en la siguiente fila así se hubiese borrado por el usuario y me deja ese espacio en blanco y continua en la fila siguiente.

Ejemplo:

escribo por primera vez los datos de un estudiante o los guarda en la 3, luego escribo los datos de otro estudiantes y los guarda en la fila 4, pero si borro o elimino los datos de la fila 4 entonces el próximo dato lo guarda en la fila 5 y me deja la fila 4 en blanco; ¿Que puedo hacer en el código para que siempre guarde los datos después de la ultima fila ocupada?

Agradezco ante mano su ayuda y disculpe por que soy novato en esto de programación, quiero aprender...

El código me funciona bien...

Pero tengo un problema...

Cuando me guarda los datos en la base de datos, no busca la ultima fila ocupada sino que escribe los datos en la siguiente fila así se hubiese borrado por el usuario y me deja ese espacio en blanco y continua en la fila siguiente.

Ejemplo:

escribo por primera vez los datos de un estudiante o los guarda en la 3, luego escribo los datos de otro estudiantes y los guarda en la fila 4, pero si borro o elimino los datos de la fila 4 entonces el próximo dato lo guarda en la fila 5 y me deja la fila 4 en blanco; ¿Que puedo hacer en el código para que siempre guarde los datos después de la ultima fila ocupada?

Agradezco ante mano su ayuda y disculpe por que soy novato en esto de programación, quiero aprender...

Tienes que borrar bien los datos de la fila, si dejas un espacio en la celda de la columna A es considerado como un dato.

¡Gracias! 

Correcto, ya comprendo, o sea que debo revisar todas las filas antes de ingresar los datos.

Le agradezco la aclaración. Suerte y que Dios os bendiga. 

Compañero es posible que los datos que guardo con el formulario queden en ordenados alfabéticamente de A - Z, que le debo agregar al código que utilizo.

Disculpe la pregunta pero a medida que soluciono algo me intriga otra cosa sobre el mismo trabajo.

Dios te bendiga.

Con gusto te ayudo con todas tus dudas, podrías crear una pregunta por cada petición que tengas.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas