Enviar datos de formulario vba a hojas diferentes, según categoría seleccionada en comboBox en formulario.

De nuevo a toda la comunidad de esta gran red de expertos, de nuevo les consulto por un problema que tengo actualmente.

Tengo un formulario en vba excel, el cual me sirve alimentar una hoja de excel la cual me sirve como base de datos. Hasta esto todo funciona excelente. Ahora lo que busco es que en el formulario tengo un combobox el cual lo tengo para asignar unas categorías especificas. Entonces quiero que al seleccionar una categoría del combobox, según sea la categoría seleccionada por decir seleccionan la categoría, de comestibles, entonces al dar guardar esa alta del formulario me la guarde en una hoja que se llame por la categoría seleccionada y me la guarde también en el consecutivo de la base de datos que se maneja actualmente.

2 respuestas

Respuesta
2

   H  o  l a:

Te anexo el código

Private Sub CommandButton1_Click()
'Por.Dante Amor
'Guardar datos
    If ComboBox1 = "" Or ComboBox1.ListIndex = -1 Then
        MsgBox "Selecciona una hoja"
        Exit Sub
    End If
    '
    If MsgBox("Son correctos los datos?" + Chr(13) + "Desea proceder?", vbOKCancel) <> vbOK Then Exit Sub
    'Envía los datos a la hoja seleccionada
    Call AHoja(ComboBox1.Value)
    Call AHoja(Hoja3.Name)
    Call LimpiarControles
    Call determinaFolioNuevo
    Me.Label13.Caption = folioNuevo
End Sub
'
Sub AHoja(hoja)
'Enviar datos a la hoja
    Final = Sheets(hoja).Range("A" & Rows.Count).End(xlUp).Row + 1
    Sheets(hoja).Cells(Final, 1) = Me.Label13.Caption
    Sheets(hoja).Cells(Final, 2) = Me.txt_numerofac
    Sheets(hoja).Cells(Final, 3) = Me.txt_descripcion
    Sheets(hoja).Cells(Final, 4) = Me.ComboBox1
    Sheets(hoja).Cells(Final, 5) = Me.Txt_color
    Sheets(hoja).Cells(Final, 6) = Me.Txtncalendario
    Sheets(hoja).Cells(Final, 7) = Me.txt_serie
    Sheets(hoja).Cells(Final, 8) = Me.txt_marca
    Sheets(hoja).Cells(Final, 9) = Me.txtfecha
    Sheets(hoja).Cells(Final, 10) = Me.txt_CostoUnitario
    Sheets(hoja).Cells(Final, 11) = Me.txt_PrecioVenta
    Sheets(hoja).Cells(Final, 12) = Hoja8.Range("G1")
End Sub
'
Sub LimpiarControles()
    MsgBox Prompt:="Se grabó el registro con el folio " & Me.Label13.Caption, Title:="RegistroGuardado"
    'Limpia los controles
    Me.txt_descripcion = ""
    Me.Txtncalendario = ""
    Me.txt_CostoUnitario = ""
    Me.txt_PrecioVenta = ""
    Me.Txt_color = ""
    Me.txt_serie = ""
    Me.txt_marca = ""
    Me.txtfecha = ""
    Me.txt_numerofac = ""
    Me.ComboBox1 = ""
End Sub
'
Private Sub UserForm_Activate()
    For Each h In Sheets
        ComboBox1.AddItem h.Name
    Next
End Sub
'S aludos. Dante Amor. Recuerda valorar la respuesta. G racias
Respuesta
1

Jhone

En el evento Initialize de el userform
   For i = 1 To Sheets.Count
ComboBox1.AddItem (Sheets(i).Name)
Next i
ComboBox1.ListIndex = 0
Estos te carga las hojas creadas en tu libros

En el evento change del combobox

Sheets(ComboBox1.Value).Select

En el botón de guardar los datos

