VisualBasic VBA Excel Cmd Buttons und textbox in Array zusammenfassen

Pyrukar

Captain
Registriert
Jan. 2013
Beiträge
3.473
hallo,

ich habe eine Userform in der ich ein relativ großes Array modifizieren möchte.

ich habe allso z.b. ein Array(20) und dann eine Liste mit 20 cmd Buttons oder eben 20 textboxen.

ich möchte jetzt mit den 20 textboxen das Array inizial mit werten Befüllen und dann wenn ich auf die Cmd Boxen drücke soll mit dem entsprechenden Array wert etwas durchgeführt werden. (z.b. array(i)=array(i)+1)

gibt es also eine Möglichkeit gerade das Befüllen mit einer Schleife durchzuführen? sprich Textboxen einen index zuzuweisen dass ich schreiben kann

for i=1 to 20

array(i)=textbox(i)

next i

gruß

Pyrukar
 
Ich hab mal sowas ähnliches gemacht. Vielleicht nicht der ideale Code, aber es hat funktioniert soweit ich weiß. Die beiden Funktionen geben natürlich nur die entscheidenden Stellen wieder. Zusammenbauen musst du das natürlich selbst bevor es funktioniert

Code:
'Returns string array of all checkboxes whose names end with sSelect, are bSelected and enabled.'

Public Function getCheckboxNames(Optional ByVal sSelect As String = "all", Optional ByVal bSelected = True) As Variant
    Dim iCheckBoxCounter As Integer
    Dim wsSheet As Worksheet
    Dim obj As OLEObject
    Dim sCurrentName As String
    Dim sCheckboxNames() As Variant
    
    ReDim sCheckboxNames(0 To 100)
        
    Set wsSheet = ThisWorkbook.Sheets(1)
    
    iCheckBoxCounter = 0
    For Each obj In wsSheet.OLEObjects
        If TypeName(obj.Object) = "CheckBox" Then
            sCurrentName = obj.Name
            If StrComp(sSelect, "all") = 0 Or StrComp(Right(sCurrentName, 2), sSelect) = 0 Then
                If obj.Object.Value = bSelected And obj.Object.Enabled = True Then
                    sCheckboxNames(iCheckBoxCounter) = obj.Name
                    iCheckBoxCounter = iCheckBoxCounter + 1
                    'Debug.Print "Added: " & obj.Name'
                End If
            End If
        End If
    Next obj
    
    If iCheckBoxCounter > 0 Then
        iCheckBoxCounter = iCheckBoxCounter - 1
        ReDim Preserve sCheckboxNames(0 To iCheckBoxCounter)
    Else
        Erase sCheckboxNames
    End If
    
    getCheckboxNames = sCheckboxNames

End Function



Private Sub button_select_all_corrections_Click()
    Static bSelect As Boolean
    
    Dim sCheckboxNames() As Variant
    Dim sCheckBox As Variant
 
    'get all checkboxes with values that have to be altered'
    sCheckboxNames = Util.getCheckboxNames("all", Not bSelect)
    If Not Util.IsVarArrayEmpty(sCheckboxNames) Then
        For Each sCheckBox In sCheckboxNames
            'Debug.Print "Altering: " & sCheckBox'
            ThisWorkbook.Sheets(1).OLEObjects(sCheckBox).Object.Value = bSelect
        Next sCheckBox
    End If
    
    bSelect = Not bSelect
End Sub
 
Zurück
Oben