Board logo

標題: 除了使用on error resume next, 如何不顯示錯誤 [打印本頁]

作者: enoch    時間: 2012-7-3 09:54     標題: 按ENTER 向下影響activecell 位置

本帖最後由 enoch 於 2012-7-3 10:13 編輯

程式用作在第2欄輸入資料後, 會比對資料是否能在資料庫找到,
若找到會在第4欄顯示找到資料, 若不存在會顯示"找不到", 及發出聲音

若 excel 設定了按enter鍵後, 儲存格向下,
當程式在第3行輸入資料按enter後, 因為儲存格已去了第4行,
程式會錯誤處理第4行資料
請問應如何修改, 避免程式認錯activecell

另外當使用檔案內的名稱範圍"data", 前面是否一定需要加上所在工作表"information"

請指教
  1. Private Sub Worksheet_Change(ByVal Target As Range)
  2.     On Error GoTo errhandler
  3.    Dim row  As Integer
  4.     row = ActiveCell.row
  5.     If Target.Column <> 2 Then Exit Sub
  6.     If Cells(row, "A") <> "" Then
  7.           Cells(row, "D") = Application.WorksheetFunction.VLookup(Cells(row, "B"), Sheets("Information").Range("data"), 1, False)
  8.     End If
  9.     Exit Sub
  10. errhandler:


  11. Call Beep
  12. Cells(row, "D") = "找不到"
  13. End Sub
複製代碼

作者: enoch    時間: 2012-7-3 11:58     標題: 除了使用on error resume next, 如何不顯示錯誤

在Excel公式, 可以在Vlookup前面加上ISNA , 避免找不到資料時出現ERROR

若果在VBA, 除了使用 on error resume next
如何避免當使用Application.WorksheetFunction.VLookup 找不到資料時出現錯誤
作者: oobird    時間: 2012-7-3 13:27

VBA有VBA查詢的方法,效果也比調用工作表函數強多了
自然也沒有調用工作表函數查詢出錯的缺點。
作者: GBKEE    時間: 2012-7-3 14:29

本帖最後由 GBKEE 於 2012-7-3 15:03 編輯

回復 1# 2# enoch
  1. Option Explicit
  2. Private Sub Worksheet_Change(ByVal Target As Range)
  3.    Dim xlrow  As Integer, xlLook As Variant
  4.     If Target.Column <> 2 Then Exit Sub
  5.     xlrow = Target.Row
  6.     If Cells(xlrow, "A") <> "" Then
  7.          'xlLook = Application.WorksheetFunction.VLookup(Cells(xlrow, "B"), [data], 1, False)
  8.          '使用工作表函數 Application.WorksheetFunction 如傳回錯誤值 系統會回應執行上的錯誤中段程式
  9.          xlLook = Application.VLookup(Cells(xlrow, "B"), [data], 1, False)
  10.         '但不加上WorksheetFunction  如傳回錯誤值 系統不會回應執行上的錯誤
  11.         '但變數型態 需設為 Variant
  12.         Cells(xlrow, "D") = IIf(Not IsError(xlLook), xlLook, "找不到")
  13.     End If
  14. End Sub
複製代碼

作者: enoch    時間: 2012-7-3 17:40

請問GBKEE

請問用Excel function時, 何時決定要否加WorksheetFunction呢?
兩者只在於WorksheetFunction  會回應執行上的錯誤嗎?
作者: GBKEE    時間: 2012-7-4 16:08

回復 5# enoch
Application.VLookup 等同 Application.WorksheetFunction.VLookup   
差別在函數傳回錯誤值時, 前者不加WorksheetFunction, vba不會產生程式上的錯誤值
作者: enoch    時間: 2012-7-5 14:23

明白了, 謝謝GBKEE




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