【发布时间】:2019-12-24 21:46:33
【问题描述】:
我想为以下值选择一个范围(值,整列):FirstDate、EndDate 和 Number。我的 VBA:
突出显示以下 VBA 的输出(D 列):
Sub DateTest()
Dim FirstDate As Date ' Declare variables.
Dim IntervalType As String
Dim Number As Integer
Dim EndDate As Date
Dim TempDate As Date
Dim i As Integer
IntervalType = "m" ' "m" specifies MONTHS as interval.
FirstDate = Cells(1, 1).Value
EndDate = Cells(1, 2).Value
Number = Cells(1, 3).Value ' "Number" For the syntax DateAdd.
' If the number is not greater than zero an infinite loop will happen.
If Number <= 0 Then
MsgBox "Number needs to be greater than 0", vbCritical
Exit Sub
End If
i = 1
Do Until TempDate = EndDate
If i <= 1 Then
TempDate = DateAdd(IntervalType, Number, FirstDate)
Else
TempDate = DateAdd(IntervalType, Number, TempDate)
End If
i = i + 1
Debug.Print i
Loop
Range("D1").Value = i - 1
End Sub
正如我之前写的那样,我不仅想为前 3 个单元格运行宏(当前宏对值 (1,1) (1,2) (1,3) 运行良好),如您所见上面的 FirstDate、EndDate 和 Number
我想用于 Column1、Column2、Column3 中的所有日期,例如:
我已经试过了:
Sub DateTest()
Dim FirstDate As Date ' Declare variables.
Dim IntervalType As String
Dim Number As Integer
Dim EndDate As Date
Dim TempDate As Date
Dim i As Integer
IntervalType = "m" ' "m" specifies MONTHS as interval.
With ActiveWorkbook.Worksheets(1)
lLastRow = .UsedRange.Rows.Count
For lRow = 1 To lLastRow
FirstDate = Format(.Cells(lRow, 1).Value, "YYYY-MM-DD")
EndDate = Format(.Cells(lRow, 2).Value, "YYYY-MM-DD")
Number = .Cells(lRow, 3).Value
' If the number is not greater than zero an infinite loop will happen.
If Number <= 0 Then
MsgBox "Number needs to be greater than 0", vbCritical
Exit Sub
End If
i = 1
Do Until TempDate = EndDate
If i <= 1 Then
TempDate = DateAdd(IntervalType, Number, FirstDate)
Else
TempDate = DateAdd(IntervalType, Number, TempDate)
End If
i = i + 1
Debug.Print i
Loop
Range("D1").Value = i - 1
Next
End With
End Sub
但仍在转换第 1 行。
【问题讨论】:
-
您是否尝试过
Range().Resize()将范围从单个单元格扩展到单元格表的函数? -
您是否在问如何为整个工作表运行代码,并且每一行都有一个唯一的输出?截至目前,您的
FirstDate、EndDate和Number变量已设置范围(1,1),(1,2),(1,3),因此每次循环时它都会循环回这些单元格值。您需要更改函数的范围