0

次のコードは、列 B で単語 "fee" を検索し、列 B に単語 "fee" が見つかった場合に隣接する 3 つの列にコメントを挿入する変更イベント ハンドラーです。

Private Sub Worksheet_Calculate()

Dim rng As Range, cell As Range

Set rng = Range("B:B")

If Not rng Is Nothing Then

    For Each cell In rng.Cells
        If cell.Value = "fee" Then
            cell.Offset(0, 1).AddComment "fi"
            cell.Offset(0, 2).AddComment "fo"
            cell.Offset(0, 3).AddComment "fum"
        End If
    Next
End If

End Sub

上記のコードは正常に動作します。

また、列 B に「料金」という単語が含まれていない場合は、列 B を検索し、隣接する 3 つの列の既存のコメントを削除したいので、Else ステートメントを追加しました。

Private Sub Worksheet_Calculate()

Dim rng As Range, cell As Range

Set rng = Range("B:B")

If Not rng Is Nothing Then

    For Each cell In rng.Cells
        If cell.Value = "fee" Then
            cell.Offset(0, 1).AddComment "fi"
            cell.Offset(0, 2).AddComment "fo"
            cell.Offset(0, 3).AddComment "fum"
        Else:
            cell.Offset(0, 1).Comment.Delete
            cell.Offset(0, 2).Comment.Delete
            cell.Offset(0, 3).Comment.Delete

        End If
    Next
End If

End Sub

これにより、実行時エラーが発生します:「オブジェクト変数または With ブロック変数が設定されていません」、デバッガーは

cell.Offset(0, 1).Comment.Delete

VBA では With ステートメントを使用するように求められているようですが、試した With 順列でも同じエラーが発生します。何かご意見は?

Andy の正しい提案に従ってください。このコードは、条件が満たされた場合はコメントを追加し、そうでない場合はコメントをクリアします。

Private Sub Worksheet_Calculate()

Dim rng As Range, cell As Range
Set rng = Range("B:B")

If Not rng Is Nothing Then
    For Each cell In rng.Cells
        cell.Offset(0, 1).ClearComments
        cell.Offset(0, 2).ClearComments
        cell.Offset(0, 3).ClearComments
        If cell.Value = "fee" Then
            cell.Offset(0, 1).AddComment "fi"
            cell.Offset(0, 2).AddComment "fo"
            cell.Offset(0, 3).AddComment "fum"
        End If
    Next
End If

End Sub
4

1 に答える 1