【发布时间】:2021-03-19 21:00:57
【问题描述】:
我很难过(不需要太多)。我有两段代码似乎不能很好地协同工作。我希望他们或找到替代方案。第一个是清除内容和更改格式的命令按钮代码。在我添加“如果值更改”代码之前,这工作得非常好。值更改代码是指格式从第一个代码更改的范围内的单元格。我想这就是问题所在。代码大部分使用命名范围。我尝试使用单元格地址,在代码中定义范围,保护/取消保护,并将工作表名称添加到范围中。
此代码无需“如果值更改”代码即可正常工作。
Private Sub CommandButton2_Click()
Sheets("PN Generation").unprotect Password:="1234"
Range("SELECT").Value = 2
Range("PNSELECT").ClearContents
Range("SMC").ClearContents
Range("ALL").Interior.ColorIndex = 35
Range("ALL").Font.ColorIndex = 49
Range("SMC").Interior.ColorIndex = 6
Range("SMCD").Font.ColorIndex = 15
Range("SMCD").Interior.ColorIndex = 15
Call protect
End Sub
使用下面的代码时,上面的代码从第 5 行开始返回 1004 应用程序定义/对象定义错误 - "Range("ALL").Interior.ColorIndex=35."
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("D3")) Is Nothing Then
If Range("PNI") = "G" Or Range("PNI") = "U" Or Range("PNI") = "L" Or Range("PNI") = "T" Then
Sheets("Reverse Build").Range("MV").Copy
Sheets("PN Generation").Range("PFLMV").PasteSpecial xlPasteValues
End If
If Range("PNI") = "A" Or Range("PNI") = "B" Or Range("PNI") = "C" Or Range("PNI") = "V" Or Range("PNI") = "AR" Then
Range("LV").Copy
Range("PF").PasteSpecial xlPasteValues
End If
If Range("PNI") = "S" Or Range("PNI") = "P" Then
Range("SIN").Copy
Range("PF").PasteSpecial xlPasteValues
End If
If Range("PNI") = "F" Then
Range("BARE").Copy
Range("PF").PasteSpecial xlPasteValues
End If
If Range("PNI") = "R" Then
Range("LVU").Copy
Range("PF").PasteSpecial xlPasteValues
End If
End Sub
我想了解我收到错误的原因以及如何修复以防止错误。
【问题讨论】:
-
忘了说。 “ALL”命名范围是 D2:F4 和 D7:F7。 D3 是目标细胞。
-
您只是在测试 Range("PNI"),您是否评估过使用
Select Case块而不是一堆Ifs 的可能性? -
不,但这只是因为我在使用 Select Case 代码时运气不佳。我理解这个概念,但我陷入了语法中。不过这是个好主意。我试试看。
-
好消息是我能够让 Select Case 工作。坏消息是它并没有阻止这个问题。我猜问题是当命令按钮代码清除单元格时,它会在命令按钮代码完成之前触发 ByValue 代码。这有意义吗?有没有办法防止这种情况发生?
-
Application.EnableEvents = False...Application.EnableEvents = True?