Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema InputBox
BildScreenshot zu InputBox InputBox-Seite mit Beispielarbeitsmappe aufrufen
Informationen und Beispiele zum Thema MsgBox
BildScreenshot zu MsgBox MsgBox-Seite mit Beispielarbeitsmappe aufrufen
Informationen und Beispiele zum Thema CommandButton
BildScreenshot zu CommandButton CommandButton-Seite mit Beispielarbeitsmappe aufrufen
Informationen und Beispiele zum Thema Userform
BildScreenshot zu Userform Userform-Seite mit Beispielarbeitsmappe aufrufen

ComboBox

Betrifft: ComboBox von: Peter R
Geschrieben am: 06.08.2008 11:39:02

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
Geschrieben am: 06.08.2008 11:50:06

Hallo Roland,

die Combo befindet sich in einer Userform und die bisherigen sind über additem reingeschrieben.

Gruß

Peter


  

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
Geschrieben am: 06.08.2008 12:17:22

Hallo Roland,

vielen Dank. Werde es heute noch ausprobieren und Rückmeldung erstatten.

Es ist dann aber auch so, dass das neu angelegte Projekt in dem Initialize dauerhaft gespeichert wird?

Gruß

Peter


  

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
Geschrieben am: 06.08.2008 12:36:54

Hallo Roland,

genau da ist das Problem. Im Laufe des Jahres kommen neue Projekte hinzu, deren Namen ich aber noch nicht kenne! Du meinst also, über eine Hilfstabelle, wo man die Projekte einmal einträgt und die uf dann auf diese Tabelle (Bereich zugreift). Könnte ja die noch nicht benannten Projekte erstmal mit Projekt1 oder ähnlich bezeichen und im nachhinein nur ändern. Mal sehen, wie weit ich komme. :-)

Erstmal vielen Dank. Ich lass die Frage aber offen, falls noch andere Ideen vorhanden sind.

Gruß

Peter


  

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
Geschrieben am: 06.08.2008 17:41:27

Hallo Peter,

dann zeig mal deinen Code (ggfs. Tabelle hochladen), damit ich sehen kann, wo es klemmt.

Gruß
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
Geschrieben am: 06.08.2008 19:17:57

Hallo Peter,

Du kommst jetzt mit einer völlig andere Aufgabenstellung, zunächst ging es doch um das Abspeichern von per Inputboxen hinzugefügten Items zur Combobox _einer_ Userform. Das kann man so machen:

Option Explicit

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
Geschrieben am: 07.08.2008 09:49:57

Moin Peter,

die jeweils aktuelle Anzeige (Wert) der Combobox kannst du mit Combobox.value ermitteln und dann deinem Ansatz entsprechend weiter verzweigen, also case "Auftragskennzahlen für EK bearbeiten" - Userform2.Show (ohne Call). Wenn Du es allgemeiner machen möchtest, gehst Du am besten über ComboBox1.ListIndex (spätestens das führt aber zur Notwendigkeit einer Fehlerbehandlung). Für den Anfang hast Du Dir mit mehreren Userformen / Steuerelementen einen schweren Brocken vorgenommen.

Aber um hier mal weiter zu kommen: Was funktioniert denn nicht ?

Gruß
Roland Hochhäuser

PS: Lehrgänge / Kurse zu Softwarethemen gibt es m.W. genügend, insbesondere Excel-VBA-Einsteiger werden eigentlich gut bedient. Das praktische Problem ist (neben dem Loseisen der Teilnahmekosten beim Arbeitgeber als Fortbildungsmaßnahme) festzustellen, ob der angebotene Kurs überhaupt stattfindet. In Berlin z.B. gibt es ein Überangebot / verknappte Nachfrage (je nach Sichtweise), was im Ergebnis zu Verlegungen / Verkürzungen des Kurses bei wenigen Teilnehmern führt / führen muss und dann "wird´s heftig" und man weiß anschließend, was man getan hat.


  

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
Geschrieben am: 07.08.2008 11:53:28

Hallo Roland,

hab vergessen die Frage offen zu halten.

Habs inzwischen hingekriegt, die richtigen Makros aufzurufen.
Musste nur die Variablen der cbs public deklarieren und schon funktionierts. Wie gesagt: LEARNING BY DOING :-)
Muß jetzt halt noch ein wenig rumprobieren, aber das Grundgerüst steht erstmal.

Vielen lieben Dank für Deine Hilfe und Ausführungen. Erst die haben mich mit viel suchen (wegen den anderen Kleinigkeiten :-) ) auf den richtigen Weg gebracht.

Gruß

Peter


  

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


 

Beiträge aus den Excel-Beispielen zum Thema "ComboBox"