【发布时间】:2016-03-17 15:18:11
【问题描述】:
VBA 将我的变量日期从用户输入默认设置为上午 12:00,这会导致稍后出现下标超出范围错误。我已经正确声明了所有变量,它以前可以工作,但现在不行。关于检查什么的任何想法?我尝试使用 DateAdd 进行调整,并尝试让 vba 将 # 添加到变量设置行的两端。奇怪的是,在此之前 vba 接受用户输入的日期(LastEndDateV)并正确传递它。循环有什么奇怪的地方吗?
我想值得一提的是,用户输入来自用户表单的文本框,但是直到现在这还不是问题。
示例代码
Dim BlockEnd As Date: Dim BlcokStart As Date
Dim LastStartV As Date
Dim LastEndDateV As Date
Dim UACFArray(3, 1) As Date
LastEndDateV = LastEndDateV.Value
BlcokStart = LastEndDateV + 7
BlockEnd = LastEndDateV + BlockLength
TotalC = CSched
TotalW = WSched
CareerComb = CareerTypeCombo.Value
Debug.Print "Values"; BlcokStart, BlockEnd, TotalC, TotalW
UACFArray(0, 0) = #1/6/2015#: UACFArray(0, 1) = #2/3/2015#
UACFArray(1, 0) = #1/20/2015#: UACFArray(1, 1) = #2/17/2015#
UACFArray(2, 0) = #2/10/2015#: UACFArray(2, 1) = #3/10/2015#
UACFArray(3, 0) = #2/24/2015#: UACFArray(3, 1) = #3/24/2015#
For i = LBound(a) To UBound(a)
If CFChk = True Then
Select Case CareerComb
Case Is = "Test1", "Test2"
For l = LBound(UACFArray, 1) To UBound(UACFArray, 1)
If BlcokStart = UACFArray(l, 0) Then
For m = LBound(UACFArray, 2) To UBound(UACFArray, 2)
BlockEnd = UACFArray(l, m)
a(i) = BlcokStart & " & " & BlockEnd
TotalC = TotalC + 3
TotalW = TotalW + CWs
BlcokStart = UACFArray(l + 1, 0) ******subscript occurs here
Next m
这是我最初在将其移入原始代码的主要部分之前对其进行的测试:
Sub loopchecker()
Dim UACFArray(8, 1) As Date
Dim checkpoint As Date
Dim Block As String
checkpoint = #2/11/2015#
UACFArray(0, 0) = #1/6/2015#: UACFArray(0, 1) = #2/3/2015#
UACFArray(1, 0) = #1/20/2015#: UACFArray(1, 1) = #2/17/2015#
UACFArray(2, 0) = #2/10/2015#: UACFArray(2, 1) = #3/10/2015#
UACFArray(3, 0) = #2/24/2015#: UACFArray(3, 1) = #3/24/2015#
UACFArray(4, 0) = #3/17/2015#: UACFArray(4, 1) = #4/14/2015#
UACFArray(5, 0) = #3/31/2015#: UACFArray(5, 1) = #4/28/2015#
UACFArray(6, 0) = #4/21/2015#: UACFArray(6, 1) = #5/19/2015#
UACFArray(7, 0) = #5/5/2015#: UACFArray(7, 1) = #6/2/2015#
UACFArray(8, 0) = #5/26/2015#: UACFArray(8, 1) = #6/23/2015#
For x = LBound(UACFArray, 1) To UBound(UACFArray, 1)
If checkpoint = UACFArray(x, 0) Then
Block = UACFArray(x, 0)
For y = LBound(UACFArray, 2) To UBound(UACFArray, 2)
Block = UACFArray(x, 0) & " " & "-" & " " & UACFArray(x, y)
Next y
ElseIf checkpoint <> UACFArray(x, 0) Then
For y = LBound(UACFArray, 2) To UBound(UACFArray, 2)
If checkpoint > UACFArray(x, 0) And checkpoint < UACFArray(x, y) Then
Block = UACFArray(x + 1, 0)
Block = Block & " " & "-" & " " & UACFArray(x + 1, y)
End If
Next y
End If
Next x
Debug.Print "Block = "; Block
End Sub
使用这个版本,一切正常,但是我没有尝试重置 blockstart 的值(因为这需要每一步都重新调整)
【问题讨论】: