返回列表 上一主題 發帖

[發問] 一邊輸入一邊即時比對

[發問] 一邊輸入一邊即時比對

我要在工作頁"輸入"的E7以下開始輸入PN,每一筆PN輸入完後立刻與工作頁"DATA"中的既有資料做即時比對,如果在工作頁"DATA"中找不到相同PN時,就在工作頁"輸入"的B欄同一列顯示一個紅色問號。

我的寫法好像達不到效果,而且會出現除錯,可以幫我看看要如何修改嗎?
test.rar (9.1 KB)
Jess

用錯事件了。
  1. Private Sub Worksheet_Change(ByVal Target As Excel.Range)
  2.     If Target.Column <> 5 Then Exit Sub
  3.     If Target.Count > 1 Then Exit Sub
  4.     If Sheets("DATA").[b:b].Find(Target, , , 1) Is Nothing Then
  5.         Application.EnableEvents = False
  6.         Target.Offset(, -3) = "?"
  7.         Target.Offset(, -3).Font.ColorIndex = 3
  8.         Application.EnableEvents = True
  9.     End If
  10. End Sub
複製代碼

TOP

O大,安安
用錯事件,是指寫在Module裡的語法,不完全適用在 Private Sub Worksheet_Change �媔�?
我把keyin錯誤的資料刪除後,那個紅的問號不會跟著一起消失。如果希望它一起跟著消失該怎麼改?
Jess

TOP

Worksheet_SelectionChange是在點擊儲存格就發生的事件
不適合你在寫入儲存格才要判斷執行任務
所以要 寫在Worksheet_Change事件中。
改過後要清除寫入的問號:
Target.Offset(, -3) = "?"
Target.Offset(, -3).Font.ColorIndex = 3
ELSE
Target.Offset(, -3) = ""
Target.Offset(, -3).Font.ColorIndex = 0
  
      Application.EnableEvents = True
    End If
加上紅字部份

TOP

無法正常執行,連原來的功能都失效了
Jess

TOP

我運行是ok的。你要不要把無法運行的檔案附上來?

TOP

附上檔案
麻煩O大了,謝謝!
test.rar (60.17 KB)
Jess

TOP

回復 7# jesscc

Private Sub Worksheet_Change(ByVal Target As Excel.Range)
    If Target.Row < 7 Then Exit Sub '我多加這行
    If Target.Column <> 5 Then Exit Sub
    If Target.Count > 1 Then Exit Sub
    Application.EnableEvents = False   '改放這裡
    If Sheets("DATA").[b:b].Find(Target, , , 1) Is Nothing Then
      ' 刪掉 Application.EnableEvents = False   '停止物件能觸發事件      
       Target.Offset(, -3) = "?"
        Target.Offset(, -3).Font.ColorIndex = 3
        Else
        Target.Offset(, -3) = ""
        Target.Offset(, -3).Font.ColorIndex = 0
      ' 刪掉 Application.EnableEvents = True      '恢復物件能觸發事件   
    End If
     Application.EnableEvents = True    '改放這裡

End Sub

TOP

謝謝G大
可以正常執行了。好深奧喔!
想不太通...
Jess

TOP

        靜思自在 : 【行善要及時】行善要及時,功德要持續。如燒開水一般,未燒開之前千萬不要停熄火候,否則重來就太費事了。
返回列表 上一主題