Mit einer ComboBox im UserForm die Datenausgabe in unterschiedlichen Worksheets steuern

  • Excel

Es gibt 7 Antworten in diesem Thema. Der letzte Beitrag () ist von Lexi_82.

    Mit einer ComboBox im UserForm die Datenausgabe in unterschiedlichen Worksheets steuern

    Hallo zusammen,

    ich bin total neu hier und auch generell neu mit VBA unterwegs.

    Mit Hilfe von einigen guten Videos habe ich es nun geschafft, mir eine Eingabemaske zu bastel die alle relevanten Daten abfragt und dann in einer fortlaufenden Tabelle (Datenbank) ablegt.

    Nun möchte ich diese Maske erweitern und mit Hilfe einer ComboBox auswählen welche Tabelle (Worksheet 1, 2, 3, usw.) mit den Daten gefüttert wird. Die Tabellen sind alle exakt gleich aufgebaut, es geht wirklich nur darum, ihm begreifbar zu machen auf welches Blatt er schreiben soll.

    Meine Idee war:
    Eine Variable (Data) zu definieren
    diese mit mehreren IF ... THEN ... dem jeweiligen Worksheet zu zuordnen
    und dann mit "Worksheets(Data).Cells(last, 2).Value = Maske.TextBox_Name.Value" die Daten eintragen lassen

    klappt aber leider nicht. Wenn ich das Worksheet nicht mit Data sonder direkt z.B. Tabelle1 anspreche klappt es - aber ich will ja nicht immer in den Quellcode um alles zu ändern.

    Jemand eine Idee?

    Danke und schöne Grüße

    Alex

    Lexi_82 schrieb:

    klappt aber leider nicht
    Wieso nicht?
    Gibt es eine Fehlermeldung?
    Du kannst als Parameter entweder ein Integer für den Index oder einen String für den Namen verwenden.
    Ist Data als String definiert?
    Ansonsten brauche ich mehr Code als nur den Schnipsel.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --
    Private Sub ComboBox_OV_Click()
    'Variable zuordnen

    Dim Data As Integer

    If Maske.ComboBox_OV.ListIndex = 0 Then Data = Tabelle6
    If Maske.ComboBox_OV.ListIndex = 1 Then Data = Tabelle15
    If Maske.ComboBox_OV.ListIndex = 2 Then Data = Tabelle8
    If Maske.ComboBox_OV.ListIndex = 3 Then Data = Tabelle11
    If Maske.ComboBox_OV.ListIndex = 4 Then Data = Tabelle10
    If Maske.ComboBox_OV.ListIndex = 5 Then Data = Tabelle14
    If Maske.ComboBox_OV.ListIndex = 6 Then Data = Tabelle4
    If Maske.ComboBox_OV.ListIndex = 7 Then Data = Tabelle13
    If Maske.ComboBox_OV.ListIndex = 8 Then Data = Tabelle9
    If Maske.ComboBox_OV.ListIndex = 9 Then Data = Tabelle3
    If Maske.ComboBox_OV.ListIndex = 10 Then Data = Tabelle17
    If Maske.ComboBox_OV.ListIndex = 11 Then Data = Tabelle7
    If Maske.ComboBox_OV.ListIndex = 12 Then Data = Tabelle16
    If Maske.ComboBox_OV.ListIndex = 13 Then Data = Tabelle12
    If Maske.ComboBox_OV.ListIndex = 14 Then Data = Tabelle5

    End Sub

    Private Sub CommandButton_Anlegen_Click()
    'Stammdaten in Liste übertragen
    Dim last As Integer
    last = Worksheets(Data).Cells(Rows.Count, 2).End(xlUp).Row + 1
    Worksheets(Data).Cells(last, 2).Value = Maske.TextBox_Name.Value
    Worksheets(Data).Cells(last, 3).Value = Maske.TextBox_Vorname.Value
    Worksheets(Data).Cells(last, 4).Value = Maske.TextBox_Straße.Value
    Worksheets(Data).Cells(last, 5).Value = Maske.TextBox_Ort.Value
    Worksheets(Data).Cells(last, 6).Value = Maske.TextBox_Geburtsdatum.Value
    Worksheets(Data).Cells(last, 8).Value = Maske.TextBox_Telefon.Value
    Worksheets(Data).Cells(last, 12).Value = Maske.TextBox_Handy.Value
    Worksheets(Data).Cells(last, 13).Value = Maske.TextBox_Email.Value
    Worksheets(Data).Cells(last, 14).Value = Maske.TextBox_Eintritt.Value
    Worksheets(Data).Cells(last, 15).Value = Maske.TextBox_ID.Value
    Worksheets(Data).Cells(last, 17).Value = Maske.TextBox_JuLeiCa_Nr.Value
    Worksheets(Data).Cells(last, 18).Value = Maske.TextBox_JuLeiCa_Date.Value

    End Sub

    Private Sub UserForm_Initialize()

    'OV Auswwahl
    With Maske.ComboBox_OV
    .AddItem "Dörpen" 'Tabelle6 (04 - Dörpen) 0
    .AddItem "Elbergen" 'Tabelle15 (12- Elbergen) 1
    .AddItem "Haren" 'Tabelle8 (05 - Haren) 2
    .AddItem "Haselünne" 'Tabelle11 (08 - Haselünne) 3
    .AddItem "Herzlake" 'Tabelle10 (07 - Herzlake) 4
    .AddItem "Langen" 'Tabelle14 (11 - Langen) 5
    .AddItem "Lathen" 'Tabelle4 (02 - Lathen) 6
    .AddItem "Lingen" 'Tabelle13 (10 - Lingen) 7
    .AddItem "Meppen" 'Tabelle9 (06 - Meppen) 8
    .AddItem "Papenburg" 'Tabelle3 (01 - Papenburg) 9
    .AddItem "Salzbergen" 'Tabelle17 (14 - Salzbergen) 10
    .AddItem "Sögel" 'Tabelle7 (04 - Sögel) 11
    .AddItem "Spelle" 'Tabelle16 (13 - Spelle) 12
    .AddItem "Twist-Geeste" 'Tabelle12 (09 - Twist-Geeste) 13
    .AddItem "Werlte" 'Tabelle5 (03 - Werlte) 14

    .ListIndex = 0

    End With

    End Sub



    Das sollten alle Zeilen für diese Funktion sein....

    Es gibt einen Laufzeitfehler 438
    "Objekt unterstützt diese Eigenschaft oder Methode nicht."

    Es wird dann direkt aus der ersten "IF-Zeile" der hintere Teil "Data - Tabelle6" gelb markiert

    Lexi_82 schrieb:

    Dim Data As Integer
    If Maske.ComboBox_OV.ListIndex = 0 Then Data = Tabelle6

    Das passt ja gar nicht zusammen.
    Zumindest nicht, wenn Tabelle6 das Worksheet-Objekt ist.
    Ich würd's mal probieren mit

    Visual Basic-Quellcode

    1. Dim Data As String
    2. If Maske.ComboBox_OV.ListIndex = 0 Then Data = Tabelle6.Name
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --
    Okay ... nun klappt es soweit das sich die Maske zumindest wieder starten lässt. Wenn ich dann aber die Daten aus der Maske in die Tabelle eintragen lassen möchte,
    kommt die nächste Fehlermeldung.

    Fehler beim Kompilieren:
    Variable nicht definiert

    und es wird diese Zeile aus dem zweiten Teil gelb

    last = Worksheets(Data).Cells(Rows.Count, 2).End(xlUp).Row + 1


    wenn ich hier nun das (Data) in ("Data") ändere gibt es einen SyntaxError

    Jedoch wenn ich die Tabelle direkt anspreche, ohne diese ComboBox, dann schreibe ich dort auch ("Muster") - Muster ist der umbenannte Name des Test-Blattes.

    Im oberen Bereich sage ich ihm doch er soll "Tabelle6" auswählen - das ist der interne Name, in der Excel-Oberfläche heißt dieses Blatt "04 - Dörpen" .... wenn
    ich direkt Anspreche dann über den Blatt-Namen und bei der Funktion versuche ich das über den internen Namen - ist das evtl. noch ein Problem?
    mmhh... meine Idee, dass nun so zu benennen, als würde ich es händisch eintragen, klappt auch nicht...

    Sieht dann jetzt so aus:


    Private Sub ComboBox_OV_Click()
    'Variable zuordnen

    Dim Data As String

    If Maske.ComboBox_OV.ListIndex = 0 Then Data = "04 - Dörpen"
    If Maske.ComboBox_OV.ListIndex = 1 Then Data = "12 - Elbergen"
    If Maske.ComboBox_OV.ListIndex = 2 Then Data = "05 - Haren"
    If Maske.ComboBox_OV.ListIndex = 3 Then Data = "08 - Haselünne"
    If Maske.ComboBox_OV.ListIndex = 4 Then Data = "07 - Herzlake"
    If Maske.ComboBox_OV.ListIndex = 5 Then Data = "11 - Langen"
    If Maske.ComboBox_OV.ListIndex = 6 Then Data = "02 - Lathen"
    If Maske.ComboBox_OV.ListIndex = 7 Then Data = "10 - Lingen"
    If Maske.ComboBox_OV.ListIndex = 8 Then Data = "06 - Meppen"
    If Maske.ComboBox_OV.ListIndex = 9 Then Data = "01 - Papenburg"
    If Maske.ComboBox_OV.ListIndex = 10 Then Data = "14 - Salzbergen"
    If Maske.ComboBox_OV.ListIndex = 11 Then Data = "04 - Sögel"
    If Maske.ComboBox_OV.ListIndex = 12 Then Data = "13 - Spelle"
    If Maske.ComboBox_OV.ListIndex = 13 Then Data = "09 - Twist-Geeste"
    If Maske.ComboBox_OV.ListIndex = 14 Then Data = "03 - Werlte"

    End Sub

    Private Sub CommandButton_Anlegen_Click()
    'Stammdaten in Liste übertragen
    Dim last As Integer
    last = Worksheets("Data").Cells(Rows.Count, 2).End(xlUp).Row + 1
    Worksheets("Data").Cells(last, 2).Value = Maske.TextBox_Name.Value
    Worksheets("Data").Cells(last, 3).Value = Maske.TextBox_Vorname.Value
    Worksheets("Data").Cells(last, 4).Value = Maske.TextBox_Straße.Value
    Worksheets("Data").Cells(last, 5).Value = Maske.TextBox_Ort.Value
    Worksheets("Data").Cells(last, 6).Value = Maske.TextBox_Geburtsdatum.Value
    Worksheets("Data").Cells(last, 8).Value = Maske.TextBox_Telefon.Value
    Worksheets("Data").Cells(last, 12).Value = Maske.TextBox_Handy.Value
    Worksheets("Data").Cells(last, 13).Value = Maske.TextBox_Email.Value
    Worksheets("Data").Cells(last, 14).Value = Maske.TextBox_Eintritt.Value
    Worksheets("Data").Cells(last, 15).Value = Maske.TextBox_ID.Value
    Worksheets("Data").Cells(last, 17).Value = Maske.TextBox_JuLeiCa_Nr.Value
    Worksheets("Data").Cells(last, 18).Value = Maske.TextBox_JuLeiCa_Date.Value

    End Sub

    Private Sub UserForm_Initialize()

    'OV Auswwahl
    With Maske.ComboBox_OV
    .AddItem "Dörpen" 'Tabelle6 (04 - Dörpen) 0
    .AddItem "Elbergen" 'Tabelle15 (12- Elbergen) 1
    .AddItem "Haren" 'Tabelle8 (05 - Haren) 2
    .AddItem "Haselünne" 'Tabelle11 (08 - Haselünne) 3
    .AddItem "Herzlake" 'Tabelle10 (07 - Herzlake) 4
    .AddItem "Langen" 'Tabelle14 (11 - Langen) 5
    .AddItem "Lathen" 'Tabelle4 (02 - Lathen) 6
    .AddItem "Lingen" 'Tabelle13 (10 - Lingen) 7
    .AddItem "Meppen" 'Tabelle9 (06 - Meppen) 8
    .AddItem "Papenburg" 'Tabelle3 (01 - Papenburg) 9
    .AddItem "Salzbergen" 'Tabelle17 (14 - Salzbergen) 10
    .AddItem "Sögel" 'Tabelle7 (04 - Sögel) 11
    .AddItem "Spelle" 'Tabelle16 (13 - Spelle) 12
    .AddItem "Twist-Geeste" 'Tabelle12 (09 - Twist-Geeste) 13
    .AddItem "Werlte" 'Tabelle5 (03 - Werlte) 14

    .ListIndex = 0

    End With

    End Sub


    Die Maske startet, aber sobald es zum Ablegen der Daten in die Tabelle kommt, gibt es wieder einen Fehler:

    Laufzeitfehler 9:
    Index außerhalb des gültigen Bereichs



    also wieder nichts weiter...

    Lexi_82 schrieb:

    Dim Data As String
    muss natürlich in den Header und nicht ins Click-Event.

    Lexi_82 schrieb:

    Worksheets("Data")
    Muss natürlich Worksheets(Data) lauten.
    Und wenn Data im Header definiert ist, wird da auch keine Fehlermeldung kommen.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --
    Lösung gefunden ... :)

    Der Inhalt des ersten Sub zum definieren der Variablen (Data) darf nicht im eigenständigen Sub stehen sonder muss mit in das Sub vom CommandButton_Anlegen und in
    alle Befehlszeilen mit Worksheets("Data") müssen die " gelöscht werden .... und schon klappt es wie es soll.

    Danke an petaod für die Hilfestellung


    Frage ist beantwortet!