vba - Excel 根据用户更改范围中的另一个单元格来更新范围中的单元格值

标签 vba excel

我使用 Excel VBA 已经有一段时间了,但我仍然很陌生。我搜索了这些问题,发现了一些类似的东西,但没有一个是我能够根据我的需要正确修改的。

我有一个数据输入表,用户在 B 列中手动输入数据(来自经过验证的列表)。如果他在 B 列中选择 N/A,则需要清除 D 列和 H 列中的关联数据(对于同一行)。该工作表具有固定的常量行数。

我尝试了几种方法,但我在这里突破了我的理解极限。下面的方法看起来很简单,但是每次尝试都会导致excel崩溃。我已将其放入相应的工作表模块中。

Private Sub Worksheet_Change(ByVal Target As Range)

    Dim i As Long
    For i = 1 To 500
        If Range("B" & i).Value = "N/A" Then
            Range("D" & i,"H" & i).Value = ""
        End If
    Next i
End Sub

谁能告诉我我在哪里犯规了?

最佳答案

以下代码应该可以阻止内存溢出:

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim c As Range
    'check whether anything needs to be processed
    If Not Intersect(Target, Columns("B")) Is Nothing Then
        Application.EnableEvents = False ' stop other events from firing
        'process each cell that has changed
        For Each c In Intersect(Target, Columns("B")).Cells
            If c.Value = "N/A" Then
                c.Offset(0, 2).Value = ""
                c.Offset(0, 6).Value = ""
            End If
        Next
        Application.EnableEvents = True ' allow other events to fire
    End If
End Sub

注意:正如 A.S.H 在他们的回答中提到的,如果您实际上没有检查字符串 N/A,而是检查 #N/A 错误条件,您将需要更改 If 语句。

关于vba - Excel 根据用户更改范围中的另一个单元格来更新范围中的单元格值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44837607/

相关文章:

excel - 如何从字符串中查找斜杠出现的次数

vba - 如何缩短这段特殊的 VBA 代码以使其更小?

返回集合的 VBA 函数

excel - MS Access 找不到项目或库错误

vba - 为什么我的 VBA 循环粘贴不正确的值?

excel - Excel的 'Dependency-Chain'是增加还是减少?

c - 调用用 C 编写的 DDL 函数时,Excel VBA 脚本崩溃,该函数返回字符串 BSTR

vba - 使用 Excel VBA 改进 Cycles 数据

c# - 在 Excel 工作表中插入数据时 Insert into 语句中出现语法错误

Excel自定义RibbonUI;为菜单添加部分标题