Visual y excel

Experto nuevamente molestándote con mis dudas.
Necesito que me ayudes con lo siguiente. Tengo un formulario en excel en donde se ingresa los datos de trabajadores.
Ahora bien estos datos debo ingresarlos en una de hoja de excel ya creada. Hasta ahí va todo bien todo funciona, ocurre el problema cuando quiero ingresar el segundo trabajador me debería agregarlo en una celda más abajo del primero, pero no es así me reemplaza el primero. Y solo que da el ultimo.
La idea que si yo ingreso 10 trabajadores se vaya agregando uno por una debajo de otro
espero me entiendas y me ayudes.

1 Respuesta

Respuesta
1
Para ello tienes que usar una instuccion para conocer el numero total de filas que tienen escrito algo, para ello ocupa lo siguiente:
Dim totalrows    declara la variable que va a registrar el numero de filas usadas
totalrows = Worksheets("Datos").UsedRange.Rows.Count
"Datos" es el nombre que tengas en la hoja donde se van a escribir los datos de los trabajadores
Y entonces para indicar la posición de la celda donde lo va a mandar pornes
Cells(totalrows + 1, 1).Value = "dato del trabajador"
Private Sub btnAgregar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnAgregar.Click
        Dim oExcelApplication As Excel.Application
        Dim oExcelWorKBook As Excel.Workbook
        Dim oSheets As Excel.Worksheet
        Dim TotalRows As Integer
        'Try
        oExcelApplication = New Excel.Application
        oExcelWorKBook = oExcelApplication.Workbooks.Open("C:\Desarrollo\VB .NET\RRHH y Contabilidad\RRHH_y_Contabilidad\RRHH_Y_CONTABILIDAD.xlsx")
        oSheets = oExcelApplication.Sheets(1)
        oSheets.Select()
        TotalRows = oSheets.UsedRange.Rows.Count
        MsgBox(TotalRows)
        oExcelApplication.Range(TotalRows + 1, 3).Value2 = "Resulto"
        oExcelWorKBook.SaveAs()
        oExcelApplication.Visible = False
        oExcelWorKBook.Close()
        oExcelApplication = Nothing
        oExcelWorKBook = Nothing
        oSheets = Nothing
        'Catch ex As Exception
        '    MsgBox(ex.Message)
        'End Try
        Me.Close()
end sub
Este es el código pero me da error
Mmmm Si me dijeras que error te da, creo que te podría ayudar mejor.
al ponerle el try catch
Me da el siguiente error
Excepción de HRESULT: 0x800A03EC
Espero me puedas ayudar
Prueba haciendo estos cambios en la forma en que abres el archivo de Excel.
Abre el archivo mediante la siguiente instrucción:
Workbooks.Open "C:\Desarrollo\VB .NET\RRHH y Contabilidad\RRHH_y_Contabilidad\RRHH_Y_CONTABILIDAD.xlsx"
Luego debes activar el documento para poder utilizar propiedades de el objeto Cells. Esto se hace mediante la siguiente instrucción:
Workbooks("RRHH y Contabilidad\RRHH_y_Contabilidad\RRHH_Y_CONTABILIDAD.xlsx").Activate
ahora si desea activar un libro específico de ese archivo la instruccion es:
Workbooks("RRHH y Contabilidad\RRHH_y_Contabilidad\RRHH_Y_CONTABILIDAD.xlsx").Worksheet("hoja1").Activate
En hoja1 va el nombre de la hoja donde escribes los datos.
Me arroja otro error que el indice no es válido.
Dim oExcelApplication As Excel.Application
        Dim oExcelWorKBook As Excel.Workbook
        Dim oSheets As Excel.Worksheet
Try
                oExcelApplication = New Excel.Application
                oExcelWorKBook = oExcelApplication.Workbooks.Open(sAppPath & "\doc_imprimir.xlsx")
                oSheets = oExcelApplication.Sheets(2)
                oSheets.Select()
                oExcelApplication.Range("c3").Value2 = Nombre_trabajadorComboBox.Text
oExcelWorKBook.SaveAs()
                oExcelApplication.Visible = False
oExcelWorKBook.Close()
                oExcelApplication = Nothing
                oExcelWorKBook = Nothing
                oSheets = Nothing
            Catch ex As Exception
                MsgBox(ex.Message)
            End Try
            Me.Close()
De esta forma ingresaba datos a un excel y funciona de maravillas quiero hacer lo mismo con la diferencia. Que si ingreso un nuevo valor debe ingresarse debajo del ultimo ej.
En la hora existente en la celda a1 dice ID en b1 nombre y en la c1 die rut
por lo tanto la primera vez que ingrese un dato deberá ingresarse en a2, b2 y c2
si ingreso otro deberá ir en a3, b3, c3.
Saludos
Buscando por ahí y por allá logre hacerlo de esta forma... no se si sera la mejor forma pero me funciono de hecho me revisa si hasta el proveedor existe en el libro...
Este es el código del botón
Private Sub btnAgregar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnAgregar.Click
        Dim oExcelApp As Excel.Application
        Dim oExcelLibro As Excel.Workbook
        Dim oExcelHoja As Excel.Worksheet
        Dim files As Integer
        Try
            oExcelApp = New Excel.Application
            oExcelLibro = oExcelApp.Workbooks.Open("C:\Desarrollo\VB .NET\RRHH y Contabilidad\RRHH_y_Contabilidad\RRHH_Y_CONTABILIDAD.xlsx")
            oExcelHoja = oExcelApp.Worksheets("PROVEEDORES")
            oExcelApp.Visible = False
            If txtNomProveedor.Text = "" Or txtRutProveedor.Text = "" Then
                MsgBox("Debe ingresar todos los datos requeridos", vbEmpty, "Falta de Datos")
            Else
                For files = 3 To 200
                    If oExcelHoja.Range("C" & files).Value Is Nothing Then
                        oExcelHoja.Range("C" & files).Value2 = txtRutProveedor.Text & "-" & txtDVProveedor.Text
                        oExcelHoja.Range("D" & files).Value2 = txtNomProveedor.Text
                        MsgBox("El Proveedor ha sido agregado Satisfactoriamente", MsgBoxStyle.OkOnly, "Ingreso Correcto")
                        Exit For
                    Else
                        If oExcelHoja.Range("C" & files).Value = (txtRutProveedor.Text & "-" & txtDVProveedor.Text) Then
                            MsgBox("El Proveedor ya existe en la base de datos.", vbInformation, "Proveedor Existente")
exit for
                        End If
                    End If
                Next
                oExcelLibro.Save()
                oExcelLibro.Close()
                oExcelApp.Workbooks.Close()
                oExcelApp = Nothing
                oExcelHoja = Nothing
                oExcelLibro = Nothing
                If MsgBox("¿Desea Igresar otro Proveedor?", vbQuestion + vbYesNo, "Continuar") = vbYes Then
                    txtNomProveedor.Clear()
                    txtDVProveedor.Clear()
                    txtRutProveedor.Clear()
                Else
                    Me.Close()
                End If
            End If
        Catch ex As Exception
            MsgBox(ex.Message)
        End Try
    End Sub
Se agradece tu tiempo...
Que bueno que hayas solucionado tu error.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas