Board logo

標題: [發問] Is Nothing與Empty的用法 [打印本頁]

作者: acdx    時間: 2013-9-26 16:12     標題: Is Nothing與Empty的用法

要確認某一陣列是否存在時該用什麼方法判斷?
ReDim HeadSone(20)
t1 = 0
t2 = 0
j = 0
For fsi = 15 To 238
    If Cells(fsi, 5) = Cells(fsi + 1, 5) And Cells(fsi, 5) <> Cells(fsi - 1, 5) Then t1 = fsi
    If Cells(fsi, 5) = Cells(fsi - 1, 5) And Cells(fsi, 5) <> Cells(fsi + 1, 5) Then t2 = fsi
        If t1 <> 0 And t2 <> 0 Then
            Set HeadSone(j) = Range(Cells(t1, 5), Cells(t2, 5))
            HS_S(j) = t1
            HS_E(j) = t2
            j = j + 1
            t1 = 0
            t2 = 0
        End If
Next fsi
m = j - 1   '共有m-1組
If HeadSone(0) = Empty Then  '判斷HeadSone(0)是否存在
    m = 0
Else
    m = j - 1   '共有m-1組
End If
ReDim Preserve HeadSone(m)

當HeadSone(0)不存在時上述寫法OK,可是當HeadSone(0)不存在時上述寫法就會出現錯誤(型態不符合)
改成:
If HeadSone(0) = Is Nothing Then
    m = 0
Else
    m = j - 1   '共有m-1組
End If

當HeadSone(0)不存在時則會出現錯誤(此次需要物件),可是當HeadSone(0)不存在時該寫法就OK
請問Is Nothing與Empty的用法有何不同?該如何改?
作者: stillfish00    時間: 2013-9-26 16:46

本帖最後由 stillfish00 於 2013-9-26 16:48 編輯

回復 1# acdx
你可以改為 ReDim HeadSone(0 to 20) As Range
就可以直接用  If HeadSone(0) Is Nothing 判斷
作者: c_c_lai    時間: 2013-9-26 17:50

回復 1# acdx
這網站資訊蠻值得你參考:
w3schools.com
作者: GBKEE    時間: 2013-9-27 18:04

回復 1# acdx
  1. Set HeadSone(0) = Nothing
  2. If HeadSone(0) Is Nothing Then
複製代碼
  1. ReDim Preserve HeadSone(m)
  2. If TypeName(HeadSone(0)) = "Empty" Then
複製代碼

作者: acdx    時間: 2013-9-30 17:40

回復 4# GBKEE
另外
若是我想將HeadSone(m)全數清空
Set HeadSone(0)=Nothing
Set HeadSone(1)=Nothing
Set HeadSone(2)=Nothing
....
該如何寫比較好?
作者: GBKEE    時間: 2013-9-30 18:07

回復 5# acdx
  1. Erase 陳述式來將固定大小的陣列重新初始化,或將動態陣列的記憶空間釋放出來。
複製代碼
  1. Option Explicit
  2. Sub Ex()
  3.     Dim HeadSone(1 To 5)            '靜態陣列:指定陣列元素,下限=1,上限=5
  4.     HeadSone(1) = 0
  5.     MsgBox TypeName(HeadSone(1))
  6.     HeadSone(1) = "AA"
  7.     MsgBox TypeName(HeadSone(1))
  8.     Erase HeadSone                  '清空陣列的元素:靜態陣列:指定陣列元素,下限=1,上限=5
  9.     MsgBox TypeName(HeadSone(1))
  10. End Sub
  11. Sub Ex1()
  12.     Dim HeadSone()                  '動態陣列:尚未指定陣列元素下限,上限數
  13.     ReDim HeadSone(1 To 5)          '重新指定陣列元素下限,上限數
  14.     MsgBox TypeName(HeadSone(1))
  15.     HeadSone(1) = 0
  16.     'Erase HeadSone  '               '將動態陣列的記憶空間釋放出來,回到動態陣列:尚未指定陣列元素下限,上限數
  17.    ' MsgBox TypeName(HeadSone(1))    '錯誤:陣列沒有元素  *****
  18.     ReDim HeadSone(1 To 5)          '重新指定陣列元素下限,上限數 = 清空陣列的元素
  19.     MsgBox TypeName(HeadSone(1))
  20. End Sub
複製代碼





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