¿Como ordenar datos alfabéticamente extraídos con un formulario en excel?

Deseo guardar datos extraídos con un formulario en excel, pero que automáticamente queden ordenados alfabéticamente en la base de datos, este es el código que tengo pero me los guarda en desorden:

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

Que le puedo agregar a este código.

1 Respuesta

Respuesta
1

Te anexo el código del commandbutton

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
    '
    Application.ScreenUpdating = False
    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
    '
    With h.Sort
        .SortFields.Clear: .SortFields.Add Key:=h.Range("A2:A" & u)
        .SetRange h.Range("A1:O" & u): .Header = xlYes: .Apply
    End With
    '
    Application.ScreenUpdating = True
    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

Solamente modifiqué este código, los otros eventos se quedan igual.


Saludos. Dante Amor

Recuerda valorar la respuesta.

El código funciona igual que el anterior, es decir, no me ordena los registros en la base de datos, me imagino falta algo. Ayúdeme.

Gracias

La macro ordena por la columna "A".

¿Por cuál columna quieres que ordene? ¿Y cómo quieres que ordene de mayor a menor o de menor a mayor?

Tienes que poner la información completa de lo que quieres, de lo contrario no podré saber cómo hacer la macro.

Este es el código para ordenar:

With h.Sort        .SortFields.Clear: .SortFields.Add Key:=h.Range("A2:A" & u)        .SetRange h.Range("A1:O" & u): .Header = xlYes: .Apply    End With

Si ya tienes los datos, cambia la macro, si necesitas que te ayude a cambiar el código tienes que enviar toda la información relevante.

¿También tienes que decir en qué fila empiezan tus datos y si tienes encabezados en cuál fila están?

Todo eso es necesario para ordenar.

Si tengo encabezado y empiezo a llenar los datos desde la fila A3

esta es la base de datos:

  A             B                           C                                         D

SEDE  - CURSO - APELLIDOS Y NOMBRES - IDENTIFICACIÓN 

Quiero que se orden por la columna C desde la fila 3

La observación que me envió fue muy buena pero empieza ordenar los datos desde la fila 4 y yo quiero que sea a partir de la fila 3, si los ordenara desde la fila 3 no tendría problema, por que solo cambiaba la ubicación de los campos, es decir, cuadraba el campo APELLIDOS Y NOMBRES en la columna A y listo.

Agradezco su colaboración.

Cambia en la macro esto:

With h.Sort        .SortFields.Clear: .SortFields.Add Key:=h.Range("A2:A" & u)        .SetRange h.Range("A1:O" & u): .Header = xlYes: .Apply    End With

Por esto:

    With h.Sort
        .SortFields.Clear: .SortFields.Add Key:=h.Range("C3:C" & u)
        .SetRange h.Range("A2:O" & u): .Header = xlYes: .Apply
    End With

Saludos.Dante Amor

Recuerda cambiar la valoración de la respuesta.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas