【发布时间】:2020-03-18 05:27:36
【问题描述】:
我想先说我是 VBA 的新手,所以希望这是一个简单的解决方法。 我正在尝试使以下 VBA 代码适用于具有公式的多个单元格。效果是单元格中有一个幻影值,用户可以覆盖然后再次查看他们是否删除了它们的值。我可以让一个单元按我想要的方式工作,但第二个(以及第三个和第四个等)不起作用。如何重复同一行代码,以使效果在具有不同公式的多个单元格中重复出现?
工作:
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
With Target
If .Address(False, False) = "F7" Then
If IsEmpty(.Value) Then
Application.EnableEvents = False
.Formula = "=IFERROR(INDEX(DATABASE!$D$2:$AG$3222,MATCH('Pricing Grid'!$B$11,DATABASE!$E$2:$E$3222,0),10),0)"
Application.EnableEvents = True
End If
End If
End With
End Sub
我的尝试(顶部工作,底部不):
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
With Target
If .Address(False, False) = "F7" Then
If IsEmpty(.Value) Then
Application.EnableEvents = False
.Formula = "=IFERROR(INDEX(DATABASE!$D$2:$AG$3222,MATCH('Pricing Grid'!$B$11,DATABASE!$E$2:$E$3222,0),10),0)"
Application.EnableEvents = True
End If
End If
End With
End Sub
Private Sub Worksheet_Change1(ByVal Target As Excel.Range)
With Target
If .Address(False, False) = "F8" Then
If IsEmpty(.Value) Then
Application.EnableEvents = False
.Formula = "=IFERROR(INDEX(DATABASE!$D$2:$AG$3222,MATCH('Pricing Grid'!$B$11,DATABASE!$E$2:$E$3222,0),9),0)"
Application.EnableEvents = True
End If
End If
End With
End Sub
【问题讨论】:
-
另外,有人可以建议一种将数组公式合并到 .Formula = "~~~~" 部分的方法吗?我随后的尝试引发了错误。 .ArrayFormula = "=IFERROR(INDEX(DATABASE!$D$2:$AG$3222,MATCH(1,($B$11=DATABASE!$E$2:$E$3222) * (H3=DATABASE!$T$2:$T $3222) * (H4=DATABASE!U2:U3222),0),26),"")"
-
公式末尾的10 vs 9背后的逻辑是什么?
-
它从数据数组中绘制不同的变量以显示在电子表格的不同单元格中。
-
每个工作表只有一个 Worksheet_Change 事件。您不能仅通过类似地命名过程来添加更多内容。您的所有逻辑都必须来自一个事件,就像蒂姆的回答所展示的那样。
-
由于您正在处理
Worksheet_Change事件,THIS 值得一读。