如果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