我非常绝望,希望你能帮助我。
我有这个问题:对于我在"资源"中的每个名字。表,我需要看一个"开始日期"。 "开始日期"来自"需求"片。它是距离G列的今天最近的日期。
含义:对于X先生,我有10个不同的日期。今天是2017/03/01。因此,在此之前的所有日期都超出了范围。它仍然是5个日期(2017年3月至12月)。我希望看到最接近今天的日期,即2017年3月31日。
但是,对于每个名字,我显然没有相同数量的日期(每个名称1到10个日期,或多或少)。这就是为什么我创建循环所以我可以浏览整个日期列表。
我的问题是,如果我尝试为我希望看到的特定日期设置变量,我的循环将只删除先前保存的值。我不知道该怎么做......首先我的单元格是空白的,所以即使我把今天的日期进行比较并编码出循环,它仍然无法工作......
示例:http://www.cjoint.com/c/GCbpoFz64P2
Sub ICStart()
Sheets("Resources").Select
Nb_tot1 = 5
While Cells(Nb_tot1, 1).Value <> ""
Nb_tot1 = Nb_tot1 + 1
Wend
Nb_tot1 = Nb_tot1 - 5
MsgBox "Total Lines is : " & Nb_tot1 & "."
Sheets("Demande").Select
Nb_tot2 = 3
While Cells(Nb_tot2, 14).Value <> ""
Nb_tot2 = Nb_tot2 + 1
Wend
Nb_tot2 = Nb_tot2 - 3
MsgBox "Total Lines is : " & Nb_tot2 & "."
For i = 5 To Nb_tot1 + 5 - 1
Sheets("Resources").Select
Name = Cells(i, 1)
Sheets("Demande").Select
End_date_temp = Worksheets("Demande").Cells(3, 7)
For j = 3 To Nb_tot2
Sheets("Demande").Select
Worksheets("Resources").Cells(i, 8) = End_date_temp
Commit = Cells(j, 12)
An = Year(Cells(j, 7))
End_date = Cells(j, 7)
If Cells(j, 14) = Name And Commit = "Y" And An <> "2100" And An >= Year(Now) And End_date >= Date Then
End_date_temp = End_date
End If
Next
Next
End Sub
主要问题是我无法找到如何写这一行:
End_date_temp = Worksheets("Demande - Projets").Cells(3, 7)
答案 0 :(得分:0)
这可能有助于您入门。
Sub test()
Dim person As String
person = Worksheets("Resources").Range("A2")
Debug.Print GetClosestDate(person)
End Sub
Function GetClosestDate(person As String)
Dim cl As Range, today As Date, closestDate As Date
today = VBA.Now
For Each cl In Worksheets("Demand").Range("G1:G8")
If cl.Offset(0, 7) = person Then // this picks up name column N
If cl >= today Then
If closestDate = "00:00:00" Then //Default value for uninitialised date object
closestDate = cl.Value
Else
If CInt(cl - today) < CInt(closestDate - today) Then
closestDate = cl.Value
End If
End If
End If
End If
Next cl
GetClosestDate = closestDate
End Function
GetClosestDate
查找最近的人日期您需要修改代码以处理Resources
等中的名称循环,但我认为 - 至少在原则上 - 此代码是您所需要的。