Board logo

標題: [發問] 請問如何增加條件判斷陣列是一維或是二維呢? [打印本頁]

作者: dechiuan999    時間: 2011-1-28 14:29     標題: 請問如何增加條件判斷陣列是一維或是二維呢?

各位大大好:

   下列語法如何增設條件判斷 ar
是一維陣列或是二維陣列呢?

Sub aa()
   
    Dim ar1, ar2, ar3
    Dim mData()
    Dim s%, s1%, n1%, n2%
    Dim mSht1 As Worksheet
    Dim mSht2 As Worksheet
    Dim ar
   
    Set mSht1 = Worksheets(1)
    Set mSht2 = Worksheets(2)
   
    With mSht1
       ar1 = .Range("a1:c5")  '二維陣列
         ar2 = .Range("e8:g8")
       ar2 = Application.Transpose(Application.Transpose(ar2))  '二維陣列轉成一維陣列
         ar3 = .Range("h10:j14")  '二維陣列
        
      
        ReDim Preserve mData(0)
        mData(0) = ar1
      ReDim Preserve mData(1)
        mData(1) = ar2
      ReDim Preserve mData(2)
        mData(2) = ar3
        
        s = UBound(mData)
        For s1 = 0 To UBound(mData)
          ar = mData(s1)          '如何判斷ar 是一維陣列或是二維陣列呢?
             n1 = UBound(ar, 1)
          n2 = UBound(ar, 2)
          'if 二維陣列時 then
            mSht2.Range("a65536").End(xlUp).Resize(n1, n2) = ar '當ar=mdata(1)時為二維陣列,使用此語法。
            'if 一維陣列時 then
            mSht2.Range("a65536").End(xlUp).Resize(, n2) = ar '當ar=mdata(1)時為一維陣列,使用此語法。
          End If
        Next
        
    End With
            
End Sub

謝謝各位大大。
作者: Hsieh    時間: 2011-1-28 20:28

回復 1# dechiuan999

若要使用API函數取得維數請參考
使用API取得陣列維度
不然可利用錯誤碼來驗證維度
  1. Sub nn()
  2. Dim ay(2, 2, 3)
  3. MsgBox checkarray(ay)
  4. ar = Array(1, 2, 3, 4, 5)
  5. ar = Application.Transpose(ar)
  6. MsgBox checkarray(ar)
  7. ar = Application.Transpose(ar)
  8. MsgBox checkarray(ar)
  9. End Sub
  10. Function checkarray(Myar As Variant)
  11. On Error Resume Next
  12. i = 1
  13. Do Until Err.Number = 9
  14. n = LBound(Myar, i)
  15. If Err.Number = 0 Then i = i + 1
  16. Loop
  17. checkarray = i - 1
  18. End Function
複製代碼

作者: dechiuan999    時間: 2011-1-29 10:29

謝謝版主大大。

小弟目前使用錯誤碼來驗證維度,
已可逹成須求。
同時也在研究ASP的應用方式。

感恩版主大大。




歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)