看板 Visual_Basic 關於我們 聯絡資訊
想請問各位大大一下, 在定義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
waiter337: 用另一個陣列輔助 馬總統說過 一個不夠可以吃兩個! 02/16 03:01
waiter337: redim 只適用於一開始就直接變更 02/16 03:03
waiter337: 之後變更只會更慢 02/16 03:04
waiter337: 就算redim 上限也是64k 02/16 03:04
waiter337: 要怎麼切 就要看個人判斷了 02/16 03:07
waiter337: 關於陣列上限 剛測過了一下 02/16 03:15
waiter337: 我的記憶體64m ReDim Tester(178599999) 02/16 03:15
waiter337: 還能跑得動 02/16 03:15
waiter337: 如果上道178999999就記憶體不足 02/16 03:16
waiter337: 目前你的需求要568646 02/16 03:27
waiter337: 另外一台16G的電腦133843499 02/16 03:33
waiter337: 順便更正一下 我64G的電腦 空閒記憶體只有50G 02/16 03:34
waiter337: 16G的電腦空閒記憶體只有12.6G 02/16 03:35
waiter337: 通常建議直接dim完下一行就接著redim 你的預估大小 04/05 03:29