Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema MsgBox
BildScreenshot zu MsgBox MsgBox-Seite mit Beispielarbeitsmappe aufrufen
Informationen und Beispiele zum Thema Userform
BildScreenshot zu Userform Userform-Seite mit Beispielarbeitsmappe aufrufen
Informationen und Beispiele zum Thema ListBox
BildScreenshot zu ListBox ListBox-Seite mit Beispielarbeitsmappe aufrufen
Informationen und Beispiele zum Thema TextBox
BildScreenshot zu TextBox TextBox-Seite mit Beispielarbeitsmappe aufrufen

AddItem bei ComboBox/Sortieren | Herbers Excel-Forum


Betrifft: AddItem bei ComboBox/Sortieren von: Nick
Geschrieben am: 25.11.2009 23:00:43

Hallo,

ich versuche gerade folgendes zu realisieren:

Ichhabe eine TextBox1 in die ich Zahlen eingeben kann, welche in der ComboBox als Zehnfaches ausgegeben werden (siehe VBA-Code). Um jetzt aber Zahlen kleiner als Zehnerschritte in die ComboBox1 mit aufzunehmen habe ich mittels Doubleclick schon einmal die Eingabe ermöglicht. Jetzt müsste noch der neue Zahleneintrag mittels AddItem denke ich in die Liste aufgenommen werden (vlt. eine KeyUp-Function?) . Schön wäre natürlich, wenn diese auch noch in einer richtigen Reihenfolge eingeordnet würde.

Hier mal ein Beispiel:
https://www.herber.de/bbs/user/66179.xls

Schöne Grüße,

Nick

  

Betrifft: hol Dir doch die Schrittfolge aus einer Zelle von: Matthias L
Geschrieben am: 26.11.2009 05:56:48

Hallo Nick

Keine Ahnung, ob ich Dich richtig verstanden habe
Habs mal nach meinen Vorstellungen umgesetzt.

https://www.herber.de/bbs/user/66182.xls



Gruß Matthias


  

Betrifft: AW: hol Dir doch die Schrittfolge aus einer Zelle von: Nick
Geschrieben am: 26.11.2009 07:16:46

Guten Morgen Matthias,

vielen Dank für deine Hilfe und die graphische Aufbereitung.

Ich wollte keine Schrittfolge vorgeben, sondern nur sporadisch hier und da eine Nummer zulassen, z.B.

10
20
23 <- Eingabe nach Doppelclick
30
40
47 <- Eingabe nach Doppelclick
50
60
...
Schöne Grüße,

Nick


  

Betrifft: hab noch keinen Plan. sorry von: Matthias L
Geschrieben am: 26.11.2009 11:44:18

Hallo Nick

Hab zwar schon ein wenig probiert, aber leider noch keine zufriedenstellende Lösung gefunden.
Im Moment sitzt mir jetzt die Zeit im Nacken.

Gruß Matthias


  

Betrifft: AW: hab noch keinen Plan. sorry von: Nick
Geschrieben am: 26.11.2009 19:04:34

Hi Matthias,

also mit der TextBox möchte ich nur eine Anzahl möglicher Kombinationen festlegen. Diese werden ja als Zehnfaches in der Combobox wiedergegeben. Jetzt ist ja generell nur die Auswahl der Zehnerschritte möglich.

Ich möchte jetzt nach Bedarf dem Bediener auch ermöglichen, Zahlen in die ComboBox zu ergänzen, die nicht das Zehnfache sind beispielsweise eine 34. Um die Eingabe zu ermöglichen, habe ich diese Doubleclick function gewählt. Fraglich ist nun, mit welcher Function die Zahl nun in die bestehende Liste aufgenommen werden kann (AddItem). Zusätzlich wäre es schön, wenn sie nicht nur am Ende der Liste erscheint, sondern der Größenordnung sortiert zwischen der nächst kleineren und größeren Zahl platziert wird.

Ich hoffe, dass es verständlich ist?

Schöne Grüße, Nick


  

Betrifft: AW: hab noch keinen Plan. sorry von: fcs
Geschrieben am: 27.11.2009 04:24:16

Hallo Nick,

mit dem nach folgenden Makro werden die im Auswahlfeld der Combobox eingegebenen Werte ggf. in der Liste nachgetragen. Mit dem Doppelklick kriegt man das wohl nicht hin.

Wenn noch eine Sortierung einbauen willst (suche im Forumsarchiv nach Lösung), dann muss diese vor der erneuten Zuweisung des eingegeben Wertes erfolgen.

Gruß
Franz

Private Sub ComboBox1_LostFocus()
  Dim strValue As Variant
  With Me.ComboBox1
    If .ListIndex = -1 Then
      strValue = .Value
      .AddItem strValue
      .Value = strValue
    End If
  End With
End Sub



  

Betrifft: noch eine Ergänzung zu fcs Vorschlag von: Matthias L
Geschrieben am: 27.11.2009 08:52:32

Hallo Nick

Das Beispiel von fcs find ich gut. :o)

Vorschlag:
Bau die fett markierte Zeile mit ein, sonst hast Du, wenns ungünstig läuft
irgendwann eine Liste mit 10 oder mehr leeren Einträgen.

Private Sub ComboBox1_LostFocus()
  Dim strValue As Variant
  With Me.ComboBox1
    If .ListIndex = -1 Then
      strValue = .Value
      If .Value <> "" Then .AddItem strValue
      .Value = strValue
    End If
  End With
