2
votes

This question is a "part 3" of a project I'm working on. After adding multiple labels and textboxes to an Excel userform during runtime using vba and retrieving data from multiple textboxes created during runtime in an Excel userform using vba, I'm now trying to use all that data to select the names in the dropdown boxes to assign work to.

enter image description here

The issue I'm having is, I have the code set up to loop through MyArray(i) from LBound to UBound that gives us the names of the employees, as it does this, it is also looping through an array created by splitting MultFLNAmt that was retrieved from the UserForm so we can determine how many FLNs each employee will receive, then it also loops through to find the name of the current employee selected to assign to. Once all of this is done and everyone has the correct amount of FLNs assigned, it will click the Submit button in the application to finish the assignment.

' Shows and hides the multiple option UserForm
MultipleOptionForm.Show

MultipleOptionForm.Hide

' Creates an array from a comma-delimited
' list of numbers stored in a variable
MFA = Split(MultFLNAmt, ",")

' Activates the application we will be assigning work from
WShell.AppActivate "Non-Keyable Document Management System"

' Table cell node where the dropdown is located
tdNode = 64
a = 1

' Loop through each of the names within the array
For c = LBound(MyArray) + 1 To UBound(MyArray) - 1
    ' Loop through the array to see how many FLNs each person receives
    For b = 1 To MFA(a)
        ' Loop through to locate the current name of the employee
        i = 0
        For Each objOption In objIE.Document.GetElementsByTagName("table")(0).GetElementsByTagName("td")(tdNode).GetElementsByClassName("txt_input1")(0).Options
            Q(i) = objOption.Text & "-" & objOption.Value

            strWQ = Q(i)
            ' Remove "Selected User" from the list of options
            If i = 0 Then
                If strWQ = "--Select User---" Then strWQ = ""
            Else
                ' If an option matches the current name selected,
                ' select that option, then increase the node location
                ' for the next dropdown box
                If InStr(strWQ, MyArray(c)) Then
                    objOption.Selected = True
                    objIE.Document.GetElementsByTagName("table")(0).GetElementsByTagName("td")(tdNode).GetElementsByClassName("txt_input1")(0).OnChange
                    tdNode = tdNode + 23
                Else
                    objOption.Selected = False
                End If
            End If
        Next            
        i = i + 1            
    Next
Next

objIE.Document.all.Item("btn_submit1").Click

While the code is working for the most part, where it's failing is, if MFA(a) is 2 or more, only the first dropdown is selected. I put the code in debugging mode and I'm not seeing why 2 or more are not being selected. Any ideas?

1

1 Answers

0
votes

After a lot of research, I finally figured out how to get my project to work.

' This line allows for growth/shrinkage of the list of employees
MultipleOptionForm.Height = (UBound(MyArray) - 1) * 20

' This line shows the form
MultipleOptionForm.Show

' This line hides the form after being updated
MultipleOptionForm.Hide

' Creates an array from a comma-delimited
' list of numbers stored in a variable
MFA = Split(MultFLNAmt, ",")

' Activates the application we will be assigning work from
WShell.AppActivate "Non-Keyable Document Management System"

' Table cell node where the dropdown is located
tdNode = 64
' MFA index
a = 1

' Loop through each of the names within the array
For c = LBound(MyArray) + 1 To UBound(MyArray) - 1
    ' Loop through the array to see how many FLNs each person receives
    For b = 1 To MFA(a)
        ' Starts loop at first drop down
        On Error Resume Next
            For Each objOption In objIE.Document.GetElementsByTagName("table")(0).GetElementsByTagName("td")(tdNode).GetElementsByClassName("txt_input1")(0).Options
                ' Stores options within drop down
                strWQ = objOption.Text & "-" & objOption.Value
                If IsEmpty(strWQ) Then
                    Exit Sub
                End If
                ' Remove "Selected User" from the list of options
                If strWQ = "--Select User---" Then
                    strWQ = ""
                Else
                    ' If there's a match between the drop down for the list
                    ' and the list of assigned FLNs, begin assigning
                    If InStr(strWQ, MyArray(c)) Then
                        objOption.Selected = True
                        objIE.Document.GetElementsByTagName("table")(0).GetElementsByTagName("td")(tdNode).GetElementsByClassName("txt_input1")(0).OnChange
                        tdNode = tdNode + 23
                        Exit For
                    Else
                        objOption.Selected = False
                    End If
                End If
            Next
        On Error GoTo 0
    Next
Next