alexander01
Goto Top

Excel VBA Wert aus ComboBox wird nicht übernommen

Hallo, ich komme hier nicht weiter

Hallo,
ich habe eine neue Mustervorlage in Excel erstellt, habe z.T. Textboxen und ComboBoxen eingefügt. Habe über den VB-Editor Code eingegeben:
Hier für ComboBox1:

Private Sub ComboBox1_DropButtonClick()
With ComboBox1
.Clear
.AddItem "Test1"
.AddItem "Test2"
.AddItem "Test3"
.AddItem "Test4"
.ListIndex = 0
End With
End Sub

Nach Neustart von Excel und Auswahl der eigenen Vorlage zum Erstellen eines neuen Arbeitsblattes werden in der ComboBox1 auf Anklicken hin die 4 Möglichkeiten angezeigt, es wird aber immer nur die erste ("Test1") in das Feld der Kombinationsbox übernommen. Ich kann durch Anklicken also nicht eine Möglichkeit ab 2. Position "auswählen" / "übernehmen".
Ich möchte aber, das in den vorhandenen ComboBoxen die jeweils gewählten Einträge auch nach Verlassen der ComboBox in dieser angezeigt werden.

Was mache ich falsch?

Content-ID: 120271

Url: https://administrator.de/contentid/120271

Ausgedruckt am: 22.11.2024 um 19:11 Uhr

76109
76109 12.07.2009 um 08:16:30 Uhr
Goto Top
Hallo alexander01!

Das sollte Dir weiterhelfenface-smile

ComboBox in Tabellenblatt:
DieseArbeitsmappe:

Private Sub Workbook_Open()
   Call Init_ComboBox1
End Sub

Private Sub Init_ComboBox1()
    Dim i As Integer
    With Worksheets("Tabelle1").ComboBox1  
        .Clear
         For i = 1 To 4: .AddItem "Test" & i:  Next  
        .ListIndex = 0
    End With
End Sub

In Tabelle1:

Private Sub ComboBox1_Change()
    Range("A1") = ComboBox1.Text  'Tue etwas mit Auswahl  
End Sub

ComboBox in Formular:
Private Sub UserForm_Initialize()
    Dim i As Integer
    With ComboBox1
        .Clear
         For i = 1 To 4: .AddItem "Test" & i:  Next  
        .ListIndex = 0
    End With
End Sub

Private Sub ComboBox1_Change()
    Range("A1") = ComboBox1.Text  'Tue etwas mit Auswahl  
End Sub

Gruß Dieter
alexander01
alexander01 12.07.2009 um 09:52:15 Uhr
Goto Top
Hallo, Dieter

ich habe jetzt Zeilen 3-5 in "Diese Arbeitsmappe" eingefügt

Zeile 7-14 angepasst (die Nummerierung durch mich war nur sporadisch, es stehen dort bestimmte Ausdrücke):

Private Sub Init_ComboBox1()
With ComboBox1
    .Clear
    .AddItem "abzbhbxx"  
    .AddItem "xxcsdcc"  
    .AddItem "dccjc jö."  
    .AddItem "sdmc cer"  
    .AddItem "cccjönfkköfo"  
    .AddItem "andere"  
    .ListIndex = 0
End With
End Sub

Zeile 18-20 in das Tabellenblatt eingefügt. (ich denke, ich habe kein Formular, ich habe eine Tabelle auf meine Vorstellungen hin angepasst)

Es erscheint eine Fehlermeldung: Laufzeitfehler 424, Objekt erforderlich, der Debugger weist auf .Clear in der Privat Sub Init_ComboBox1() hin.

Gruß

Alexander
alexander01
alexander01 12.07.2009 um 10:01:40 Uhr
Goto Top
Halt !

ich habe einen Fehler entdeckt,

ich habe statt:
With Worksheets("Tabelle1").ComboBox1
with ComboBox1 geschrieben, nach Änderung wird jetzt der ausgewählte Text in das Feld der ComboBox übernommen!

Nun möchte ich aber, das die Textauswahl in diesem Feld durch das Abspeichern des Arbeitsblattes gespeichert wird. Dies erfolgt nicht. Es ist immer wieder der 1. Eintrag voreingestellt (sicher wegen .ListIndex = 0)

Habe ich einen Denkfehler?
ich möchte eine generelle Mustervorlage (habe ich jetzt "fertig").
Diese möchte ich starten, und nach entsprechenden Einstellungen der ComboBoxen als Arbeitsblatt x oder y oder z abspeichern. in den Feldern der ComboBoxen sollen aber nach erneutem Öffnen des Arbeitsblattes die eingestellten Texte erhalten bleiben.


