【问题标题】:VBA clearing cells based on clearing/changing another cell and applying it to all rows基于清除/更改另一个单元格并将其应用于所有行的 VBA 清除单元格
【发布时间】:2018-07-11 01:59:01
【问题描述】:

在同一个 Excel 工作表上有两个表格。第一个表名为 Cabinet,范围为 $A$12:$AN$29 第二个表名为 WallTiles,范围为 $A$96:$AN$113

对于表“内阁”:

我正在尝试创建一个宏,它允许执行以下操作:清除/更改 A12 时,清除单元格:B12、C12、D12 和 H12。当 B12 被清除/更改时,清除单元格:C12、D12 和 H12。当 C12 被清除/更改时,清除单元格:D12 和 H12。

类似地:当 A13 被清除/更改时,清除单元格:B13、C13、D13 和 H13。当 B13 被清除/更改时,清除单元格:C13、D13 和 H13。当 C13 被清除/更改时,清除单元格:D13 和 H13。 & 这适用于从 Row12 到 Row29 的所有行。

对于表格“WallTiles:

我正在尝试创建一个宏,它允许执行以下操作:清除 A96 时,清除单元格:B96 和 F 96。这适用于从 Row96 到 Row113 的所有行。

我正在使用@Dy.Lee 给我的以下代码,它对橱柜表非常有用:

Private Sub Worksheet_Change(ByVal Target As Range)
Dim rngDB As Range
If Target.Count > 1 Then Exit Sub
If Not Intersect(Target, Range("a12", "c29")) Is Nothing Then
    Set rngDB = Range(Target.Offset(, 1), Range("d" & Target.Row))
    Set rngDB = Union(rngDB, Range("h" & Target.Row))
    rngDB.ClearContents
End If
End Sub

但是,当我将它应用于表格 WallTiles 时,它通过清除 B 和 F 来工作,但它不允许我在 B 列中输入值。我需要在 B96:B113 中输入数据。

    If Target.Count > 1 Then Exit Sub
    If Not Intersect(Target, Range("a96", "b113")) Is Nothing Then
    Set rngDB = Range(Target.Offset(, 1), Range("b" & Target.Row))
    Set rngDB = Union(rngDB, Range("f" & Target.Row))
    rngDB.ClearContents
    End If

请帮忙!!

【问题讨论】:

  • 您在 LaminatedBench 段落中用 F33 重复了这个错误。第二个 F33 应该是 G33。您仍然有'...当 F33 被清除/更改时,清除单元格:H33 和 L33。 ...'。
  • @Jeeped。嗨,伙计。抱歉,我已经编辑了这个问题,因为它正在处理旧问题。更改后你能调查一下吗。谢谢伙计。
  • 你复制了很多老问题,但你还没有解释你想用墙砖做些什么新的事情。

标签: vba excel


【解决方案1】:

将此部分添加到我在您的previous question 中回复的代码中。

'WallTiles
If Not Intersect(Target, Range("A96:A113")) Is Nothing Then
    On Error GoTo safe_exit
    Application.EnableEvents = False
    Dim wt As Range
    For Each wt In Intersect(Target, Range("A96:A113"))
        If IsEmpty(wt) Then _
            wt.Resize(1, 2).ClearContents
    Next lb
End If

【讨论】:

  • 你能调整我的代码吗?我有这么多表,为我创建的所有表调整代码将非常耗时(我正在使用的代码,我粘贴在我的问题中,对其他更大的表非常有用)。拜托,你可以试一试吗?
  • 我不同意这种编码方法。虽然通过禁用事件避免触发在自身之上运行的 worksheet_change 被认为是“最佳实践”,但该代码方法实际上以不正常的循环形式使用它。所以不行;很抱歉,我不会修改该代码。
  • 如果您有很多具有不同布局的表格,并且您无法将它们循环或合并它们,那么您将不得不逐块进行。
  • 好的,伙计。如果您认为您的代码更好,我将开始根据需要对其进行调整。谢谢老哥!
  • 我正在尝试为所有其他表格调整您的代码,但我很困惑为什么您在一个代码中使用“Dim c as Range”而在其他两个代码中使用“Dim 1b as Range” .您能否建议我是否应该继续对所有其他代码使用 1b?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多