![]() |
Betrifft: ComboBox
von: Peter R
Hallo an alle Excler,
und noch ne Frage für die Spezis.
Ich habe eine Combobox mit einer bestimmten Auswahl an Projekten. Bei jeder Auswahl soll was anderes gemacht werden. Funktioniert auch tadellos. Aber wie sieht es aus, wenn ein Neues Projekt hinzukommt? Gibt es eine Möglichkeit dieses in die vorhande Combobox festmit einzubringen?
Ich hatte mir das in etwa so vorgestellt, dass ich im Auswahlfeld einen Punkt "NEUES PROJEKT" nenne, und bei Auswahl dieses Punktes eine InputBox aufgeht, wo man nach dem Namen gefragt wird und er diesen Namen wiederrum an die Liste der Combobox weitergibt und speichert, so dass dieses Projekt beim nächsten Start der ComboBox mit in der Liste steht.
Hoffe Ihr habt reichlich Ideen (vielleicht auch Lösungen) für mich. :-)
Gruß
Peter
![]() |
Betrifft: AW: ComboBox
von: Roland Hochhäuser
Geschrieben am: 06.08.2008 11:44:18
Hallo Peter,
das kommt darauf an, wie die bisherigen Projekte in die Combobox gekommen sind: über RowSource oder über AddItem. Befindet sich die Combobox in einem Tabellenblatt oder in einer Userform?
Gruß
Roland Hochhäuser
![]() |
Betrifft: AW: ComboBox
von: Peter R
![]() |
Betrifft: AW: ComboBox
von: Roland Hochhäuser
Geschrieben am: 06.08.2008 11:59:10
Dann folgender Ansatz:
Private Sub ComboBox1_Change()
Dim strProjekt As String
If ComboBox1.Value = "Neues Projekt" Then
strProjekt = InputBox("Name des neuen Projektes eingeben", "Projekt hinzufügen")
If Len(strProjekt) > 0 Then ComboBox1.AddItem strProjekt
End If
End Sub
Private Sub UserForm_Initialize()
With ComboBox1
.AddItem "Neues Projekt"
.AddItem "Projekt1"
.AddItem "Projekt2"
.AddItem "Projekt3"
End With
End Sub
Kannst Du was damit anfangen?
Gruß
Roland Hochhäuser
![]() |
Betrifft: AW: ComboBox
von: Peter R
![]() |
Betrifft: AW: ComboBox
von: Roland Hochhäuser
Geschrieben am: 06.08.2008 12:22:57
Hallo Peter,
nein, das neue Projekt ware dann weg. Wenn Du eine dauerhafte Speicherung auch der neue(n) Projekte erreichen willst, darfts Du die Projekte nicht "hart" codieren, sondern müsstest die Projektnamen irgendwo in einer Tabelle abspeichern und den Bereich beim Start der UF einlesen lassen.
Gruß
Roland Hochhäuser
![]() |
Betrifft: AW: ComboBox
von: Peter R
![]() |
Betrifft: AW: ComboBox
von: Peter R
Geschrieben am: 06.08.2008 16:59:51
Hallo Roland,
habe es jetzt halt doch mit einer Hilfstabelle gemacht.
Aber jetzt habe ich ein anderes Problem:
Wie kann ich nun das ausgewählte Projekt über Case ansprechen ohne den Projektnamen zu hinterlegen?
Da hapert bei mir der Denkprozess!!! :-)
Habe übrigens die Eigenschaft Rowsource verwendet, da ein dynamisches einlesen leider nicht geklappt hat. Hab da wahrscheinlich irgendwo einen Denkfehler. Dynamisch soll heißen, dass er Leerzeilen nicht mit in der Auswahl anzeigt.
Gruß
Peter
![]() |
Betrifft: AW: ComboBox
von: Roland Hochhäuser
![]() |
Betrifft: AW: ComboBox
von: Peter R
Geschrieben am: 06.08.2008 18:44:20
Hallöchen Roland,
hab es jetzt mit viel probieren hinbekommen, dass er mir nur die gefüllten Zellen ausliest.
Fraglich ist jetzt nur noch, wie ich die Auswahl aus der zweite, bzw. dritten uf (die aus der ersten aufgerufen werden) über Case anzusprechen um etwas bestimmtes auszuführen.
Hier mal die erste uf:
Private Sub AufgabenwahlCombo_Change()
Select Case AufgabenwahlCombo.Value
Case "Auftragskennzahlen für EK bearbeiten"
Call ProjektAuswahlEK.Show
Case "Auftragskennzahlen für ZK bearbeiten"
Call ProjektAuswahlZK.Show
Case "Schulungszeit herausfiltern"
Case "Wandlungsquote berechnen"
Call ProjektAuswahlZK.Show
End Select
End Sub
Private Sub Userform_Initialize()
With Worksheets("Tabelle1")
AufgabenwahlCombo.RowSource = Range(.Range("b1"), .Range("b1").End(xlDown)).Address
End With
End Sub
zweite uf:
Private Sub ProjektAuswahlCombo_Change()
End Sub
Private Sub Userform_Initialize()
With Worksheets("Tabelle1")
ProjektAuswahlCombo.RowSource = Range(.Range("a1"), .Range("a1").End(xlDown)).Address
End With
End Sub
dritte uf:
Private Sub ProjektAuswahlCombo2_Change()
End Sub
Private Sub Userform_Initialize()
With Worksheets("Tabelle1")
ProjektAuswahlCombo2.RowSource = Range(.Range("a1"), .Range("a1").End(xlDown)).Address
End With
End Sub
So, nun würde ich ganz gerne die Auswahl, die in der ersten uf (falls keine uf hinterlegt ist), sowie die Auswahl der zweiten und dritten uf über case ansprechen. Oder habe ich mich da in meinen Gehirnwindungen verirrt?
Gruß
Peter
![]() |
Betrifft: AW: ComboBox
von: Roland Hochhäuser
Private Sub ComboBox1_Change()
Dim strProjekt As String
If ComboBox1.Value = "Neues Projekt" Then
strProjekt = InputBox("Name des neuen Projektes eingeben", "Projekt hinzufügen")
If Len(strProjekt) > 0 Then
With ThisWorkbook.Worksheets(1)
.Range("B" & .Range("B1").End(xlDown).Row + 1) = strProjekt
End With
cboFuellen
End If
End If
End Sub
Private Sub UserForm_Initialize()
cboFuellen
End Sub
Private Sub cboFuellen()
ComboBox1.RowSource = ""
With ThisWorkbook.Worksheets(1)
ComboBox1.RowSource = .Range(.Range("B1"), .Range("B1").End(xlDown)).Address
End With
End Sub
Schreib mal in Tabelle1 Zelle B1 Neues Projekt hinein und lasse den Code dann arbeiten, dann wirds klar.
Gruß
Roland Hochhäuser
![]() |
Betrifft: AW: ComboBox
von: Peter R
Geschrieben am: 06.08.2008 19:52:05
Hallo Roland,
erstmal vielen Dank.
Funktioniert einwandfrei.
Jetzt wird das Neue Projekt zu der Liste hinzugefügt.
Die anfänglich Aufgabenstellung war etwas anders, was aber ja so nicht funktioniert hatte, und deswegen hatte ich es jetzt über einen Umweg probiert und hätte die neuen Projekte halt jedesmal in die entsprechende Datei manuell eingetragen. Aber so ist es natürlich viel besser!!!!!! :-)
Aber den zweiten Punkt habe ich damit leider noch nicht gelöst. Wie kann ich jetzt die einzelnen Projekte direkt über case ansprechen um eine weitere Aktion auszuführen?
Ich kann ja keinen direkten Namen hinterlegen. Also müsste ich die Auswahl der Box an eine Variable übergeben und die dann über Case aufrufen. Ist das so richtig gedacht?
Bin noch ziemlich am Anfang von VBA und hole mir meist Lösungen, die ich dann meinen Bedürfnissen anpasse. Das klappt auch alles. Vielleicht sollte ich doch mal nen Kurs dafür besuchen um es von Pike auf zu lernen. Hast Du da evtl. auch noch nen Tip?
Gruß
Peter
![]() |
Betrifft: AW: ComboBox
von: Roland Hochhäuser
![]() |
Betrifft: AW: ComboBox
von: Peter R
Geschrieben am: 07.08.2008 11:07:40
Hallo Roland,
vielen Dank für Deine Auskünfte. Hab gestern (heute) noch bis 2 Uhr rumprobiert (learning by doing) und bis jetzt folgende Programmierung erstellt. Bin von den drei einzelnen ufs abgewandert zu einer mit drei cbs.
Das mit dem .value fiel mir dann gestern auch noch ein.
Kannst Dir ja meine bisherigen Code ja mal anschauen:
Private Sub ComboBox1_Change()
Dim strAufgabe As String
If ComboBox1.Value = "Neue Aufgabe" Then
strAufgabe = InputBox("Name der neuen Aufgabe eingeben", "Aufgabe hinzufügen")
If Len(strAufgabe) > 0 Then
With ThisWorkbook.Worksheets(1)
.Range("B" & .Range("B1").End(xlDown).Row + 1) = strAufgabe
End With
cbo1Fuellen
End If
End If
End Sub
Private Sub ComboBox2_Change()
Dim strAufgabe As String
If ComboBox2.Value = "Neues Projekt" Then
strProjekt = InputBox("Name des neuen Projekts eingeben", "Projekt hinzufügen")
If Len(strProjekt) > 0 Then
With ThisWorkbook.Worksheets(1)
.Range("A" & .Range("A1").End(xlDown).Row + 1) = strProjekt
End With
cbo2Fuellen
End If
End If
End Sub
Private Sub ComboBox3_Change()
cbo3Fuellen
End Sub
Private Sub CommandButton1_Click()
Unload Aufgaben
Dim cb1 As String
Dim cb2 As String
Dim cb3 As String
cb1 = ComboBox1.Value
cb2 = ComboBox2.Value
cb3 = ComboBox3.Value
Call cb1 'Hier kommt die Fehlermeldung:"sub, function oder property erwartet"
'Das Makro für den Wert in cb1 gibt es aber
'HIER WEIß ICH NICHT WEITER!!!!!!!
'VON HIER AUS MUSS ICH VERZWEIGEN!!!!
'MsgBox cb1 & cb2 & cb3 'Ist nur ein Versuch, ob die Values übergeben werden!!! Und das _
funktioniert
einwandfrei!!!
End Sub
Private Sub CommandButton2_Click()
Unload Aufgaben
End Sub
Private Sub UserForm_Initialize()
cbo1Fuellen
cbo2Fuellen
cbo3Fuellen
End Sub
Private Sub cbo1Fuellen()
ComboBox1.RowSource = ""
With ThisWorkbook.Worksheets(1)
ComboBox1.RowSource = .Range(.Range("B1"), .Range("B1").End(xlDown)).Address
End With
End Sub
Private Sub cbo2Fuellen()
ComboBox2.RowSource = ""
With ThisWorkbook.Worksheets(1)
ComboBox2.RowSource = .Range(.Range("A1"), .Range("A1").End(xlDown)).Address
End With
End Sub
Private Sub cbo3Fuellen()
ComboBox3.RowSource = ""
With ThisWorkbook.Worksheets(1)
ComboBox3.RowSource = .Range(.Range("c1"), .Range("c1").End(xlDown)).Address
End With
End Sub
Hab auch mal die Datei angehängt.
https://www.herber.de/bbs/user/54400.xls
Problem ist jetzt noch, dass aufgrund der CB.Values ein bestimmtes Makro aufgerufen werden soll. In diesem Makro möchte ich aber die CB.Values weiter nutzen. Ist das überhaupt möglich?
Da ich ja nicht weiß, was im Laufe des Jahres an Projekten und Aufgaben hinzukommt, kann ich nicht mit direkten "Wörtern" bei Case arbeiten.
Es gibt halt schon Programmierungen, die ich vorher erstellt habe, die für sich über Makros auch einwandfrei funktionieren, aber ich wollte nicht so viele Schaltflächen in meiner Symbolleiste haben und halt alles etwas vereinfachen durch ne CB. Damit hätten es meine Vertretungen, wenn ich im Urlaub bin auch um einiges einfacher, weil die sich nicht so viele einzelnen Schritte merken müssten.
Vielen Dank auch für Deine Hinweise zu Schulungen. Komme aus Braunschweig und möchte halt nicht auf irgendwelche windigen Leute reinfallen. Kann man es sich auch mit einen Kaufkurs selbst beibringen? Kannst Du da was empfehlen? Die Kosten würde ich selbst übernehmen, wenn die Fa. nichts zuzahlt.
Gruß
Peter
![]() |
Betrifft: AW: ComboBox
von: Peter R
![]() |
Betrifft: AW: ComboBox
von: Roland Hochhäuser
Geschrieben am: 07.08.2008 12:17:48
Hallo Peter,
die Fehlermeldung kommt, weil Call eben eine Prozedur etc. erwartet, Cb1, cb2 usw. aber als lokale Variable deklariert sind. Wenn Du Prozeduren aufrufen willst, müsstest Du schreiben Call Prozedurname oder eben nur Prozedurname (z.B. Call CommandButton2_Click oder einfach nur CommandButton2_Click).
Gruß
Roland Hochhäuser
![]() |