ต้องการเพิ่มสมาชิกของ array 2 มิติ
Posted: Mon Jul 19, 2010 10:58 am
สวัสดีครับรบกวนปรึกษาอาจารย์และผู้รู้หน่อยนะครับ คือผมต้องการจะสร้าง dynamic array แบบ 2 มิติ โดยมี 2 แถวแต่จำนวน column ไม่จำกัดจะเพิ่มไปเรื่อย ๆ ขึ้นอยู่กับจำนวนของ object ของแต่ละ sheet ครับ หน้าตาของ array ที่ได้จะเป็นตามรูปที่แนบครับผม
- โดยผมสร้างตัวแปลที่เป็น array 2 มิติไว้ตอน open workbook ให้เป็น Global combolist() as String
- สำหรับ sub ผมได้เขียนให้วนรอบตามจำนวน sheet เพื่อเก็บชื่อ sheet ใส่ array ในแถวที่ 1 และเก็บชื่อ object ที่มีอยู่ในแต่ละ sheet ในแถวที่ 2 ซึ่งผมได้ code ไว้ดังนี้ครับ
Sub addComboList()
Dim countObj, i, j, k As Integer
Dim sheetName As String
ReDim Preserve combolist(1, 1) As String
For k = 1 To 6
sheetName = ActiveWorkbook.Sheets(k).Name
Sheets(k).Select
countObj = ActiveSheet.OLEObjects.Count
For i = 1 To countObj
If i = 1 Then
combolist(0, 0) = sheetName
combolist(1, 0) = ActiveSheet.OLEObjects(i).Name
ElseIf i = 2 Then
combolist(0, 1) = sheetName
combolist(1, 1) = ActiveSheet.OLEObjects(i).Name
ElseIf i >= 3 Then
ReDim Preserve combolist(0, i)
combolist(0, i) = ActiveSheet.Name
ReDim Preserve combolist(1, i)
combolist(1, i) = ActiveSheet.OLEObjects(i).Name
End If
Next i
Next k
* ซึ่งผลที่ได้ปรากฎ Error ว่า "Script out of range" ที่ ReDim Preserve combolist(0, i) เมื่อเข้าเงื่อนไข i มากกว่า 3 ตามความเข้าใจของผมผมคิดว่ามีการประกาศสมาชิกที่มากกว่าเดิมที่ประกาศไว้ combolist(1, 1) จึงเกิด Error แต่ผมสงสัยนะคับว่าใช้คำสั่ง Redim Preserve แล้วทำไมจึง Error อยู่ รบกวนอาจารย์หรือผู้รู้ช่วยแนะนำหน่อยนะคับ ว่าหลักการที่ถูกต้องแล้วเป็นยังไง ผมควรแก้ไขอย่างไรครับ ขอบคุณครับ
- โดยผมสร้างตัวแปลที่เป็น array 2 มิติไว้ตอน open workbook ให้เป็น Global combolist() as String
- สำหรับ sub ผมได้เขียนให้วนรอบตามจำนวน sheet เพื่อเก็บชื่อ sheet ใส่ array ในแถวที่ 1 และเก็บชื่อ object ที่มีอยู่ในแต่ละ sheet ในแถวที่ 2 ซึ่งผมได้ code ไว้ดังนี้ครับ
Sub addComboList()
Dim countObj, i, j, k As Integer
Dim sheetName As String
ReDim Preserve combolist(1, 1) As String
For k = 1 To 6
sheetName = ActiveWorkbook.Sheets(k).Name
Sheets(k).Select
countObj = ActiveSheet.OLEObjects.Count
For i = 1 To countObj
If i = 1 Then
combolist(0, 0) = sheetName
combolist(1, 0) = ActiveSheet.OLEObjects(i).Name
ElseIf i = 2 Then
combolist(0, 1) = sheetName
combolist(1, 1) = ActiveSheet.OLEObjects(i).Name
ElseIf i >= 3 Then
ReDim Preserve combolist(0, i)
combolist(0, i) = ActiveSheet.Name
ReDim Preserve combolist(1, i)
combolist(1, i) = ActiveSheet.OLEObjects(i).Name
End If
Next i
Next k
* ซึ่งผลที่ได้ปรากฎ Error ว่า "Script out of range" ที่ ReDim Preserve combolist(0, i) เมื่อเข้าเงื่อนไข i มากกว่า 3 ตามความเข้าใจของผมผมคิดว่ามีการประกาศสมาชิกที่มากกว่าเดิมที่ประกาศไว้ combolist(1, 1) จึงเกิด Error แต่ผมสงสัยนะคับว่าใช้คำสั่ง Redim Preserve แล้วทำไมจึง Error อยู่ รบกวนอาจารย์หรือผู้รู้ช่วยแนะนำหน่อยนะคับ ว่าหลักการที่ถูกต้องแล้วเป็นยังไง ผมควรแก้ไขอย่างไรครับ ขอบคุณครับ