Aquí tu macro pegar los datos más abajo copiar la intrusiones de copiar en la hoja seleccionada

Hola amigo entiendo que el código carga las hojas en un combobox, ¿entonces se tendría que seleccionar en que hoja se copiaría la información es correcto? Y al darle en el botón guardar manda los datos a la hoja seleccionada en el combo box. . ya aplique el código pero no entendí como hacer para que se guarde en la hoja que se selecciono desde el código que me proporcionaste yo mando la información al dar guardar a una hoja con este código.

 'Determina el final del listado de productos
        For fila = 1 To 9000
            If Hoja2.Cells(fila, 2) = "" Then
                Final = fila
                Exit For
            End If
        Next
      If MsgBox("Son correctos los datos?" + Chr(13) + "Desea proceder?", vbOKCancel) = vbOK Then
                'Envía los datos a la hoja de productos
                Hoja2.Cells(Final, 1) = Me.Label13.Caption
                Hoja2.Cells(Final, 2) = Me.txt_numerofac
                Hoja2.Cells(Final, 3) = Me.txt_descripcion
                Hoja2.Cells(Final, 4) = Me.ComboBox1
                Hoja2.Cells(Final, 5) = Me.Txt_color
                Hoja2.Cells(Final, 6) = Me.Txtncalendario
                Hoja2.Cells(Final, 7) = Me.txt_serie
                Hoja2.Cells(Final, 8) = Me.txt_marca
                Hoja2.Cells(Final, 9) = Me.txtfecha
                Hoja2.Cells(Final, 10) = Me.txt_CostoUnitario
                Hoja2.Cells(Final, 11) = Me.txt_PrecioVenta
                Hoja2.Cells(Final, 12) = Hoja8.Range("G1")
                'Envía los datos a la hoja de existencias
                   For fila = 1 To 9000
            If Hoja3.Cells(fila, 1) = "" Then
                Final = fila
                Exit For
            End If
        Next
                Hoja3.Cells(Final, 1) = Me.Label13.Caption
                Hoja3.Cells(Final, 2) = Me.txt_numerofac
                Hoja3.Cells(Final, 3) = Me.txt_descripcion
                Hoja3.Cells(Final, 4) = Me.ComboBox1
                Hoja3.Cells(Final, 5) = Me.Txt_color
                Hoja3.Cells(Final, 6) = Me.Txtncalendario
                Hoja3.Cells(Final, 7) = Me.txt_serie
                Hoja3.Cells(Final, 8) = Me.txt_marca
                Hoja3.Cells(Final, 9) = Me.txtfecha
                Hoja3.Cells(Final, 10) = Me.txt_CostoUnitario
                Hoja3.Cells(Final, 11) = Me.txt_PrecioVenta
                Hoja3.Cells(Final, 12) = Hoja8.Range("G1")
                ' MessageBox al usuario con el folio grabado
                MsgBox Prompt:="Se grabó el registro con el folio " & Me.Label13.Caption, Title:="RegistroGuardado"
                'Limpia los controles
                Me.txt_descripcion = ""
                Me.Txtncalendario = ""
                Me.txt_CostoUnitario = ""
                Me.txt_PrecioVenta = ""
                Me.Txt_color = ""
                Me.txt_serie = ""
                Me.txt_marca = ""
                Me.txtfecha = ""
                Me.txt_numerofac = ""
                Me.ComboBox1 = ""
                Call determinaFolioNuevo
                Me.Label13.Caption = folioNuevo
            Else
                Exit Sub
    End If
End Sub

Ahora Con la opcion que tu me proporcionas puede que tambien se copie a la hoja donde actualmente se manda los datos y a la hoja que seleccione en el combo box

La sintaxis para copier los datos en la hoja seleciondad

ActiveSheet.Cells(Final, 1) = Me.Label13.Caption

en ves de

Hoja2.Cells(Final, 1) = Me.Label13.Caption

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas