0

次のコードがあります。

Dim RR As Range

RR = Sheet90.Range("AA25:AA46")
For i = 1 To ComboBox1.ListCount

       'Remove an item from the ListBox.
       ComboBox1.RemoveItem 0

Next i


Dim R As Range


For Each R In RR.Cells
    If Len(R.Value) > 0 Then
        Sheet90.ComboBox1.AddItem (R.Value)
    End If
Next R

明らかに、それは機能しません。

定義された配列の空白以外の値をコンボボックスに入力しようとしています。

Excel VBA は私の方法論を承認しておらず、そのエラー メッセージはあまり役に立ちません。

それは言う、

Run-time error '91'
Object variable or With block variable not set

これはある種の字句スコープの問題だと思いますが、私の人生では理解できません。すべてが単一のプライベート SUB に含まれており、奇妙なことに、実行しただけでは十分です。

RR = Sheet90.Range("AA25:AA46")
For i = 1 To ComboBox1.ListCount

       'Remove an item from the ListBox.
       ComboBox1.RemoveItem 0

Next i

ボックスをクリアします。

I の場合Dim RR As Range、すべてがバラバラになります。

私は何年も vba を書いていないので、単純な間違いを犯している可能性があります。ご指導いただければ幸いです。

ありがとう!

4

2 に答える 2

4

Set問題は、オブジェクト変数を割り当てるときにキーワードを使用する必要があることです。

'Change this line:
RR = Sheet90.Range("AA25:AA46")

'To be this instead:
Set RR = Sheet90.Range("AA25:AA46")
于 2013-09-04T22:28:18.293 に答える
1

tiger's solution は間違いなくエラーの修正です。

支援/ガイダンスを探していたので、コンボボックスの操作に関するいくつかの追加のヒントを提供したかったので、コメントに入れるには多すぎるので、ここに行きます:

1 つのステートメントで (ループを使用する代わりに) コンボボックスをクリアします。ComboBox1.Clear

また、範囲が数式などで埋められていないと仮定すると、SpecialCells メソッドを使用してその範囲内の空白以外のセルを返すことができるため、空白値をチェックする余分な手順を回避できます ( Len(r.Value) > 0)。

Dim RR As Range
Dim r As Range

Set RR = Range("AA25:AA46").SpecialCells(xlCellTypeConstants)

ComboBox1.Clear
For Each r In RR.Cells
    ComboBox1.AddItem r
Next
于 2013-09-05T03:03:39.203 に答える