End Sub
Wäre nett, wenn Du eine Lösung fürs Sortieren gefunden hast, diese auch hier mitzuteilen.
Das hätte dann den positiven Nebeneffekt, das ich und/oder andere Excelfreunde
auch noch etwas dazulernen.

Gruß Matthias


  

Betrifft: AW: Listbox, Combox sortieren von: fcs
Geschrieben am: 27.11.2009 12:29:39

Hall Nick und Mathias,

hier ein von mir aus dieser Quelle ( https://www.herber.de/forum/archiv/640to644/t643881.htm#643949 ) leicht modifizierter Code zum Sortieren von per AddItem oder Array-Zuweisung für List erstellten Auswahllisten von Comboboxen und Listboxen.

Gruß
Franz

'modifizierter Code für ComboBox1_Lostfocus im Tabellenmodul
Private Sub ComboBox1_LostFocus()
  Dim strValue As Variant, objBox As Object
  'Eingegebener Wert, der noch nicht in Auswahliste ist, wird ergänzt
  With Me.ComboBox1
    If .ListIndex = -1 And .Value <> "" Then
      strValue = .Value
      .AddItem strValue
      Set objBox = Me.ComboBox1
      SortBox cltBox:=objBox, intSpalten:=1, intSpalte:=1, bytWie:=2
      .Value = strValue
    End If
  End With
End Sub



'####   Code in einem allgemeinen Modul    #####
'Original leicht modifiziert - cltBox als Object statt Control deklariert, so funktioniert es _
  für List-/Comboboxen in Tabellen und Userforms
' Quelle Original: http: _
//www.herber.de/forum/archiv/640to644/t643881.htm#643949

Option Explicit

Sub SortBox(cltBox As Object, intSpalten As Integer, _
            intSpalte As Integer, Optional bytWie As Byte = 1)
' So DIS 28.04.05 - modified fcs
' SortBox sortiert nicht gebundene List- und Comboboxen. Gebundene List- und Comboboxen
' (Angaben bei RowSource oder ListFillRange können nicht sortiert werden!!!)
' cltBox     : Name der Listbox die sortiert werden soll (als Object!!!!).
' intSpalten : Wieviele Spalten sollen mit sortiert werden. Sollte der Anzahl der Spalten
'              in der Listbox entsprechen
' intSpalte  : Nach welcher Spalte soll sortiert werden.
' bytWie     : 1 oder Nicht angegeben als Text
'            : 2 als Zahl, dann muß die ganze Spalte Zahlen enthalten.
'            : 3 als Datum, dann muß die ganze Spalte Datumwerte enthalten.
' Aufruf zum Beispiel so: ListBox1 mit 7 Spalten, Sortierung nach Spalte 1 Sortierordnung Text
' SortBox ListBox1, 7, 1  oder SortBox ListBox1, 7, 1, 1
' Oder so    : Listbox17 mit 2 Spalten, Sortierung nach Spalte 2 Sortierordnung Zahlen
' SortBox ListBox17, 2, 2, 2
' oder so eine Spalte, sortiert nach Zahl
' SortBox cltBox:=objBox, intspalten:=1, intSpalte:=1, bytWie:=2
Dim intLast As Integer, intNext As Integer, intCounter As Integer, intFehler As Integer
Dim strTmp As String, strFehlertext As String
Dim variLast As Variant, variNext As Variant

On Error GoTo Errorhandler

intFehler = 0

With cltBox
    For intLast = 0 To .ListCount - 1
        For intNext = intLast + 1 To .ListCount - 1
            Select Case bytWie
                Case 1
                    intFehler = 0
                    variLast = CStr(.List(intLast, intSpalte - 1))
                    variNext = CStr(.List(intNext, intSpalte - 1))
                Case 2
                    intFehler = 1
                    variLast = CDbl(.List(intLast, intSpalte - 1))
                    variNext = CDbl(.List(intNext, intSpalte - 1))
                Case 3
                    intFehler = 2
                    variLast = CDate(.List(intLast, intSpalte - 1))
                    variNext = CDate(.List(intNext, intSpalte - 1))
            End Select
            
            intFehler = 0
            If variLast > variNext Then
                For intCounter = 0 To intSpalten - 1
                    strTmp = CStr(.List(intLast, intCounter))
                    .List(intLast, intCounter) = CStr(.List(intNext, intCounter))
                    .List(intNext, intCounter) = strTmp
                Next intCounter
            End If
        Next intNext
    Next intLast
End With
Exit Sub

Errorhandler:
Select Case intFehler
    Case 0
        strFehlertext = "In der Listbox Sortierung ist ein Fehler aufgetreten !"
    Case 1
        strFehlertext = "Nicht alle Werte in der zu sortierenden Spalte sind Zahlen !"
    Case 2
        strFehlertext = "Nicht alle Werte in der zu sortierenden Spalte sind Datumswerte !"
    Case Else
        strFehlertext = "Unerwarteter Fehler !"
End Select

MsgBox strFehlertext & " Bitte informieren Sie 'So' ! " & vbCr & vbCr & _
       "Fehler aufgetreten in " & cltBox.Name & " !" & vbCr & _
       "Fehlernummer = " & Err.Number & vbCr & _
       "Fehlerbeschreibung = " & Err.Description & vbCr & _
       "Fehlersource = " & Err.Source, vbCritical, " Meldung vom Makro SortBox !"
 
End Sub



  

Betrifft: AW: Listbox, Combox sortieren von: Nick
Geschrieben am: 27.11.2009 19:59:31

Hallo Franz, hallo Matthias,

wow. Ihr habt was drauf! Vielen Dank für die schnelle Hilfe.

Schöne Grüße,

Nick