Combo und Textbox mit Excel - Spalten befüllen

  • VB.NET

Es gibt 40 Antworten in diesem Thema. Der letzte Beitrag () ist von Rodario.

    Combo und Textbox mit Excel - Spalten befüllen

    Hallo zusammen,

    ich weiß dass dieses Thema hier schon mehrfach behandelt wurde aber ich stehe vor folgendem Problem.
    Ich möchte den Inhalt der Combobox über die Spalte "A" des Excel - Sheets befüllen und den der Textbox
    über die Spalte "B" .
    Somit kann ich ohne ins Programm eingreifen zu müssen meinen Inhalt beliebig erweitern.
    Habe auch schon geschafft eine einzelne Zelle in die Combobox zu bekommen.
    Beim Versuch den kompletten Spalteninhalt einzulesen stoße ich auf folgende Fehlermeldung:
    "Opton Strict on" lässt spätes binden nicht zu.

    Meinen Code habe ich angehängt.
    Wäre für jede Hilfe dankbar.

    Ach so...

    Option Strict On
    Imports Microsoft.Office.Interop.Excel
    Imports Microsoft.Office.Interop
    steht auch noch drin
    Bilder
    • excel.jpg

      267,9 kB, 830×556, 246 mal angesehen
    Hier hast du definitiv einen Denkfehler drin.

    VB.NET-Quellcode

    1. xlZelle = xlBlatt.Range("A1")
    2. combobox1.items.add(xlBlatt.xlZelle.Text())


    wenn xlZelle ein Range von xlBlatt ist, dann spricht man das nicht über xlBlatt.xlZelle an. Das ist völliger Quatsch.
    Wenn, dann xlBlatt.Range("A1").Text o.ä. oder aber xlZelle.Text o.ä.
    "Wenn jemand in einem Betrieb unverzichtbar ist, dann ist dieser Betrieb falsch organisiert." - Roberto Niederer
    sy mein Fehler .
    Die Zeile "ComboBox1.Items.Add(xlZelle.Text)" sollte auskommentiert sein.
    Ohne "For count" ist sie dann aktiv und der Code füllt meine Box mit A1 der Excel Tabelle.
    Also muss mein Fehler in der For count Zeile liegen.


    Aber dein Hinweis war richtig... der Fehler ist weg.

    Nun wird die Conbobox aber 25x mit der Zelle "A2" befüllt und das will ich natürlich nicht.

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Rodario“ ()

    Dann lauf mal alle A-Spalten durch (Mit alle sind nur die ausgefüllten gemeint), z.B. mit ner For Each-Schliefe und füge sie der Combobox hinzu.
    "Wenn jemand in einem Betrieb unverzichtbar ist, dann ist dieser Betrieb falsch organisiert." - Roberto Niederer
    Hallo nochmal,
    komme leider nicht weiter da ich immer eine Fehlermeldung bekomme in meiner Schleife.
    Ausnahme von HRESULT: 0x800A03EC
    Komme da alleine leider nicht weiter.
    Bin für jede Hilfe dankbar

    VB.NET-Quellcode

    1. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    2. Dim xls_Appl As Excel.Application ' Excel Anwendung
    3. Dim xls_Mappe As Excel.Workbook ' Excel Arbeitsmappe
    4. Dim xls_Blatt As Excel.Worksheet ' Excel Blatt ( Tabelle)
    5. Dim xls_Bereich As Excel.Range ' Excel Bereich
    6. Dim Aresult As String
    7. Dim Bresult As String
    8. Dim xlup As Integer
    9. xls_Appl = CType(CreateObject("Excel.Application"), Excel.Application)
    10. xls_Appl.Visible = True
    11. xls_Mappe = xls_Appl.Workbooks.Open("C:\Users\Public\Documents\Gewichte\Daten.xlsx")
    12. xls_Blatt = CType(xls_Mappe.Worksheets(1), Excel.Worksheet)
    13. xls_Blatt.Select()
    14. Aresult = xls_Appl.Range("A3").Value
    15. Bresult = xls_Appl.Range("B3").Value
    16. xls_Bereich = xls_Blatt.Range("A3:A200")
    17. For Each cell In xls_Mappe.range("A3", xls_Blatt.Cells(xls_Blatt.Rows.Count, 1).end(xlup))
    18. Aresult = cell.value
    19. Next
    20. ComboBox1.Text = AResult
    21. xls_Mappe.Save()
    22. xls_Mappe.Close()
    23. End Sub

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Rodario“ ()

    Sy aber ich bin ziemlich daneben weil ich den ganzen Tag schon dran bin mit diesem code.
    Habe die Add für die Combobox nun drangehängt.
    Blicke leider durch meine eigene Schleife nicht mehr durch.
    Vielleicht sollte ich mich Morgen erst wieder dran begeben, es sei denn du siehst den fehler schon im Ansatz
    For Each cell In xls_Mappe.range("A3", xls_Blatt.Cells(xls_Blatt.Rows.Count, 1).end(xlup))

    Du ließt hier für aresults nicht die Spalte aus sondern den ganzen rang zwischen A3 und xls_Blatt.Cells(xls_Blatt.Rows.Count.
    Und dann versuchst den ganzen Bereich in eine Zelle zu pressen.

    Ersetz doch einfach wenn du Spalten Auslesen willst das A3 mit einer laufenden Variable die in der for each +1 läuft
    Dann hast du bei jedem durchlauf ein spalteninhalt ausgelesen und der Combo angehangen.
    Du kannst nicht den ganzen rang nit einmal in eine Combo laden.


    Rein theoretisch wäre es dann so:

    VB.NET-Quellcode

    1. For Each cell In xls_Mappe.cells(3,i)
    2. Aresults= cell.value
    3. i=i+1
    4. Combobox1.add=aresults
    5. Next


    Das wäre waagerecht Auslesen in Zeile 3 bei cells(i,3) wäre es senkrecht in Spalte 3

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „tulla“ ()

    Jo, leer hast ja nicht behandelt.
    Bin auch von ausgegangen das die Zelle immer gefüllt ist bis each leer feststellt.

    Dann stell um.

    VB.NET-Quellcode

    1. Alt combobox1.item.add(aresult)
    2. Neu if aresult<>""then combobox1.item.add(aresult)


    Dann setzt er in add nix rein wenn die Zelle leer ist
    Ich setz noch mal den kompletten code rein.
    Die Combobox bleibt leider leer.
    Mein Arbeitsblatt in Excel heißt DIN1028.
    Wird das auch noch iwo abgefragt?

    VB.NET-Quellcode

    1. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    2. Dim xls_Appl As Excel.Application ' Excel Anwendung
    3. Dim xls_Mappe As Excel.Workbook ' Excel Arbeitsmappe
    4. Dim xls_Blatt As Excel.Worksheet ' Excel Blatt ( Tabelle)
    5. Dim i As Integer = 1
    6. Dim Aresult As String
    7. xls_Appl = CType(CreateObject("Excel.Application"), Excel.Application)
    8. xls_Appl.Visible = True
    9. xls_Mappe = xls_Appl.Workbooks.Open("C:\Users\Public\Documents\Gewichte\Daten.xlsx")
    10. xls_Blatt = CType(xls_Mappe.Worksheets(1), Excel.Worksheet)
    11. xls_Blatt.Select()
    12. For Each cell In xls_Blatt.Cells(i, 3)
    13. Aresult = cell.value
    14. i = i + 1
    15. If Aresult <> "" Then
    16. ComboBox1.Items.Add(Aresult)
    17. End If
    18. Next
    19. xls_Mappe.Save()
    20. xls_Mappe.Close()
    21. End Sub