循环遍历excel范围并从范围填充文本框

时间:2015-03-18 22:50:11

标签: excel vba excel-vba userform ranged-loops

我目前正在使用Excel中的用户表单。它当前从数据库中提取列表并将其粘贴到excel中,然后在选择某个名称时引用该数据以在文本框中自动填充。

我遇到的问题是我还希望自动填充工作人员将拥有的某些系统的访问权限。基本上,电子表格包含公司内的所有员工以及他们对由2个单元组成的特定系统的访问权限(系统和权利,列K和L)。我已经定义了我希望使用的范围,但我现在卡住了。

如何让excel循环遍历范围"复制并粘贴"来自每个单元格(例如K2和l2)的数据到用户表单中的文本框中。所以我想要发生的是选择某人的名字,它会自动浏览所有访问详细信息,并使用该访问权限自动填充一些文本框。

我目前的代码如下。     Private Sub cboStaffNumber_Change()

Dim rngCell As Range
Dim rngNumber As Range
Dim lngRow As Long
Dim lngRangeStart As Long
Dim lngRangeEnd As Long
Dim lngLastRow As Long
Dim rngColumn As Range
Dim rngEntitlement As Range
Dim rngAccess As Range

Set rngNumber = Range("A2:A" & lngStaffDataLastRow)

'Fills in the Staff Name, OIA Template, Division, Job Title and WAP Code fields when a staff member is selected
    If bCboBool = False Then
        If Me.cboStaffNumber.ListIndex > 0 Then
            For Each rngCell In rngNumber.Cells
                If rngCell.Value = Val(cboStaffNumber.Value) Then
'                    lngRangeStart = rngCell.Row
                    bCboBool = True
                    Me.cboStaffName = rngCell.Offset(0, 1)
                    Me.txtOIATemplate = rngCell.Offset(0, 9)
                    Me.txtDivision = rngCell.Offset(0, 7)
                    Me.txtJobTitle = rngCell.Offset(0, 2)
                    Me.txtWAP = rngCell.Offset(0, 3)
                    Exit For
                End If
            Next rngCell
        Else
            Me.cboStaffName.Value = ""
            Me.txtOIATemplate.Value = ""
            Me.txtDivision.Value = ""
            Me.txtJobTitle.Value = ""
            Me.txtWAP.Value = ""
        End If
    End If

For lngRow = 2 To lngLastRow
    If rngNumber.Cells(lngRow, 1).Value = Val(cboStaffNumber.Value) Then
        lngRangeStart = lngRow
        Exit For
    End If
Next lngRow

'    For lngRow = lngRangeStart To lngLastRow + 1
'        If rngNumber.Cells(lngRow, 1).Value <> Val(cboStaffNumber.Value) Then
'            lngRangeEnd = lngRow
'            Exit For
'        End If
'    Next lngRow
'
'    If lngRow <> 0 Then
'        lngRangeEnd = lngRangeEnd - 1
'    End If
'
'    For rngAccess = lngRangeStart To lngRangeEnd
'        Set rngCell = lngRangeStart.Cells(rngCell, 11)
'            For Each rngCell In rngAccess
'                Set txtAccess1 = rngCell
'                Exit For
'    Next rngAccess



    bCboBool = False




End Sub`

非常感谢任何帮助。

由于

1 个答案:

答案 0 :(得分:0)

以下内容应为您提供循环的基础知识,并根据员工编号更新变量,其中包含员工成员的每个系统和访问单元格的值。您需要将[]中的值更改为表单中的命名值。它也适用于你定义的原始范围&#39; rngNumber&#39;。我没有对它进行测试,但一眼就能看出来。让我知道它是怎么回事。

strSystem = ""
strAccess = ""
For Each rngCell In rngNumber.Cells
     If rngCell.Value = Val(cboStaffNumber.Value) Then
          strSystem = strSystem & rngCell.Offset(0,10).value & ", "
          strAccess = strAccess & rngCell.Offset(0,11).value & ", "
     End If
Next rngCell
If len(strSystem) > 0 then
     strSystem = Left(strSystem, len(strSystem)-1)
End If
If len(strAccess) > 0 then
     strAccess = Left(strAccess , len(strAccess)-1)
End If
Me.[txtSystemBox] = strSystem 
Me.[txtAccessBox] = strAccess