要这样写,不能写式子,要算出来: Option Explicit Dim X() As Long Private Sub Command1_Click() Dim i As Long i = 1600000 ReDim Preserve X(1 To i) Debug.Print Len(X(0)) * i '数组大小 End Sub
Option Explicit Dim X() As Long Private Sub Command1_Click() Dim i As Long i = 1600000 ReDim Preserve X(1 To i) Debug.Print Len(X(0)) * i '数组大小 End Sub
两个 Integer 相乘的结果超过 32767,产生溢出错误,与是否定义数组无关。 应该强制使用 Long 类型计算。 ReDim Preserve x(1 To 400 * 4000&)
Dim nLnNum As Integer, nPtNum As Integer ReDim Preserve GrdDataTem(1 To nLnNum * nPtNum) 当nLnNum和nPtNum比较小的时候可以,但太大就不行了(如都等于400),为什么? 我按照1楼和4楼的意见写为: Dim Lenth As Long Lenth = nLnNum * nPtNum ReDim Preserve X(1 To Lenth ) 调试发现Lenth值是0,这是为何呀?
Private Sub Command1_Click() Dim x() ReDim Preserve x(1 To 1600000) '1600000=400*4000 MsgBox UBound(x) '可通过 End SubPrivate Sub Command2_Click() Dim x() ReDim Preserve x(1 To 20 * 80) MsgBox UBound(x) '可通过 End SubPrivate Sub Command3_Click() Dim x() ReDim Preserve x(1 To 400 * 4000) '溢出 End SubPrivate Sub Command4_Click() MsgBox 400 * 4000 '溢出 End Sub比较上述测试结果,五楼老鸟的看法是对的
都查看过错误没有? LIUSHUANG19851119 的语句根本不是内存不足的错误,我5楼已经说得很明白了。 Option ExplicitSub Main() On Error GoTo E: Dim x() As Byte
10 ReDim x(&H7FFFFFFF) 20 ReDim Preserve x(1 To 400 * 4000) 30 ReDim Preserve x(1 To 400 * 4000&) Exit Sub E: Debug.Print Erl & ":", Err.Number, Err.Description Resume Next End Sub
Dim GrdDataTem() as Double Dim nLnNum As Integer, nPtNum As Integer nLnNum =400 nPtNum =400 ReDim Preserve GrdDataTem(1 To nLnNum * nPtNum&) 这个“&”有何作用?怎么编译通不过? 按老鸟意见 怎么强制使用 Long 类型计算?
强制 Long 型,只对常量起作用。 nLnNum、nPtNum 定义为 Long。
ReDim Preserve GrdDataTem(1 To Clng(nLnNum) * CLng(nPtNum))
Option Explicit
Dim X() As Long
Private Sub Command1_Click()
Dim i As Long
i = 1600000
ReDim Preserve X(1 To i)
Debug.Print Len(X(0)) * i '数组大小
End Sub
Dim X() As Long
Private Sub Command1_Click()
Dim i As Long
i = 1600000
ReDim Preserve X(1 To i)
Debug.Print Len(X(0)) * i '数组大小
End Sub
应该强制使用 Long 类型计算。
ReDim Preserve x(1 To 400 * 4000&)
ReDim Preserve GrdDataTem(1 To nLnNum * nPtNum)
当nLnNum和nPtNum比较小的时候可以,但太大就不行了(如都等于400),为什么?
我按照1楼和4楼的意见写为:
Dim Lenth As Long
Lenth = nLnNum * nPtNum
ReDim Preserve X(1 To Lenth )
调试发现Lenth值是0,这是为何呀?
问题是你的 nLnNum 与 nPtNum 被赋值了没有........
0 乘以 0 当然等于 0 啦
Dim x()
ReDim Preserve x(1 To 1600000) '1600000=400*4000
MsgBox UBound(x) '可通过
End SubPrivate Sub Command2_Click()
Dim x()
ReDim Preserve x(1 To 20 * 80)
MsgBox UBound(x) '可通过
End SubPrivate Sub Command3_Click()
Dim x()
ReDim Preserve x(1 To 400 * 4000) '溢出
End SubPrivate Sub Command4_Click()
MsgBox 400 * 4000 '溢出
End Sub比较上述测试结果,五楼老鸟的看法是对的
LIUSHUANG19851119 的语句根本不是内存不足的错误,我5楼已经说得很明白了。
Option ExplicitSub Main()
On Error GoTo E:
Dim x() As Byte
10 ReDim x(&H7FFFFFFF)
20 ReDim Preserve x(1 To 400 * 4000)
30 ReDim Preserve x(1 To 400 * 4000&)
Exit Sub
E: Debug.Print Erl & ":", Err.Number, Err.Description
Resume Next
End Sub
Dim GrdDataTem() as Double
Dim nLnNum As Integer, nPtNum As Integer
nLnNum =400
nPtNum =400
ReDim Preserve GrdDataTem(1 To nLnNum * nPtNum&)
这个“&”有何作用?怎么编译通不过?
按老鸟意见 怎么强制使用 Long 类型计算?
nLnNum、nPtNum 定义为 Long。