Gruß
Alexander
73234
73234 12.07.2009 um 10:54:29 Uhr
Goto Top
In Änderung Deines Quelltextes ... Initialisierung beim öffnen der Mappe...

Private Sub Workbook_Open()
With Tabelle1.ComboBox1
.Clear
.AddItem "Test1"
.AddItem "Test2"
.AddItem "Test3"
.AddItem "Test4"
.ListIndex = Range("A1").Value
End With
End Sub
1. Hier ist das Steuerelement in 'Tabelle1'
2. Der aktivierte Listenindex wird aus der Zelle A1 ausgelesen.

Private Sub ComboBox1_Change()
Range("A1").Value = ComboBox1.ListIndex
End Sub

Beim Ändern des Listeneintrages wird der aktuelle in 'A1' eingetragen.

Somit steht in 'A1' immer der letzte Eintrag drinne ...

So iO?
76109
76109 12.07.2009 um 11:26:10 Uhr
Goto Top
Hallo alexander01!

Diese Einstellungen werden nicht automatisch gespeichert.

Minion hat ja schon eine Möglichkeit angeboten.

Du könntest auch ein ganz andere Methode verwenden, indem Du ein verstecktes Tabellenblatt z.B. mit dem Namen "Init" erstellst, wo Deine Liste defininiert ist und der ListIndex gesichert wird. Klingt vielleicht kompliziert, ist es aber nicht.

1. Erstelle ein Tabellenblatt mit dem Namen "Init"
2. Schreibe Deine Liste in die Zellen z.B. Zelle A1 = Test1, A2 = Test2 usw.
3. Lasse z.B. die Zelle B1 frei, um hier die Einstellung zu speichern.
4. Wähle im VB-Editor das Tabellenblatt "Init" und stelle im Eigenschaftsfenster Visible = xlVeryHidden ein
5. Füge in Deiner ComboBox im Eigenschaftsfenster unter ListFillRange z.B. Init!A1:A10 ein

Nachdem sich die ComboBox von selbst initialisiert, brauchst Du nur noch den ListIndex beim öffnen der Arbeitsmappe mit dem Wert aus Init!B1 zu initialisieren und bei einer Auswahl in der ComboBox, wird der ListIndex immer automatisch im Tabellenblatt Init!B1 eingetragen.

Das ginge dann in etwa so:

In DieseArbeitsmappe:
Private Sub Workbook_Open()
   Sheets("Tabelle1").ComboBox1.ListIndex = Sheets("Init").Range("B1")  
End Sub

Im Tabellenblatt Tabelle1:
Private Sub ComboBox1_Change()
   'Tue was  
    Sheets("Init").Range("B1") = ComboBox1.ListIndex  
End Sub

Im Tabellenblatt Init:
A1 = Test1
A2 = Test2
A3 = Test3
..........
B1 = 0

Gruß Dieter
alexander01
alexander01 12.07.2009 um 18:23:02 Uhr
Goto Top
Super, danke Euch beiden!

ich habe die Variante mit dem "versteckten" Tabellenblatt gewählt, da ich auf meinem "Datenblatt" keine zusätzlichen Texte haben wollte.

darf ich noch 2 Fragen stellen?

1. wenn ich im Code des Tabellenblattes "Init" "visible=xlSheetVeryHidden" wähle (es also wohl "verstecken" möchte), kommt eine Fehlermeldung. Kann der Code der anderen Tabellenseite dann nicht mehr auf den gespeicherten ListIndex zugreifen?

2. eine der ComboBoxen soll Zahlen enthalten, aber mit 1 Dezimalstelle formatiert (also z.B. 2,0). Obwohl ich die entsprechende Spalte im Tabellenblatt "Init" als Zahl mit 1 Dezimalstelle formatiert habe (und dort dann 2,0 steht), erscheint in der Combobox nach Speicherung nur "2". Wie bekomme ich eine "2,0" dahin?

Gruß und nochmals Danke

Alexander
alexander01
alexander01 12.07.2009 um 19:34:49 Uhr
Goto Top
Problem 1 ist gelöst, hatte wohl irgendwo einen Fehler drin.

bliebe noch Problem 2...

Alexander
76109
76109 12.07.2009 um 20:05:44 Uhr
Goto Top
Hallo alexander01!

Punkt 1:
Dir stehen mit dem versteckten Tabellenblatt mit Ausnahme von ganzes Tabellenblatt Kopieren/Verschieben/Löschen..., sonst alle Funktionen zur Verfügung.

Punkt 2:
Du musst die Zellen als Text formatieren: "2,10", "2,00"

Gruß Dieter
73234
73234 12.07.2009 um 20:06:39 Uhr
Goto Top
Hier mal eine Excel-Datei zum anschauen ... --> 1