アプリ版:「スタンプのみでお礼する」機能のリリースについて

いつも大変お世話になっております。
下記コードでコメントを取得する際のコードがわかりません。
オブジェクトが必要ですのエラーが出ます。
ご教示お願い致します。

Dim n As Long, a As Variant, dmr As Integer
a =ListObjects("テーブル1").DataBodyRange
dmr = UBound(a, 1)
For n = 1 To dmr
If a(n, 1) = DateValue(Me.TextBox1.Text) Then
If TypeName(a(n, 3).comment) = "Comment" Then ←ココ ※ 「オブジェクトが必要です。」
Msgbox a(n, 3).comment.Text
End If
End if
Next

A 回答 (2件)

こんにちは


回答はすでにされている通りです

取得、Msgbox出力のみならば、配列にしたり、わざわざListObjectを変数に代入する必要性もないように思います。

配列にしたい理由があるのでしょうか? 試しかな・・・

もし、配列を他の処理にも使いたいので流用するのなら
配列インデックスを使ってListObjectを操作すれば良いと思います
スマートでは無いかもですが、こうなりますよね

Dim n As Long, a As Variant, dmr As Integer
Dim Tbl As ListObject
Set Tbl = ActiveSheet.ListObjects("テーブル1")
a = Tbl.DataBodyRange
dmr = UBound(a, 1)
For n = 1 To dmr
If a(n, 1) = DateValue(Me.TextBox1.Text) Then
If TypeName(Tbl.Range(n + 1, 3).Comment) = "Comment" Then '←ココ ※ 「オブジェクトが必要です。」
MsgBox Tbl.Range(n + 1, 3).Comment.Text
End If
End If
Next

スマートでないついでにTbl.Rangeにしました。。同じが好ましいかな
    • good
    • 1
この回答へのお礼

ありがとうございます
配列の勉強中でして、このコードは試しです。
助かりました

お礼日時:2022/09/17 09:32

変数aは、ただの配列で、Rangeオブジェクトではありません。


当然、.Comment プロパティなんてありません。

変数aをRangeオブジェクトにしたいのなら、Set a= と書く必要があります。当然、それ以外の箇所も修正が必要になります。
    • good
    • 0
この回答へのお礼

ありがとうございます
setは忘れてましたm(_ _)m
配列、今後も勉強します

お礼日時:2022/09/17 09:41

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!