【问题标题】:Excel VBA-code to alter a cell if a line has been edited如果一行已被编辑,则 Excel VBA 代码更改单元格
【发布时间】:2019-11-08 15:16:48
【问题描述】:

我正在做一些数据验证工作,基本上,每当我更改数据中的一行时,我还需要在同一行的 J 列中写“是”。我认为这应该是可自动化的,但我在代码上遇到了一些问题。

我想要它做的是检查 C-H 行的变化,如果 B 列上有数字(0-99),则将同一行的 J 列上的文本替换为“是"(不带引号)。在这种情况下,“数字”部分可以缩写为长度为 1-2(不是 0 也不是更多)。

这是我到目前为止所拥有的,但我似乎无法弄清楚如何组合绝对和相对引用,即“检查活动行的 B”或“更改活动行的 J”(即也就是说,到目前为止,我尝试过的代码都没有根据 VBA 有效;我的 VBA 经验很少,所以这段代码对我来说很陌生):

Private Sub Worksheet_Change(ByVal Target As Range)
    If Intersect(Target, Range("C:H")) Is Nothing Then Exit Sub
        If Not Len("B" & ActiveCellRow) = "1" Then
        If Not Len("B" & ActiveCellRow) = "2" Then
        Exit Sub
    End If
    With Application
    .EnableEvents = False
    .ScreenUpdating = False
        "J" & ActiveCellRow = "Yes"
    .EnableEvents = True
    .ScreenUpdating = True
End With

【问题讨论】:

    标签: excel vba


    【解决方案1】:

    你可以这样做:

    Private Sub Worksheet_Change(ByVal Target As Range)
    
        Dim rng As Range, c As Range, v
    
        'in our range of interest?
        Set rng = Application.Intersect(Target, Me.Range("C:H"))
    
        If Not rng Is Nothing Then
            'get the corresponding cells in ColB
            For Each c In Application.Intersect(rng.EntireRow, Me.Range("B:B")).Cells
                v = c.Value
                'flag required?
                If Len(v) > 0 And Len(v) < 3 And IsNumeric(v) Then
                    c.EntireRow.Cells(1, "J").Value = "Yes"
                End If
            Next c
        End If
    End Sub
    

    【讨论】:

    • 你已经打败了我。很好的解决方案。我也在研究Else,想知道如果不是True,OP 是否必须写“否”。此外,您是否有理由更喜欢使用EntireRow 而不是:Cells(c.Row, 10).Value = "Yes"
    • 没有真正的原因我只是发现自己在输入EntireRow...你是对的,那里可能也应该有一个“删除是”测试。
    猜你喜欢
    • 1970-01-01
    • 2015-10-23
    • 1970-01-01
    • 2015-05-17
    • 1970-01-01
    • 2020-12-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多