snasui.com ยินดีต้อนรับ ยินดีต้อนรับสู่กระดานถามตอบ Excel and VBA และอื่น ๆ ที่เป็นมิตรกับทุกท่าน มีไฟล์แนบมหาศาล ช่วยให้ท่านค้นหาและติดตามศึกษาได้โดยง่าย สมาชิกท่านใดที่ยังไม่ได้ระบุ Version ของ Excel ที่ใช้งานจริง สามารถทำตาม Link นี้เพื่อจะได้รับคำตอบที่ตรงกับ Version ของท่านครับ ระบุ Version ของ Excel
- โดยผมสร้างตัวแปลที่เป็น 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
Option Explicit
Dim combolist() As String
Sub addComboList()
Dim countObj As Integer, i As Integer
Dim j As Integer, k As Integer
Dim sheetName As String
ReDim combolist(1, 1)
For k = 1 To Sheets.Count
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(1, i)'<== เปลี่ยนได้เฉพาะ Dimension ที่สอง
combolist(0, i) = ActiveSheet.Name
combolist(1, i) = ActiveSheet.OLEObjects(i).Name
End If
Next i
Next k
End Sub