我想要达到的目标
我有两张纸:“仪表板”和“临时计算”。
仪表板包含所有员工详细信息,范围“N1”“N2”包含日期。
现在一个宏填充员工数据并生成一个按日日历,如下图所示,
“temp calc”有他们的项目详细信息和开始日期结束日期。(此处删除仪表板表中不介于 n1 和 n2 日期之间的日期) .
因此,现在从仪表板表中引用他们的 empid,并使用在仪表板表中填充的第一天,我循环遍历临时计算表中的 emp id,并返回员工当前在特定日期工作的项目数量的计数。如下图所示。
我如何做到这一点:
编码.....
Option Explicit
Sub Count()
' x= no of columns(dashboard calender)
' y= no of rows(dashboard emp id)
' z= no of rows(temp calc sheet emp id)
Application.ScreenUpdating = False
'Clear calender data
Range("Q4").Select
Range(Selection, ActiveCell.SpecialCells(xlLastCell)).Select
Selection.ClearContents
Dim i, j, k, l, d, x, y, z, Empid As Long
Dim currentdate, startdate, enddate As Date
x = (Range("n2") - Range("n1")) + 1
y = Application.WorksheetFunction.counta(Range("A:A")) - 1
z = Application.WorksheetFunction.counta(Worksheets("Temp Calc").Range("A:A")) - 1
For i = 1 To y Step 1 'To loop through the emp_id in dashboard.
For j = 1 To x Step 1 'To loop through the calender in dashboard daywise.
d = 0
For k = 1 To z Step 1 'To loop through the emp_id i temp calc sheet.
Empid = ActiveSheet.Cells(i + 3, 1).Value
currentdate = Cells(3, 16 + j).Value
startdate = Worksheets("Temp calc").Cells(k + 1, 3).Value
enddate = Worksheets("Temp calc").Cells(k + 1, 4).Value
If (Worksheets("Temp calc").Cells(k + 1, 1).Value) = Empid Then
If (currentdate >= startdate) And (currentdate <= enddate) Then 'To check whether the first column date falls within the project start and end date
d = d + 1
End If
End If
Next
Worksheets("Dashboard").Cells(i + 3, j + 16) = d
Next
Next
Range("q4").Select
Application.ScreenUpdating = True
End Sub
我的问题:代码完成了工作,但我有两个问题。
太慢了
有时工作簿会说没有响应并且无法完成工作。我已经检查过它在后台不起作用。我让程序在一夜之间运行,它没有响应。
可能的解决方案:
使用两个数组:一个数组存储仪表板中的empid,第二个数组存储仪表板中生成的日历。然后将其与临时计算表中的数据进行比较,并将计数返回到数组 2 并将其写回问题是我刚刚开始阅读有关数组的内容,我仍在学习
我对可能的替代方案持开放态度:
干杯,
马修