0

我想确定对工作表的更改是否包含特定行中的单元格。我试过了

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)

    Dim i As Integer

    If ActiveSheet.Name = "Yahoo" Then
        If Not Intersect(Target, Range(Cells([YahooID_Row], 1), Cells([YahooID_Row], 999))) Is Nothing Then

        Else

        End If
    End If

End Sub

YahooID_Row 是一个命名的整数常量。

我不断收到运行时错误 1004。我该怎么做?

4

3 回答 3

0

如果您只有一张纸,那么您可以直接使用Worksheet_Change(ByVal Target As Range). 如果有多张纸,那么只使用Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)

以下代码代码位于您要进行检查的工作表代码区域中。`

此外,如果您打算写入一个单元格,请确保您设置Application.EnableEvents = False为防止可能的无限循环,并使用适当的错误处理True再次将其设置为。

Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
    On Error GoTo Whoa

    Dim YahooID_Row As Long

    '~~> Row 5
    YahooID_Row = 5

    Application.EnableEvents = False

    If Not Intersect(Target, Rows(YahooID_Row)) Is Nothing Then
        '
        '~~> You rest of the code goes here
        '
    End If

LetsContinue:
    Application.EnableEvents = True
    Exit Sub
Whoa:
    MsgBox Err.Description
    Resume LetsContinue
End Sub
于 2012-08-19T06:05:36.567 回答
0

这假设您只对发生更改的行感兴趣(而不关心列)。它找到范围对象中的第一行和最后一行,并检查YahooID_Row它们是否在它们之间。

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)

    dim firstRow, lastRow as double    
    firstRow = target.Rows(1).Row
    lastRow = target.Rows(target.Rows.Count).Row
    if (YahooID_Row >= firstRow and YahooID_Row =< lastRow) then
        msgbox "Change in the YahooID row"
    end if

End Sub

if如果您希望消除额外的代码行,您还可以将第一行/最后一行声明和计算直接移动到语句中。

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)

    if (YahooID_Row >= target.Rows(1).Row and YahooID_Row =< target.Rows(target.Rows.Count).Row) then
        msgbox "Change in the YahooID row"
    end if

End Sub
于 2012-08-19T02:29:50.587 回答
0

使用您尝试过的策略,这是您的代码的工作版本

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
    If Sh.Name = "Yahoo" Then
        If Not Intersect(Target, Sh.Rows([YahooID_Row])) Is Nothing Then

        Else

        End If
    End If

End Sub

区别是

  1. 检查Sh参数而不是活动工作表。触发事件的更改可能不是来自 ActiveSheet。
  2. 将工作表引用 ( Range(...) 限定为Sh
  3. 由于[YahooID_Row]是命名常量(而不是命名范围),因此将其用作索引
  4. 检查整行,而不仅仅是前 999 列
于 2012-08-19T04:09:29.837 回答