返回列表 上一主題 發帖

[發問] Workbook_SheetChange 疑問

[發問] Workbook_SheetChange 疑問

各位大大,
一個簡單的 IF 判斷式問題,卻不知問題出在哪裡?
程式第一個 IF先判斷是不是[h2] or [i2] 有變動,有的話再進入第2個 IF判斷是否為數值 or 空白,
正常情況下跑起來是沒問題,但有一個特別狀況:

在非[h2] or [i2] 的cell 按下delete鍵,EX: [b6]按下delete鍵(清空資料),
竟然會跑到第2個IF判斷式,而出現 MsgBox "Must be numeric value!"

有大大可以解答一下嗎?

  1. Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)

  2. If Target = [h2] Or Target = [i2] Then
  3.   

  4.     If (Not IsNumeric(Target.Value)) Or IsEmpty(Target.Value) Then
  5.    
  6.         MsgBox "Must be numeric value!"
  7.         Application.EnableEvents = False
  8.         Target.Value = ""  'this will trigger Target again
  9.         [j2].Value = ""    'clear the cell of yield
  10.         Application.EnableEvents = True
  11.         Exit Sub
  12.    
  13.     End If
  14. End If

  15. End Sub
複製代碼

abnormal.jpg (81.96 KB)

abnormal.jpg

回復 2# c_c_lai


感謝 c_c_lai  大大,改完之後確實不會再發生,
請問為這麼第一種寫法會出錯?
以後如果要參照cell,是否都要用address ,不要用range?

TOP

回復 4# c_c_lai

謝謝大大,我是了解address可得到明確的位址,
那   If Target = [h2] 會失靈,可能是何原因??

TOP

回復 6# c_c_lai


終於了解哪裡錯了,   用address 來比對位址才是上策,再次謝謝c_c_lai大大詳細的解說.

TOP

回復 8# GBKEE

感謝GBKEE大大提供另一個想法,利用range的交集來判斷,又學到一課啦~

TOP

回復 9# c_c_lai


一個問題真有不同解法,我自己對VBA又多一點了解了,再次感謝兩位大大囉~~

TOP

        靜思自在 : 生氣,就是拿別人的過錯來懲罰自己。
返回列表 上一主題