2

ワークシートの 1 つで、セル F2:F18 に「はい」または「いいえ」の値があります。

私が基本的にやりたいことは、変更されたときに警告するポップアップを作成することです。

最初は次のものがあり、正常に動作しているように見えましたが、Yes/No の値は式によって生成されるため、動作しません。

Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Value = "Yes" Then
        MsgBox "Cell " & myRange.Address & " is now equal to Yes"
    End If
End Sub

Sub BandingAlert()
    Dim myRange As Object
    Set myRange = ActiveSheet.Range("F2:F18")
    Call Worksheet_Change(myRange)
End Sub

いくつかの調査の後、代わりに Worksheet_Calculate を使用する必要があることがわかりました。現在、次のコードを使用しています。

Private Sub Worksheet_Calculate()
    Dim myRange As Object
    Set myRange= ActiveSheet.Range("F2:F18")
    If myRange.Value = "Yes" Then
        MsgBox "Cell " & myRange.Address & " is now equal to Yes"
    End If
End Sub

はい/いいえの値が変わると、エラーが発生するようになりました

実行時エラー '13'; 型の不一致

コードをデバッグすると、強調表示された行は次のようになります。

If myRange.Value = "Yes" Then

誰かが私が間違っているところを手伝ってくれますか?

編集:各ポップアップにセル固有の情報を配置する予定であるため、各セルには独自のポップアップが必要です

4

2 に答える 2

2

Range コレクションを反復処理するには、追加の Range 変数が必要です。

あなたのmyRange変数は、間のセルのコレクションですF2:F18。その範囲内の各セルにアクセスするには、それを反復処理する必要があります。

cellイテレータとして機能するRange 変数を追加しました。for eachループでは、変数cellはアクティブ セルです。

StrComp ()関数は、現在アクティブなセルの値を と比較し"Yes"ます。はvbTextCompare大文字と小文字を区別せず、文字どおりにテキストを比較します。

Private Sub Worksheet_Calculate()
    Dim myRange As Range
    Set myRange = ActiveSheet.Range("F2:F18")
    Dim cell As Range
    For Each cell In myRange
        Evaluate (cell)
        If StrComp(cell, "Yes", vbTextCompare) = 0 Then
            MsgBox "Cell " & cell.Address & " is now equal to Yes"
        End If
    Next
End Sub

シートが再計算されるたびに、RangeのMsgBoxfor eachが表示されます。しばらくすると少し面倒になるかもしれませんが、それはあなたが探していたものですよね?YesF2:F18

于 2013-09-25T10:42:22.897 に答える