Board logo

標題: [發問] Error 'Object variable or With block variable not set' [打印本頁]

作者: zxcxz    時間: 2014-2-9 17:26     標題: Error 'Object variable or With block variable not set'

以下程序執行到紅色部份就出現error 'Object variable or With block variable not set',原因是什麼?

來至微軟官方網:http://msdn.microsoft.com/en-us/library/office/aa195732%28v=office.11%29.aspx
With Worksheets(1).Range("a1:a500")
    Set c = .Find(2, lookin:=xlValues)
    If Not c Is Nothing Then
        firstAddress = c.Address
        Do
            c.Value = 5
            Set c = .FindNext(c)
        Loop While Not c Is Nothing And c.Address <> firstAddress
    End If
End With
作者: GBKEE    時間: 2014-2-9 18:00

回復 1# zxcxz
  1. Option Explicit
  2. Sub Ex()
  3.     Dim C As Range, firstAddress As String
  4.     With Worksheets(1).Range("a1:a500")
  5.     .Parent.Select
  6.     Set C = .Find(2, LookIn:=xlValues)  '[a1:a500] 搜尋 2
  7.     If Not C Is Nothing Then
  8.         firstAddress = C.Address
  9.         Do
  10.             C.Value = 5  '一直地將2換置為5,最後再也沒2了
  11.             Set C = .FindNext(C)
  12.             '搜尋 [a1:a500] 下一個 2
  13.             C.Select  '沒有2時 C Is Nothing '--> C.Address 錯誤沒有設定變數
  14.         Loop While Not C Is Nothing 'And C.Address <> firstAddress
  15.     End If
  16. End With
  17. End Sub
  18. Sub Ex1()
  19.     Dim C As Range, firstAddress As String
  20.     With Worksheets(1).Range("a1:a500")
  21.         Set C = .Find(2, LookIn:=xlValues)  '[a1:a500] 搜尋 2
  22.         If Not C Is Nothing Then
  23.             firstAddress = C.Address   '
  24.             Do
  25.                 '不執行 C.Value = 5
  26.                 Set C = .FindNext(C)        '搜尋 [a1:a500] 下一個 2
  27.                 MsgBox C.Address <> firstAddress
  28.                 '終會回到第一2 -> C.Address = firstAddress  '離開迴圈
  29.             Loop While C.Address <> firstAddress  '條件成立一直執行迴圈
  30.         End If
  31.     End With
  32. End Sub
複製代碼

作者: stillfish00    時間: 2014-2-9 18:51

回復 1# zxcxz
可改成這樣,因為c為nothing時無法再判斷c.address
  1. With Worksheets(1).Range("a1:a500")
  2.     Set c = .Find(2, LookIn:=xlValues)
  3.     If Not c Is Nothing Then
  4.         firstAddress = c.Address
  5.         Do
  6.             c.Value = 5
  7.             Set c = .FindNext(c)
  8.             If c Is Nothing Then Exit Do
  9.         Loop While c.Address <> firstAddress
  10.     End If
  11. End With
複製代碼

作者: zxcxz    時間: 2014-2-15 09:16

謝謝版主及stillfish00講解




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