mit VB Excel Tabelle füllen

  • VB.NET

Es gibt 12 Antworten in diesem Thema. Der letzte Beitrag () ist von schnorklunder.

    mit VB Excel Tabelle füllen

    Hallo Leute,

    ich habe folgenden Ausgangssituation:

    3 Textboxen + 1 Button

    Aufgabe: Inhalt der Textfelder in vorhandene Excel Datei eintragen

    Problem:
    Durch meinen Ansatz werden stets die selben Felder gefüllt, es soll nach jedem Klick allerdings jeweils die nächsten Zellen beschrieben werden

    Hier mein Code:

    VB.NET-Quellcode

    1. Public Class Form1
    2. Private Sub cmdButton1_Click(sender As System.Object, e As System.EventArgs) Handles cmdButton1.Click
    3. Dim exclApp As Object 'As Application
    4. Dim Datei As Object 'As Workbook
    5. Dim Blatt As Object 'As Worksheet
    6. exclApp = CreateObject("Excel.Application")
    7. With exclApp
    8. .Visible = False
    9. Datei = .Workbooks.Open("C:\Users\Lappi-Schnork\Desktop\Projekt - MA-Excel\Excel mit VB bearbeiten.xlsx")
    10. Blatt = Datei.Worksheets("Betriebsmittelliste")
    11. Blatt.Range("A4").Value = txtBox1.Text
    12. Blatt.Range("B4").Value = txtBox2.Text
    13. Blatt.Range("C4").Value = txtBox3.Text
    14. Datei.close(True)
    15. .quit()
    16. End With
    17. End Sub
    18. End Class


    Suchfunktion und MSDN habe ich bereits durchforstet und nichts passendes gefunden.
    Ich muss irgendwie von dem festen Teil Blatt.Range("A4") weg, aber meine beschränkten VB-Kenntnisse lassen keine flexible Gestaltung zu (müsste ja in der Art Blatt.Range("A4+i") sein)

    Bin für jede Hilfe dankbar und für alle Fragen zum Problem offen.

    Beste Grüße

    Stefan
    Wenn Du im Forum (Hauptseite) nach Excel Tabelle suchst, bekommst Du:
    Suchergebnisse
    Suchergebnisse 1-30 von insgesamt 734 für »Excel tabelle«.
    Diese Suchbegriffe wurden hervorgehoben: Excel tabelle
    Da findest Du ganz bestimmt was richtiges für Dich. :thumbsup:
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Hallo,

    wie bereits erwähnt, hat mir bisher kein Thread weitergeholfen.
    Ich habe z.b. einen ähnlichen Ansatz hier gefunden:

    HTML-Quellcode

    1. http://www.vb-paradise.de/programmieren/hauptforum/11778-hilfe-excel-mit-vb-08/#post63615


    In meinem Code habe ich versucht, dies umzusetzen, siehe wie folgt:

    VB.NET-Quellcode

    1. Imports Microsoft.Office.Interop
    2. Public Class Form1
    3. Private Sub cmdButton1_Click(sender As System.Object, e As System.EventArgs) Handles cmdButton1.Click
    4. Dim exclApp As Object 'As Application
    5. Dim Datei As Object 'As Workbook
    6. Dim Blatt As Object 'As Worksheet
    7. exclApp = CreateObject("Excel.Application")
    8. With exclApp
    9. .Visible = False
    10. Datei = .Workbooks.Open("C:\Users\Lappi-Schnork\Desktop\Projekt - MA-Excel\Excel mit VB bearbeiten.xlsx")
    11. Blatt = Datei.Worksheets("Betriebsmittelliste")
    12. Dim Zeile As Long = Blatt.UsedRange.Rows.Count + 1
    13. Blatt.Range("A4" & Zeile) = txtBox1.Text
    14. Blatt.Range("B4" & Zeile) = txtBox2.Text
    15. Blatt.Range("C4" & Zeile) = txtBox3.Text
    16. Datei.close(True)
    17. .quit()
    18. End With
    19. End Sub
    20. End Class


    Doch es klappt nicht wie gewollt...Weder wenn Zeile als Long, noch als Integer deklariert. Auch wenn ich Blatt.Range("A4" & Zeile).Value = txtBox1.Text schreibe, funktioniert es nicht.

    Fehlermeldung, die ausgegeben wird:

    COMExeption wurde nicht behandelt
    Mitglied nicht gefunden. (Ausnahme von HRESULT: 0x80020003 (DISP_E_MEMBERNOTFOUND))

    Bin für jede Hilfe dankbar.

    Viele Grüße

    Stefan
    Bevor Du Deinen Code schreibst, ohne ihn zu verstehen, hättest Du das Beispiel in dem Link mal lauffähig machen sollen. :D

    VB.NET-Quellcode

    1. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    2. Dim xlObj As New Excel.Application
    3. xlObj.Visible = True 'damit man sieht, dass Excel geöffnet wird
    4. Dim Mappe As Excel.Workbook = xlObj.Workbooks.Open("C:\temp\Datei.xls")
    5. Dim Tabelle As Excel.Worksheet = Mappe.Sheets("Tabelle1")
    6. Dim Zeile As Integer = Tabelle.UsedRange.Rows.Count + 1
    7. Tabelle.Cells(1, 1) = "Wert" ' das hier
    8. Mappe.Save()
    9. Mappe.Close()
    10. xlObj.Quit()
    11. End Sub
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Wollte gerade deinen Code ausprobieren, aber er hat mit Excel.Application ein Problem..Es ist unterstrichen mit dem Hinweis, dass dies nicht definiert ist.
    Ich dachte, das kann man verhindern, in dem ich den Verweis zum Office Paket einfüge (+ Imports Microsoft.Office.Interop vor die Klasse setze)
    Kannst du mir sagen, was ich vorher definieren muss, damit dein Code lauffähig wird?

    Warum kann ich meinen Anfangscode eigentlich nicht nehmen, da kann ich doch schon Excel-Tabellen ausfüllen...
    Ich brauch doch lediglich nur eine Erweiterung, um nicht ständig die gleiche Zelle neu zu beschreiben, sondern jeweils eine Zelle runtergehe, oder irre ich mich?

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „schnorklunder“ ()

    Steht auch da drin.
    Microsoft.Excel 11.0 ... bei mir
    Bilder
    • Excel.jpg

      12,71 kB, 231×160, 4.641 mal angesehen
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Hm ich habe den gleichen Verweis und er meckert immer noch rum...Aber mal zu meiner Frage zurück:

    Ist es nicht möglich, mein Eingangsbeispiel so umzuändern, dass ich nicht nur Zelle "A4" mit dem Inhalt des Textfeldes fülle, sondern es nach dem Button.Click-Ereignis automatisch "A5" etc. anpeilt?

    PS: .Visible = False ist gewollt... Excel soll sich aus Sicht des Anwenders nicht öffnen (obwohl es ja im Hintergrund läuft, das versteh ich schon)

    Viele Grüße

    Stefan
    Das wäre in meinem Beispiel:

    VB.NET-Quellcode

    1. For zei As Integer = 1 to 4
    2. Tabelle.Cells(zei, 1) = "Wert" & zei.ToString
    3. Next
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Ich habs nochmal mit deiner Anleitung versucht und bin schon etwas weiter gekommen,danke dafür :)

    Ich kann jetzt mit deiner For-Schleife mehrere Zellen beschreiben, allerdings sieht das bei mir so aus bisher:

    Mein eingegebener Text im 1. Textfeld wird 4 mal untereinander geschrieben, doch das ist ja nicht der Sinn der Sache...Es soll ja einmal reingeschrieben werden und beim nächsten Klick-Event in die nächste Zeile schreiben.

    Anbei nochmal der gerade verwendete Code:

    VB.NET-Quellcode

    1. Imports Microsoft.Office.Interop
    2. Public Class Form1
    3. Private Sub cmdButton1_Click(sender As System.Object, e As System.EventArgs) Handles cmdButton1.Click
    4. Dim xlObj As New Excel.Application
    5. xlObj.Visible = False
    6. Dim Mappe As Excel.Workbook = xlObj.Workbooks.Open("C:\Users\Lappi-Schnork\Desktop\Projekt - MA-Excel\Kopie von Excel mit VB bearbeiten.xlsx")
    7. Dim Tabelle As Excel.Worksheet = Mappe.Sheets("Tabelle1")
    8. Dim Zeile As Integer = Tabelle.UsedRange.Rows.Count + 1
    9. Tabelle.Cells(4, 1) = "Wert"
    10. For Zeile = 1 To 4
    11. Tabelle.Cells(Zeile, 1) = txtBox1.Text
    12. Next
    13. Mappe.Save()
    14. Mappe.Close(True)
    15. xlObj.Quit()
    16. End Sub
    17. End Class


    PS: Tabelle.Cells(4,1) = "Wert" <--- habe ich auf 4,1 gesetzt, da ich in der 4. Zeile der 1. Spalte mit den Einträgen anfangen will

    Beste Grüße

    Stefan

    schnorklunder schrieb:

    Mein eingegebener Text im 1. Textfeld wird 4 mal untereinander geschrieben, doch das ist ja nicht der Sinn der Sache...Es soll ja einmal reingeschrieben werden und beim nächsten Klick-Event in die nächste Zeile schreiben.
    LOL :D :D :D
    Ich habe Dir gezeigt, wie Du den Kompass halten musst, um zu sehen, wo Norden ist.
    Den richtigen Weg musst Du schon allein beschereiten. Oder willst Du hier fertigen laufenden Code abgreifen, den Du dann nicht verstanden hast?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Des einen Freud ist des Anderen Leid, gel?

    Mir geht es nicht darum hier irgendwas abzugreifen...Letztenendes habe ich ein Problem, welches ich erstmal nicht lösen kann, weshalb ich über jeden Vorschlag von erfahrenen Programmierern dankbar bin. Aber wieder zum Thema ;)

    Apropos Kompass: Ich scheine mit der For-Next Schleife auf dem Holzweg zu sein, richtig? Gibt es ein Stichwort, was mich in diesem Zusammenhang weiterbringt?

    Beste Grüße

    Stefan
    Meinst Du so was?

    VB.NET-Quellcode

    1. Private MyLine As Integer = 0
    2. Private Sub ButtonClick(...) Handles ...
    3. Tabelle.Cells(MyLine, 1) = "Wert" & MyLine.ToString
    4. MyLine += 1
    5. End Sub
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Hey Rod,

    ich danke dir! Man glaubt es kaum, aber ich hab es auf mein Projekt gestülpt bekommen :D
    Für alle anderen, die vielleicht mitlesen sollten, lass ich mal den Code hier.

    VB.NET-Quellcode

    1. Imports Microsoft.Office.Interop
    2. Public Class Form1
    3. Private MyLine As Integer = 4
    4. Private Sub cmdButton1_Click(sender As System.Object, e As System.EventArgs) Handles cmdButton1.Click
    5. Dim xlObj As New Excel.Application
    6. xlObj.Visible = True
    7. Dim Mappe As Excel.Workbook = xlObj.Workbooks.Open("C:\...Test.xlsx")
    8. Dim Tabelle As Excel.Worksheet = Mappe.Sheets("Tabelle1")
    9. Tabelle.Cells(MyLine, 1).Value = txtBox1.Text
    10. Tabelle.Cells(MyLine, 2).Value = txtBox2.Text
    11. Tabelle.Cells(MyLine, 3).Value = txtBox3.Text
    12. MyLine += 1
    13. Mappe.Save()
    14. Mappe.Close()
    15. xlObj.Quit()
    16. End Sub
    17. End Class


    Beste Grüße

    Stefan