I keep getting that error when I open my form in which I have control that are dynamically created.

ERROR 340: Control array element 0 doesn't exist

6 Years
Discussion Span
Last Post by billmaster

I have 3 controls being dynamically created

        ClsControls1.Index = 0
        ClsControls1.Name = "_TTCbo_0"
        ClsControls2.Index = 1
        ClsControls2.Name = "_TTCbo_1"
        ClsControls3.Index = 2
        ClsControls3.Name = "_TTCbo_2"
        ClsControls4.Index = 3
        ClsControls4.Name = "_TTCbo_3"
        ClsControls5.Index = 0
        ClsControls5.Name = "_cmdCommand_0"
        ClsControls6.Index = 1
        ClsControls6.Name = "_cmdCommand_1"
        ClsControls7.Index = 0
        ClsControls7.Name = "_optOption_0"
        ClsControls8.Index = 1
        ClsControls8.Name = "_optOption_1"

I'm betting that if you step through that code with F8, you will find your error at the line control.index = 0, because at that point, it has not been created yet...

Also, if you want to create controls and have them in an array, then you need to set the control on the form at design time and set its index to zero and load copies from there...

Another Also, the reason we have control arrays is because several controls can have the "SAME" name, i.e. Label1 and each is then referenced by its index number (0), and the reason I bring this up is because you are naming controls ttbco_0, ttbco_1 and as such they are not considered an array because each control as a seperate and unique identifier...

Good Luck


'Simple example of adding controls dynamically at runtime.
'Be sure a CommandButton with name = "Command1" and Index=0 is on the form prior to running code.

Private Sub Command1_Click(Index As Integer)
    MsgBox "This command button's index in the array is " & Index & "."
End Sub

Private Sub Form_Load()
    addRTC  'this will be control with index = 1
    addRTC  'this will be control with index = 2
    'Remember control with index = 0 must already exist
End Sub
Public Sub addRTC()
'Add control dynamically at run time
Dim ctlCount As Integer
Dim NewIndex As Integer
Dim I As Integer
    'Check to see that first control exists
    ctlCount = -1
    For I = 0 To Me.Controls.Count - 1
        If Me.Controls(I).Name = "Command1" Then
            ctlCount = ctlCount + 1
        End If
    Next I
    NewIndex = ctlCount + 1
    Command1(NewIndex - 1).Visible = True
    'Create New Control and Set Properties
    Load Command1(NewIndex)
    With Command1(NewIndex)
        .Caption = Command1(0).Name & "(" & Str(NewIndex) & ")"
        .Top = Command1(NewIndex - 1).Top + Command1(NewIndex - 1).Height + 100
        .Left = Command1(NewIndex - 1).Left
        .Width = Command1(NewIndex - 1).Width
        .Visible = True
    End With
End Sub

'This should get you started ...

This article has been dead for over six months. Start a new discussion instead.
Have something to contribute to this discussion? Please be thoughtful, detailed and courteous, and be sure to adhere to our posting rules.