Sub UpdateComplete()
Dim S As Worksheet
Dim C1 As Long
Dim R1 As Long
Dim R2 As Long
Dim N As Long
Set S = ThisWorkbook.ActiveSheet
C1 = S.Cells(1, Columns.Count).End(xlToLeft).Column
R1 = S.Cells(Rows.Count, 1).End(xlUp).Row
R2 = S.Cells(Rows.Count, C1).End(xlUp).Row
i = 0
j = 0
m = 0
Dim Newdate()
For k = 3 To R2
If DateValue(S.Cells(k, C1 - 3).Value) > DateValue(S.Cells(R1, 1).Value) _
And DateValue(S.Cells(k, C1 - 3).Value) <> DateValue(S.Cells(k - 1, C1 - 3).Value) Then
i = i + 1
ReDim Preserve Newdate(1 To i)
Newdate(i) = DateValue(S.Cells(k, C1 - 3).Value)
End If
Next k
Debug.Print Newdate(1)
N = UBound(Newdate) - LBound(Newdate) + 1
Dim DT()
For kk = 1 To N
For l = 1 To 225
j = j + 1
ReDim Preserve DT(1 To j)
DT(j) = Newdate(kk) + TimeValue(S.Cells(l + 1, 1))
Next l
Next kk
Dim PosArr()
For l = 1 To N * 225
m = m + 1
ReDim Preserve PosArr(1 To m, 1 To 2) (下标越界)
For ll = 2 To R2
If Abs(S.Cells(ll, C1 - 3).Value - DT(m)) < 0.000694 Then
PosArr(m, 1) = ll
PosArr(m, 2) = ll
ElseIf S.Cells(ll, C1 - 3).Value < DT(m) And S.Cells(ll + 1, C1 - 3).Value > DT(m) Then
PosArr(m, 1) = ll
PosArr(m, 2) = 0
End If
Next ll
Next l
End Sub
请问上面VBA代码哪里有问题,总出现下标越界和类型不一致问题?
为ä»ä¹äºç»´æ°ç»è¦å ç»è¿è½¬ç½®åæè½è¿è¡å¾ªç¯æä½
追çå 为ç¨Preserve ä¿ææ°ç»çå 容ï¼åªè½æ¹åæ°ç»æåä¸ç»´çä¸çï¼å¦ææ¹åäºå ¶å®ç»´ææåä¸ç»´çä¸çï¼é£ä¹è¿è¡æ¶å°±ä¼åºéãæ以ï¼æ³è¦ä½¿ç¨äºç»´æ°ç»åªè½éè¿è½¬ç½®ã
vba在excel中的应用中,下标越界怎么回事
下标越界错误大概有以下的原因和解决方法:1.引用了不存在的数组元素。2.下标比可能下标范围大或小,或是在应用程序中这一边的数组没有指定范围。检查数组的声明以确认其上界和下界。若使用的是重新指定范围的数组,应使用 UBound 和 LBound 函数来决定数组访问。如果索引指定为变量,应检查变量名的拼写。
为什么在excel中用vba时会出现下标越界的提示?
简单的理解:下标越界就是引用超出了所在的范围。当我们在excel的VBA中输入下面代码,运行,就会出现“运行时错误9下标越界”的提示。代码如下:Sub a()Dim arr() As String arr(1) = "你好"End Sub 其实上面的“运行时错误9下标越界”是因为定义的动态数组没有确定维数和尺寸。定义成固定维数和尺寸...
Excel VBA下标越界的原因分析与解决方法
下标越界错误大概有以下的原因和解决方法:引用了不存在的数组元素。下标比可能下标范围大或小,或是在应用程序中这一边的数组没有指定范围。检查数组的声明以确认其上界和下界。若使用的是重新指定范围的数组,应使用 UBound 和 LBound 函数来决定数组访问。如果索引指定为变量,应检查变量名的拼写。声明...
VBA 数组下标越界问题
首先您写的代码很不严谨。如:For k = 3 To R2您没有考虑到R2<3的情况,导致下标越界。在第一个FOR循环中,如果没有出现符合条件的单元格,数组NEWDATE就没有赋值,这样又出现了下标越界的问题。第二个FOR循环中 DT(j) = Newdate(kk) + TimeValue(S.Cells(l + 1, 1))这句您定义的l...
vba 数组下标越界
原因是用了Preserve参数,如果要保留数组原有数据,重定义数组是只能修改末维的下标,你修改一维下标,当然不行呀。两个解决方法:1、一次性确定数组下标能满足数据的需要,如果不好确定就取Arr的行数,将数组定义语句放在循环体前:ReDim arr1(1 To ubound(arr), 1 To 5)2、Arr1的行列互换(也...
VBA 数组下标越界问题
如:For k = 3 To R2您没有考虑到R2<3的情况,导致下标越界。在第一个FOR循环中,如果没有出现符合条件的单元格,数组NEWDATE就没有赋值,这样又出现了下标越界的问题。第二个FOR循环中DT(j) = Newdate(kk) + TimeValue(S.Cells(l + 1, 1))这句您定义的l变量赋值如果超过了符合条件的那个数组的最大值...
VBA下标越界,请见下边代码:
在VBA中,数组是否从 0 或 1 索引是根据 Option Base 语句的设置。如果 Option Base 没有指定为 1,则数组索引从零开始。如果从0开始则当下表为10时数据越界。以上,希望能帮到你。
VBA运行时错误9,下标越界
1、首先在SHEET表内设置好按钮,并指定到宏,(宏所在SHEET的名称为“图表”)。2、在VBA编辑器内输入如下的代码。(此代码的含义为遍布区域内的单元格,如果为空格,则隐藏空格所在的整列。3、在运行过程中出现了问题,下标越界,无法运行。4、查看问题原因为,在代码中的“SHEET1”工作表根本没有,...
VB中关于数组下标越界问题
可能是你print 输出的位置和 inputbox弹出窗口刚好重叠 因为你没设置窗体AutoRedraw=true 故该位置上的图形被inputbox抹掉了 还有就这么短的代码来看貌似是没有下标越界的可能 Option Base 1 Dim a() As String Private Sub Form_Click()ReDim a(4) As String Me.AutoRedraw = True For i = 1 ...
为什么我的VBA代码会下标越界?
' 假设row= 365ReDim arry(1 To 2, 1 To rw)'删除这一句==>ReDim arry(1 To rw)For I = 1 To rwarry(1, 1) = Cells(I, 1) ''下标越界 , 测试显示进入第一个数组arry(1,1) 就越界了Next IFor I = 1 To rwarry(2, I) = Cells(I, 3)Next IEnd Sub ...