如果UsedRange
未在A
列中啓動,OP代碼可能失敗的一個可能原因是。如果A
列中沒有數據並且沒有格式化,則會發生這種情況。
爲什麼?因爲.Columns
(和.Rows
和.Cells
就此而言)是相對到指定的範圍。例如,如果UsedRange
是B2:Z10
,則Me.UsedRange.Columns("E")
將參考範圍F2:F10
。
OP代碼中的另一個問題是,它將運行任何單元更改,包括列A
中的那些更改。這會引發錯誤,因爲列A
中的偏移量-1無效。
那麼,如何解決它?正如jbarker2160回答的那樣,您應該利用參數Target
,該參數告訴您哪些單元格已更改。但是這個答案留下了一些問題。
- 我們要檢查
E
柱=「銅」和列D
爲「WR229」,但我們不知道哪一個將進入第一
- 我們應該考慮的是若干個電池的可能性同時,如改變由於複製/粘貼
- 我們應如何處理可能出現的錯誤,並禁用
- 的OP的代碼是區分大小寫的不休假活動。即當「Cu」不是時,「CU」將被接受。這是期望的行爲嗎? (如果它是,從下面的代碼中刪除
UCase$()
的)
- 在OP的代碼隱式是存在的被禁止對Cu 較大波導的範圍內。這在下面的代碼中仍未得到解決。
此代碼解決了上述問題
Private Sub Worksheet_Change(ByVal Target As Range)
Dim rw As Range
On Error GoTo EH
Application.ScreenUpdating = False
Application.EnableEvents = False
For Each rw In Application.Intersect(_
Target.EntireRow, Me.UsedRange.EntireRow.Columns("D:E")).Rows
If UCase$(rw.Cells(1, 2)) = "CU" And UCase$(rw.Cells(1, 1)) = "WR229" Then
MsgBox "Cu not permitted for WR229 or larger waveguide", _
vbOKOnly, "Cu Alert"
rw.Cells(1, 2) = "Al"
End If
Next
EH:
Application.ScreenUpdating = True
Application.EnableEvents = True
End Sub
您是否嘗試過將在圈頂部一個斷點,單步調試代碼? – paulroho 2014-09-19 18:41:47