1

これは、ユーザーがCまたはPを挿入したときにExcelワークシートにコメントを入力するためのものであり、編集後にコメントを非表示にする必要があります。

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim KeyCells As Range


    Set KeyCells = Range("A1:S1000")

    If Not Application.Intersect(KeyCells, Range(Target.Address)) _
           Is Nothing Then

            Select Case Range(Target.Address)
                Case "C":
                    minhaCelula = Target.Address
                    Range(minhaCelula).AddComment ("")
                    Range(minhaCelula).Comment.Visible = True
                Case "P":
                    minhaCelula = Target.Address
                    Range(minhaCelula).AddComment ("")
                    Range(minhaCelula).Comment.Visible = True

            End Select


    End If
End Sub
4

1 に答える 1

2

そのコードに関するいくつかの問題:

  • Select Case Range(Target.Address)意味がありません-範囲を取得し、そのアドレスを取得Targetして、元の範囲を指すそのアドレスから範囲を作成します。Target最後に、VBは、オブジェクト参照コンテキストで使用されていないため、その範囲のデフォルトのプロパティを取得します。したがって、すべてをに置き換える必要がありTarget.Valueます。
  • 後で同じことが起こりminhaCelulaます。
  • "C"との下のコード"P"は同じであり、同じCaseブランチの下に配置する必要があります。
  • コロンはVBでは使用されませんSelect Case
  • AddComment括弧なしで呼び出す必要があります。さらに良いことAddCommentに、追加されたコメントへの参照が返されるという事実から利益を得る必要があります。これにより、それを直接使用できます(この場合、括弧を保持する必要があります)。

したがって、次のように書き直す必要があります。

Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Application.Intersect(Me.Range("A1:S1000"), Target) Is Nothing Then
        Select Case Target.Value
            Case "C", "P"
                Target.AddComment("").Visible = True
        End Select
    End If
End Sub

質問に関しては、を使用するComment.Visibleと、Excelはコメントの可視性の管理を停止します。管理をExcel側に残すには、代わりにコメントの形を表示します。

Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Application.Intersect(Me.Range("A1:S1000"), Target) Is Nothing Then
        Select Case Target.Value
            Case "C", "P"
                With Target.AddComment("").Shape
                    .Visible = msoTrue
                    .Select
                End With
        End Select
    End If
End Sub
于 2013-01-08T19:08:21.793 に答える