Clever-Excel-Forum

Normale Version: Comboboxen beim Öffnen befüllen
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo Zusammen,

ich habe folgendes Problem: Ich muss meine Comboboxen mit .AddItem befüllen, weil meine Makros wie z. B. Autofilter sonst nicht funktionieren. Über diese Variante werden die Comboboxen aber geleert, wenn ich die Datei schließe. Beim wiederöffnen sind die Comboboxen also leer. Ich habe ein funktionierendes Makro geschrieben, welches alle Comboboxen befüllt. Es funktioniert an sich , wenn ich aber dieses Makro beim öffnen der Arbeitsmappe automatisch starten möchte kommen immer Fehlermeldungen. Habe versucht mit Call das Makro bei Workbook_open oder Workbook_activate einzubauen, aber vergebens. Da tauchen dann verschiedene Fehlermeldungen auf wie Laufzeitfehler 438 oder Laufzeitfehler 70. Im folgenden die Makros:

Code:
Sub Comboboxen_befüllen()
Call Jahre_variablen_definieren
If Not ActiveWorkbook.FullName = ThisWorkbook.FullName Then Exit Sub

With Sheets("Musterzelle").ComboBox1
   
      .AddItem "Alle"
    .AddItem "Gesamt"
    .AddItem Jahr1
    If Frz_Jahre > 1 Then
    .AddItem Jahr2
    End If
    If Frz_Jahre > 2 Then
    .AddItem Jahr3
    End If
    If Frz_Jahre > 3 Then
    .AddItem Jahr4
    End If
    If Frz_Jahre > 4 Then
    .AddItem Jahr5
    End If

End With
With Worksheets(kg_TabelleErgebnisName).ComboBox1
       .AddItem "Alle"
    .AddItem "Gesamt"
    .AddItem Jahr1
    If Frz_Jahre > 1 Then
    .AddItem Jahr2
    End If
    If Frz_Jahre > 2 Then
    .AddItem Jahr3
    End If
    If Frz_Jahre > 3 Then
    .AddItem Jahr4
    End If
    If Frz_Jahre > 4 Then
    .AddItem Jahr5
    End If
End With
    For Each p_WorkSheet_ws In Worksheets
      
        If p_WorkSheet_ws.Cells(1, 1).Value = "Stationsblatt" Then
With p_WorkSheet_ws.ComboBox1
    .AddItem "Alle"
    .AddItem "Gesamt"
    .AddItem Jahr1
    If Frz_Jahre > 1 Then
    .AddItem Jahr2
    End If
    If Frz_Jahre > 2 Then
    .AddItem Jahr3
    End If
    If Frz_Jahre > 3 Then
    .AddItem Jahr4
    End If
    If Frz_Jahre > 4 Then
    .AddItem Jahr5
    End If
End With
End If
Next p_WorkSheet_ws

End Sub

Code:
Private Sub Workbook_Open()
        'Bildschirmupdate verhindern
    Application.ScreenUpdating = False
   
    Blattschutz_aufheben kg_TabelleProjektDaten
    Blattschutz_aufheben kg_TabelleCTGName
    Blattschutz_aufheben kg_TabelleErgebnisName
    Blattschutz_aufheben kg_TabelleMaeAnteil
    Blattschutz_aufheben kg_TabelleMusterzelle
   
    'Variablen deklarieren
    Dim p_WS_ws As Worksheet
    Dim p_WB_wb As Workbook
    Dim p_WorkSheet_ws As Worksheet
   
   
    ' --- Gruppierung aufklappen ermöglichen ---
   For Each p_WS_ws In Worksheets
     If Not p_WS_ws.ProtectContents Then
            Blatt_schützen p_WS_ws.Name
        End If
Next p_WS_ws
   
    ' --- hinzugefügt am 10.02.2011 ---
   
        ' --- Arbeitsblatt "Musterzelle" verstecken
        Worksheets(kg_TabelleMusterzelle).Visible = False
       
    ' ---------------------------------
   
    'Range in der Ergebnisübersicht CTG setzen, in der keine Plausibilitätsprüfung erfolgen soll
    Worksheets(kg_TabelleMaeAnteil).Select
    Set g_NoCheck_rng = Range(Cells(kg_ZeilenNrMaeKopf + 2, kg_SpaltenNrInventarnr), Cells(kg_ZeilenNrMaeKopf + zähle_Zeilen(kg_SpaltenNrZelle, kg_ZeilenNrMaeKopf, ActiveWorkbook.Worksheets(kg_TabelleMaeAnteil)) - 1, kg_SpaltenNrInventarnr))
     'Call Blattschutz_aus
    'Call Jahre_variablen_definieren
        'Call Jahre_Dropdown
        'Call Comboboxen_leeren
       Call Comboboxen_befüllen
          'Call Jahre_Dropdown_Station_definieren
        'Call Comboboxwert_Alle
        'Call Blattschutz_ein
       
    'Anfangssheet auswählen
    Worksheets(kg_TabelleProjektDaten).Select
    Range("F6").Select
   
 
   
   
    'Bildschirmupdate ermöglichen
    Application.ScreenUpdating = True
