2017-05-09 2 views
0

Ich versuche, eine kleine Benutzerformular Anrufliste zu erstellen. Der Benutzer nimmt Details und beim Klicken auf die Schaltfläche wird das angegebene Excel-Blatt mit den Textfeldern ausgefüllt. Ich bin relativ neu in VBA und kann nicht scheinen Spalten in der aktuellen Zeile (die leer sein sollte) mit den angegebenen Textfeldern (zB Spalte A = tb1.text, Spalte b = tb2.text) Ich habe die " leere Zeile finden "funktioniert einwandfrei. Ich habe die fehlgeschlagenen Versuche zum korrekten Auffüllen von Spalten gelöscht, muss aber das gleiche Format beibehalten, das in Visual Studio geschrieben wird.Bestückung Excel mit Texboxen

Private Sub Button1_Click_1(sender As Object, e As EventArgs) Handles btn_submit.Click 
    On Error Resume Next 
    Dim objExcel As New Microsoft.Office.Interop.Excel.Application 
    Dim objWorkbook As Microsoft.Office.Interop.Excel.Workbook 
    Dim objWorksheet As Microsoft.Office.Interop.Excel.Worksheet 
    objWorkbook = objExcel.Workbooks.Open("C:\_Private Data - NO BACKUP\Test OM Sheet.xlsx") 
    objWorksheet = CType(objWorkbook.Worksheets.Item("Sheet1"), Microsoft.Office.Interop.Excel.Worksheet) 

    Dim lastrow As Integer 
    lastrow = objWorksheet.Cells(objWorksheet.Rows.Count, 1).End(Excel.XlDirection.xlUp).Row + 1 
    Dim emptyrow As Integer = lastrow + 0,1 
    objWorksheet.Cells(emptyrow, 0) = tb_date_time.Text 
    objWorksheet.Cells(lastrow, 1) = tb_user_name.Text 

    objWorksheet.Cells(emptyrow, 1) = tb_date_time.Text 
    objWorksheet.Columns.AutoFit() 
    objWorkbook.Save() 
    objWorkbook.Application.DisplayAlerts = False 
    objWorkbook.SaveAs("C:\_Private Data - NO BACKUP\Test OM Sheet Backup.xlsx") 
    objWorkbook.Application.DisplayAlerts = True 
    objExcel.Quit() 


    Call reset_form() 

End Sub 

Antwort

0

Ich habe die

Eigentlich richtig funktioniert „leere Zeile finden“, ich glaube, das ist, wo das Problem ist. Dieser Code:

Dim lastrow As Integer = objWorksheet.Cells.Rows.Count 
Dim emptyrow As Integer = lastrow + 1 

Will 1 + die letzte mögliche Zeile in der Tabelle zurückkehren, die in

objWorksheet.Cells(emptyrow, 1) = tb_date_time.Text 

durch einen Fehler, weil es für eine Zelle Zeilennummer sucht, die nicht existieren.

Versuchen Sie es stattdessen.

Dim lastrow As Integer 
lastrow = objWorksheet.Cells(objWorksheet.Rows.Count,1).End(xlup).Row + 1 
Dim emptyrow As Integer = lastrow + 1 
objWorksheet.Cells(emptyrow, 1) = tb_date_time.Text 

Ich bin nicht gut in VSTO versiert, so dass meine Syntax ein wenig weg sein kann, aber das soll konzeptionell arbeiten.

+0

Vielen Dank, ich werde einen Blick darauf werfen. Es ist chaotisch, das alleine zu machen, also schätze ich die Hilfe. –

+0

Nun, das sagt mir immer, dass xlUp nicht deklariert ist, und schaue mir das auch an. EDIT: Habe diesen Teil {Excel.XlDirection.xlUp} –

0

Nun, es ist wirklich chaotisch, aber das ist, was ich am Ende hatte. Ich bin mir sicher, dass es einen besseren Weg gibt, aber ich bin zum nächsten Teil des Codes übergegangen.

objWorksheet.Cells(lastrow, 1) = tb_date_time.Text 
    objWorksheet.Cells(lastrow, 2) = tb_user_name.Text 
    If rb_bs.Checked = True Then 
     objWorksheet.Cells(lastrow, 3) = rb_bs.Text 
    ElseIf rb_wm.Checked = True Then 
     objWorksheet.Cells(lastrow, 3) = rb_wm.Text 
    ElseIf rb_gw.Checked = True Then 
     objWorksheet.Cells(lastrow, 3) = rb_gw.Text 
    End If 
    objWorksheet.Cells(lastrow, 4) = tb_caller_name.Text 
    objWorksheet.Cells(lastrow, 5) = cb_company.Text 
    objWorksheet.Cells(lastrow, 6) = cb_transfer.Text 
    objWorksheet.Cells(lastrow, 7) = tb_call_notes.Text 
    objWorksheet.Cells(lastrow, 8) = tb_solution.Text 
    If chkb_resolved.Checked = True Then 
     objWorksheet.Cells(lastrow, 9) = chkb_resolved.Text 
    Else 
     objWorksheet.Cells(lastrow, 9) = Text("") 
    End If 
    objWorksheet.Cells(lastrow, 10) = DateTime.Now.ToString()