我不确定我是否做得正确,但我试图编写一个子程序,查找符合我的条件的第一个值,然后将其复制到另一个单元格,然后停止查找任何其他值。
具体来说,我有一个按升序排列的 18 个月的列(从最旧到最新),并将它与今天的日期进行比较。
- 2019 年 9 月 1 日
- 2019 年 10 月 1 日
- 2019 年 11 月 1 日
- 2019 年 12 月 1 日
- 2020 年 1 月 1 日
- 2020 年 2 月 1 日
- 2020 年 3 月 1 日
- 2020 年 4 月 1 日
- 2020 年 5 月 1 日
- 2020 年 6 月 1 日
- 2020 年 7 月 1 日
- 2020 年 8 月 1 日
- 2020 年 9 月 1 日
- 2020 年 10 月 1 日
- 2020 年 11 月 1 日
- 2020 年 12 月 1 日
- 2021 年 1 月 1 日
- 2021 年 2 月 1 日
然后,我希望将今天日期之后的第一个月份复制到另一个单元格,然后让宏停止搜索更多符合此条件的值。
这就是我的代码现在的样子。
Sub Show_remaining_months()
Dim TodaysDate As Long 'Today's Value
Dim MonthCell As Range
Dim i As Byte
Dim EndHere As Byte
Dim RestoreRefStyle As Integer
Let RestoreRefStyle = Application.ReferenceStyle
Application.ReferenceStyle = xlR1C1
ThisWorkbook.Worksheets("subtotalizer(r-hrs)").Activate
Let TodaysDate = Worksheets("subtotalizer(r-hrs)").Range("R1C5").Value ' TodaysDate = 44012
Let EndHere = 23
'Range(R6C3:R23C3)
For Each MonthCell In Range("R6C3:R" & (EndHere) & C3)
For i = 6 To EndHere ' For i = 6 To 23
' Which later then becomes i To EndHere.
If MonthCell.Value < TodaysDate Then
'Skip
i = i + 1
'i = 6 + 1 = 7
Else
Let Range(R3C5).Value = MonthCell.Value
'i = i + 1
EndHere = i
End If
Next i
Next MonthCell
Application.ReferenceStyle = RestoreRefStyle
End Sub
我收到错误代码 1004:应用程序定义或对象定义的错误
说实话,我觉得我有点想多了。我刚接触 VBA 编程。
答案1
这次重写完全符合我的要求。我之前想太多了。
Sub Show_remaining_months()
Dim TodaysDate As Long 'Today's Value
Dim StartDate As Range
Dim MonthCell As Range
Dim i As Byte
Dim EndHere As Byte
ThisWorkbook.Worksheets("subtotalizer(r-hrs)").Activate
Let TodaysDate = Range("E1").Value
Set CurrentStartDate = Range("E3")
For Each MonthCell In Range("C6:C23")
If MonthCell.Value > TodaysDate Then
CurrentStartDate.Value = MonthCell.Value
Exit Sub
End If
Next MonthCell
End Sub