End Sub

Code:
Private Sub Workbook_Activate()

    '--- Tastenkombination
    ' "MAE-Wert verlinken"
    Application.OnKey "^+v", "MAE_Uebernehmen"
   
    ' "Einfügen" wird "Werte einfügen"
    Application.OnKey "^v", "Werte_einfuegen"
   
    ' geheime Tastenkombination "Einfügen
    Application.OnKey "^+q", "einfuegen"
   
   '--- Symbolleisten /Menüs anpassen
    Schaltflaechen_anpassen
   
    'Deaktivieren des Befehls "Ausschneiden" (bei allen Arbeitsmappen)
    CutOff

Call Comboboxen_befüllen
   

      
   
End Sub

Vielen Dank für eure Hilfe!
So hätte hier noch eine Beispieldatei.

Das Ziel ist wie gesagt folgendes:

Die Comboboxen werden mit dem Befehl .AddItem gefüllt
Die Comboboxen sollen bei Schließen und Öffnen der Arbeitsmappe ohne Fehlermeldungen wieder gefüllt werden.
Es tauchen sogar Fehlermeldungen in einer anderen Arbeitsmappe vor wenn ich die Beispieldatei schließe.
Hallöchen,

Zitat:Die Comboboxen werden mit dem Befehl .AddItem gefüllt

Bei mir geht's nicht ohne Änderungen:
Code:
Sub ComboBox1()
Dim p_WorkSheet_ws As Worksheet
For Each p_WorkSheet_ws In ThisWorkbook.Worksheets
   If p_WorkSheet_ws.Cells(1, 1).Value = "Ja" Then
      With p_WorkSheet_ws.OLEObjects("ComboBox1").Object
         .AddItem "Alle"
         .AddItem "Gesamt"
      End With
   End If
Next p_WorkSheet_ws
End Sub

Zitat:Die Comboboxen sollen bei Schließen ... wieder gefüllt werden.
Sieht da jemand nach ob beim Schließen was anderes drin stand als beim nächsten Öffnen??


Ich habe mir jetzt nur den Code in der Mappe angeschaut ...
Hallo Schauan,

danke für deine Antwort.

Habe deinen Code gerade getestet.
Auch mit deinem Code bleiben die Comboboxen leer.

Naja diese Comboboxen werden verwendet, um ansichten zu verändern, darum müssen diese bei öffnen befüllt werden. Bei Schließen wäre es egal.
Hallöchen,


hab's Makro paar mal gestartet und es ist paar mal drin, in allen 3 Tabs  ...

[attachment=33603]
Hallo,

wenn man das Makro manuell startet funktioniert es ja. Aber beim Öffnen des Workbooks wird das Makro bei mir leider nicht automatisch ausgeführt oder zumindest nicht erfolgreich.
Hallo,

habe das Problem gelöst. Es liegt nicht am Makro selbst sonder an die Einbindung. Mit Einbindung in Workbook_Open oder Workbook_Activate wird das Makro nicht gestartet.

Aber es funktoniert unter der Einbindung von Auto_Open.

Also in irgendeinem Modul folgender Code:

Code:
Private Sub Auto_Open ()

Call Combobox_befüllen

End Sub

Vielen Dank
Moin!
Dass das Ereignis Workbook_Open in DieseArbeitsmappe und nicht in ein Modul gehört  ist Dir bekannt?
Auto_Open gibt es offiziell seit ca. 30 Jahren nicht mehr und wird lediglich, wie vieles andere auch, nur im Rahmen der Kompatibilität noch unterstützt. 

Gruß Ralf
Guten Morgen Ralf,

ja im Modul der Arbeitsmappe, das ist mir bekannt und auch in der Beispieldatei so gemacht. Aber es funktioniert mit Workbook_open einfach nicht.

Hmm das ist natürlich schlecht für zukünftige Funktionssicherheit.