Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1152to1156
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

IndexNr eines Elementes ermitteln

IndexNr eines Elementes ermitteln
siegfried
Hallo zusammen,
zur Zeit verwende ich den folgenden Code, um Elemente einer UserForm anzusprechen.
Private Sub ComboBox1_Change()
Dim iBox As Long
' Wert wie IndexNr der ComboBox
iBox = 1
Controls("ComboBox" & iBox).Value = Format(Controls("ComboBox" & iBox).Value, "hh:mm")
End Sub
Beim Kopieren dieses Codes in weitere ComboBoxen brauche ich nur die IndexNr anpassen.
Da ich von Natur aus aber faul bin und zudem Schreibfehler ausschließen will, suche ich eine Möglichkeit, die IndexNr direkt in dem entsprechenden Code zu ermitteln, ohne sie anpassen zu müssen.
Geht das?
und wenn, Wie?
Gruß Siegfried

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
vielleicht mit einer Schleife...
22.04.2010 18:05:29
Tino
Hallo,
meinst Du so?
Dim oControl As Control
For Each oControl In Me.Controls
If TypeName(oControl) = "ComboBox" Then
If oControl.ListIndex > -1 Then _
oControl.Value = Format(oControl.Value, "hh:mm")
End If
Next oControl
Gruß Tino
AW: vielleicht mit einer Schleife...
22.04.2010 19:10:04
siegfried
Hallo Tino,
Deine Schleife zeigt mir alle vorhandenen ComboBoxen an.
Ich brauche aber genau die Box in der der Code steht und auch nur diese eine Box.
Also nicht ComboBox1 bis X, sondern z.B. nur ComboBox1.
Die Idee mit dem Rahmen stellt mich vor das AusgangsProblem, zusätzlich müsste ich dabei auch die IndexNr des Rahmens ermitteln.
Gruß
Siegfried
Anzeige
Klassenprogrammierung
22.04.2010 19:49:17
Tino
Hallo,
mir fällt da nur was mit Klassenprogrammierung ein.
Bsp. für Combobox 1,2 und 5 bis 10
kommt als Code in UserForm1
Option Explicit 
Dim objCombo() As New Klasse1 
 
 
Private Sub UserForm_Initialize() 
Dim oControl As Control, i As Integer 
Dim meArData 
 
For Each oControl In Me.Controls 
    If TypeName(oControl) = "ComboBox" Then 
      Select Case Val(Replace(oControl.Name, "ComboBox", "")) 
        'Beispiel für ComboBox 1,2 und 5 bis 10 
        Case 1, 2, 5 To 10 
            Redim Preserve objCombo(i) 
            Set objCombo(i).objComboBox = oControl 
            i = i + 1 
      End Select 
    End If 
Next oControl 
 
 
'Mit Beispiedaten füllen 
meArData = Range("A1:A30") 
 
ComboBox1.List = meArData 
ComboBox2.List = meArData 
ComboBox5.List = meArData 
ComboBox6.List = meArData 
ComboBox7.List = meArData 
ComboBox8.List = meArData 
ComboBox9.List = meArData 
ComboBox10.List = meArData 
End Sub 
 
 
kommt als Code in Klasse1
Option Explicit 
 
Public WithEvents objComboBox As MSForms.ComboBox 
 
 
Private Sub objComboBox_Change() 
If objComboBox.ListIndex > -1 Then _
    objComboBox.Value = Format(objComboBox.Value, "hh:mm") 
End Sub 
Gruß Tino
Anzeige
AW: Klassenprogrammierung
22.04.2010 20:53:36
siegfried
Hallo Tino
auch wenn Deine Idee nicht den unmittelbaren Vorstellungen entsprach, hat sie mich auf eine Spur gesetzt, mit der ich zum Ziel gekommen bin.
Danke
Gruß
Siegfried
oder in einem Rahmen
22.04.2010 18:12:18
Tino
Hallo,
Du könntest auch die entsprechenden Elemente in einem Rahmen (Frame) platzieren und
diese so durchlaufen.
Dim oControl As Control
For Each oControl In Me.Frame1.Controls
If oControl.ListIndex > -1 Then _
oControl.Value = Format(oControl.Value, "hh:mm")
Next oControl
Gruß Tino

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige