0

シートへの変更に特定の1行のセルが含まれているかどうかを確認したいと思います。私は試した

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

これは、変更が発生する行のみに関心があることを前提としています(列は気にしません)。範囲オブジェクトの最初と最後の行を検索し、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 に答える
0

シートが1つしかない場合は、を使用して行とターゲットの交差を直接確認できます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 に答える