【问题标题】:Clear remaining cells when value is added添加值时清除剩余单元格
【发布时间】:2020-06-10 14:19:41
【问题描述】:

在 Excel 中,我有一个包含大约 8 个产品(8 行)的表格。 (表格是一个下拉列表,可以按字母排序) 当列表底部添加新产品时,表格会自动展开。

表格的设置如下所述:

B 列 = 产品编号

C 列 = 产品名称

D 列 = 特定值

E 列 = 特定值

D 列和 E 列通常为空,我希望整个范围(D1:E8)中只有 1 个单元格包含任何值。如果添加了新值,则需要清除此范围内的所有其他 Cell。

这可以通过使用 VBA 宏来实现吗? (如果是……那怎么办?)

例如,

D3=“x”。在单元格 E6 中输入字符串“x”时,所有其他单元格(包括 D3 都需要变为空)。我想通过启动一个 VBA 宏来做到这一点,所以我可以添加一些额外的操作,这些操作需要在 D 或 E 列中使用“x”选择其中一个产品后发生。我知道这可以通过userform 也是如此,但更愿意这样做。

【问题讨论】:

    标签: excel vba range


    【解决方案1】:

    在您希望这影响使用的工作表的工作表模块中:

    Private Sub Worksheet_Change(ByVal Target As Range)
    
    If Not Intersect(Target, Range("D1:E8")) Is Nothing Then
        If Target.Cells.Count > 1 Then
            MsgBox "Please edit one cell at a time!"
        Else
            Application.EnableEvents = False
    
            newVal = Target.Value
            Range("D1:E8").ClearContents
            Target.Value = newVal
    
            Application.EnableEvents = True
        End If
    End If
    
    End Sub
    

    【讨论】:

    • 看起来是一个非常聪明的解决方案!到目前为止非常感谢。不幸的是,它似乎不起作用(或运行)。在范围内的不同单元格中输入多个值时,在范围内的其他单元格中输入新值时,它不会删除以前的输入。输入新值时它会“自动运行”,还是我需要启动/激活代码?提前致谢
    • 听起来您将代码放在标准代码模块而不是工作表模块中......我还在代码中添加了一些额外的“安全”检查
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-20
    • 2022-09-24
    • 2021-12-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多