Excel (VBA)

Excel VBAに関するフォーラムです。
  • 掲示板への投稿には会員登録(無料)が必要です。会員登録がまだの方はこちら
  • 掲示板ご利用上のお願い」に反するご記入はご遠慮ください。
  • Q&A掲示板の使い方はこちらをご覧ください
トピックに返信
質問

 
(Windows 10 Home : Excel 2019)
webから貼り付けたコンボボックスの表示されている値を取得する
投稿日時: 23/04/25 10:24:35
投稿者: こまつ

webからコピーしてエクセルに貼り付けたコンボボックスの値を取得しようと思っています。
 
いいいが表示されている状態で、プロパティを見ると
 
オブジェクト名:HTMLSelect12
display value:あああ;いいい;ううう;えええ …….と続きます
Selected:false;false;true
 
のようになっており、UBOUNDや splitで関数で要素の数を調べて、表示されている値を取得しています。
A=. HTMLSelect12.display value
B=unbound(split (. HTMLSelect12.selected, “;”))
 
If B=0 then
.range(“A1”)=split(A,”;”)(0)
Else
.range(“A1”)=split(A,”;”)(B-1)
End if
 
が、要素数が多いと?エラーが出てしまい、プロパティを見るとselectedの項目が表示されていません。
このような場合、どうやって表示されている値を取得すればよいでしょうか?

回答
投稿日時: 23/04/25 10:38:44
投稿者: taitani
投稿者のウェブサイトに移動

コンボボックスの値を取得する方法は、Webサイトの実装によって異なります。
提供された情報だけでは、エラーが出る原因が特定できませんが、いくつかの可能性があります。
以下はいくつかの考えられる原因です。
 
#1.HTMLSelect12のselectedプロパティが表示されないように変更されている可能性があります。
この場合、代わりにvalueプロパティを使用して、選択された項目の値を取得することができます。
 
#2.選択された項目の数が多い場合、B変数が配列の境界を超えてしまい、エラーが発生する可能性があります。
代わりに、ループを使用して選択された項目のインデックスを取得することができます。
 
以下は、上記の問題を解決するための可能性がある改良されたコード例です。
 

Dim combo As Object
Dim selected As String
Dim items As Variant
Dim i As Long

Set combo = ThisWorkbook.Sheets("シート名").OLEObjects("HTMLSelect12").Object
selected = combo.selected
items = Split(combo.DisplayValue, ";")

If UBound(items) >= 0 Then
    For i = 0 To UBound(items)
        If InStr(selected, ";true;", vbTextCompare) > 0 Then
            ' 該当の項目が見つかった場合
            ThisWorkbook.Sheets("シート名").Range("A1").Value = items(i)
            Exit For
        End If
    Next i
End If

 
このコードでは、まずOLEObjectを使用してコンボボックスオブジェクトを取得します。
次に、selectedプロパティとDisplayValueプロパティを使用して、選択された項目と表示されている項目を取得します。
ループを使用して、選択された項目のインデックスを見つけ、その項目の値をA1セルに書き込みます。

トピックに返信