这是我第一次提出问题,而且我是一般的编程新手,如果我打破常见的客户,我会提前道歉。
背景:我有近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