作者lunsun (運氣可以不要用完嗎)
看板Visual_Basic
標題[VBA ] 固定或靜態資料不能大於64K
時間Mon Jan 18 15:31:15 2021
想請問各位大大一下,
在定義Type的時候遇到固定或靜態資料不能大於64K的問題,
以下程式碼的預設矩陣大小為
wDay(31) 想改到366
Task(10) 想改到30
Project(17) 想改到50
基本上用預設的都會過,但大一點就會遇到64K的問題.
有去網路上找解法,大部分都是建議先不設再用Redim,
但試了很久,不知道是語法錯誤還是怎樣,試了很久都不會過.
以下是我的寫法
Dim Tester As Employee
ReDim Tester.Project(50).Task(30).EffortByDate.wDay(366)
這樣子寫這行會出現陣列超出範圍的錯誤
如果只寫
ReDim Tester.Project(50)
這樣子這一行會過,
但下面有用到Tester.Project(0).Task(0).TaskName的那行反而出現超出範圍錯誤
如果寫
ReDim Tester.Project(50)
ReDim Tester.Project(50).Task(30)
這樣子這兩行會過,但結果和上面一樣
下面有用到Tester.Project(0).Task(0).TaskName的那行反而出現超出範圍錯誤
搞了很久都搞不定,
以下是我Type的定義,可否請各位大大幫忙看一下問題在哪邊
感謝幫忙!
Public Type wRecord
wYear As Integer
wMonth As Integer
wDay() As String
wStatus As String
End Type
Public Type Work
TaskName As String
TaskStatus As String
EffortByDate As wRecord
End Type
Public Type wHandle
ProjectNumber As String
ProjectStatus As String
Model As String
Customer As String
Catogory As String
Task() As Work
End Type
Public Type Employee
Name As String
Project() As wHandle
End Type
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 122.146.24.242 (臺灣)
※ 文章網址: https://webptt.com/m.aspx?n=bbs/Visual_Basic/M.1610955082.A.B69.html
1F:推 waiter337: 用另一個陣列輔助 馬總統說過 一個不夠可以吃兩個! 02/16 03:01
2F:推 waiter337: redim 只適用於一開始就直接變更 02/16 03:03
3F:→ waiter337: 之後變更只會更慢 02/16 03:04
4F:→ waiter337: 就算redim 上限也是64k 02/16 03:04
5F:→ waiter337: 要怎麼切 就要看個人判斷了 02/16 03:07
6F:→ waiter337: 關於陣列上限 剛測過了一下 02/16 03:15
7F:→ waiter337: 我的記憶體64m ReDim Tester(178599999) 02/16 03:15
8F:→ waiter337: 還能跑得動 02/16 03:15
9F:→ waiter337: 如果上道178999999就記憶體不足 02/16 03:16
10F:推 waiter337: 目前你的需求要568646 02/16 03:27
11F:→ waiter337: 另外一台16G的電腦133843499 02/16 03:33
12F:→ waiter337: 順便更正一下 我64G的電腦 空閒記憶體只有50G 02/16 03:34
13F:→ waiter337: 16G的電腦空閒記憶體只有12.6G 02/16 03:35
14F:推 waiter337: 通常建議直接dim完下一行就接著redim 你的預估大小 04/05 03:29