我正在使用2个连续循环,但1个未运行(vba)

时间:2014-01-28 14:58:07

标签: arrays vba search nested-loops

这是我第一次提出问题,而且我是一般的编程新手,如果我打破常见的客户,我会提前道歉。

背景:我有近12000名员工记录,以12000 * 5的矩阵组织,列标题1)员工姓名,2)员工经理,3)员工名称,4)业务单位,5)业务师。

员工职称:1)其他,2)董事,3)副总裁,4)高级副总裁,5)执行副总裁,6)CEO

我的目标:我正在尝试使用msg框生成搜索,该框将返回输入的“业务单位”的最高员工,例如,当Msgbx弹出时,您输入“财务”,最高的VP将是如果该部门有4个副总裁,那么将在该部门中填充,然后将返回所有4个副总裁。

挑战:在我的组织中,VP向其他VP报告,SVP向其他SVP报告;但我们也有一些情况,SVP没有向董事会报告他们的副总裁。即我需要垂直循环(相同的层次结构以找到最高的VP),并横向循环,以查找不在同一层次结构中但报告给同一SVP的其他VP。

以下代码能够返回特定层次结构中特定业务单位的最高级别VP,但它不会返回同一业务单位的其他VP。我相信我的外部循环不能正常工作。谢谢,我感谢您提供的任何帮助。

Sub GetHighestVP()
    Dim HighestVPLevel As Integer
    Dim HighestVPName As String
    HighestVPLevel = 0                  ' starting value.
    'dim wsSheet As Worksheet
    Dim strVPNames() As String
    Dim blDimensioned As Boolean        'is the array dimensioned?
    Dim strText As String               'temporarily hold names as string
    Dim lngPosition As Long             'Counting the number of VPs

    blDimensioned = False               'it seems like  i need to dimension my array? i am not sure of the syntax here...

    Dim DeptToFind As String
    DeptToFind = InputBox("What Department?")

    Dim EndRow As Integer


    EndRow = Range("C1").End(xlDown).Row

    Dim Cntr As Integer

    Do
      For Cntr = 2 To EndRow
          Range("C" & Cntr).Select
          If ActiveCell.Value = DeptToFind Then
              If ActiveCell.Offset(, 2).Value < 5 Then ' because we don't want to get the CEO
                  If ActiveCell.Offset(, 2).Value > HighestVPLevel Then
                      HighestVPLevel = ActiveCell.Offset(, 2).Value
                      HighestVPName = ActiveCell.Offset(, -2).Value
                  End If
                     strText = HighestVPName             'Ask for HighestVPName
                      If strText <> "" Then
                         If blDimensioned = True Then    'populating my array
                              ReDim Preserve strVPNames(0 To UBound(strVPNames) + 1) As String

                              strVPNames(UBound(strVPNames)) = strText

                          Else
                              ReDim strVPNames(0 To 0) As String
                              blDimensioned = True
                          End If
                      End If
                End If
          End If


        For lngPosition = LBound(strVPNames) To UBound(strVPNames)
            MsgBox strVPNames(lngPosition)
        Next lngPosition
    Next
Loop Until strText = ""   'stop the loop once there are no morereturned values 

End Sub

0 个答案:

没有答案