Board logo

標題: [發問] 請各位先進指導不知錯在那 [打印本頁]

作者: maomao    時間: 2013-10-17 21:16     標題: 請各位先進指導不知錯在那

大家好,我寫下一個事件如下:
是想將在輸入第四或第六個儲存格時會自動變除以10000後再轉成整數
但實際運作輸入數字時這程式完全沒反應我試了用MsgBox("Hello!")但
也沒出現可見根本沒呼叫下列程式不知錯在那...請指導
Private Sub Worksheet_Change(ByVal Target As Range)
'MsgBox("Hello!")
With Target
     If Target.Column = 4 Or Target.Column = 6 Then
        ActiveCell.Value = Round(ActiveCell.Value / 10000)
     End If
End With
End Sub
作者: luhpro    時間: 2013-10-17 23:41

本帖最後由 luhpro 於 2013-10-17 23:45 編輯
大家好,我寫下一個事件如下:
是想將在輸入第四或第六個儲存格時會自動變除以10000後再轉成整數
但實際運作 ...
maomao 發表於 2013-10-17 21:16

1. 因為 ActiveCell 與 Target 不是同一個儲存格,

當你按下 Enter 時 ActiveCell 已經移位了.

2. 既然你前面已經用了 With Target,

那麼在 End With 之前只要有參照到 Target 的指令都可以用 . 來取代使用.

3. 因為變更儲存格內容時(包含由 Excel VBA 程式變更的)都會呼叫 Worksheet_Change,

故而應在變更前將觸發開關 (Application.EnableEvents) 關掉,

再於變更後打開,

以避免出現 不可預期的錯誤結果 甚至是 "無限次的" 觸發(呼叫程式)的錯誤出現.

修改後的程式如下 :
  1. Private Sub Worksheet_Change(ByVal Target As Range)
  2.   With Target
  3.     If .Column = 4 Or .Column = 6 Then
  4. Application.EnableEvents = False
  5.       .Value = Round(.Value / 10000)
  6. Application.EnableEvents = True
  7.     End If
  8.   End With
  9. End Sub
複製代碼





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