[VBA ] 固定或靜態資料不能大於64K

看板Visual_Basic作者 (運氣可以不要用完嗎)時間3年前 (2021/01/18 15:31), 編輯推噓4(4010)
留言14則, 1人參與, 最新討論串1/1
想請問各位大大一下, 在定義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://www.ptt.cc/bbs/Visual_Basic/M.1610955082.A.B69.html

02/16 03:01, 3年前 , 1F
用另一個陣列輔助 馬總統說過 一個不夠可以吃兩個!
02/16 03:01, 1F

02/16 03:03, 3年前 , 2F
redim 只適用於一開始就直接變更
02/16 03:03, 2F

02/16 03:04, 3年前 , 3F
之後變更只會更慢
02/16 03:04, 3F

02/16 03:04, 3年前 , 4F
就算redim 上限也是64k
02/16 03:04, 4F

02/16 03:07, 3年前 , 5F
要怎麼切 就要看個人判斷了
02/16 03:07, 5F

02/16 03:15, 3年前 , 6F
關於陣列上限 剛測過了一下
02/16 03:15, 6F

02/16 03:15, 3年前 , 7F
我的記憶體64m ReDim Tester(178599999)
02/16 03:15, 7F

02/16 03:15, 3年前 , 8F
還能跑得動
02/16 03:15, 8F

02/16 03:16, 3年前 , 9F
如果上道178999999就記憶體不足
02/16 03:16, 9F

02/16 03:27, 3年前 , 10F
目前你的需求要568646
02/16 03:27, 10F

02/16 03:33, 3年前 , 11F
另外一台16G的電腦133843499
02/16 03:33, 11F

02/16 03:34, 3年前 , 12F
順便更正一下 我64G的電腦 空閒記憶體只有50G
02/16 03:34, 12F

02/16 03:35, 3年前 , 13F
16G的電腦空閒記憶體只有12.6G
02/16 03:35, 13F

04/05 03:29, , 14F
通常建議直接dim完下一行就接著redim 你的預估大小
04/05 03:29, 14F
文章代碼(AID): #1W1JbAjf (Visual_Basic)