|
▼Tsuyo さん:
こんばんは。
>
>>不具合って再現できて何ぼものですからね!!
>そうですね。質問時に状況をどこまで説明すれば良いかいつも迷います。
>コードを最初から最後まで載せてしまったら、かえって訳が分からなくなるのではないかとか、教えて貰うからにはポイントを絞らナければと逆の方向に気を使ってしまいました。
私は、問題が再現できる最も簡単な事例を作成する事を考えますよ!!
それは、問題になっているブックをいったん離れて、新規ブックにて
問題を再現することを考えますけどねえ!!
さらに一人でも多くの方に再現してもらえるように手順書を記述します。
>
>>この場合は、標準モジュールに
>>
>>Sub test()
>> Worksheets("sheet1").ComboBox1.ListFillRange = ""
>>End Sub
>>
>>上記のtestで対応してください。
>testしてみたのですが、確かにエラーは出なくなりましたが、
testの実行でコンボボックスに登録された内容がクリアされなっかたのでしょうか?
Excel2002(Excel2000でも確認)で前回の投稿どおりの手順で行うと
記述したとおりにエラーが発生し、記述したとおりにリストがクリアされますけどね!!
因みに
Worksheets("sheet1").ComboBox1.Value = ""
と
Worksheets("sheet1").ComboBox1.ListFillRange = ""
とでは、結果は違いますよ!!
Excelのバージョンは何ですか?
もう一度新規ブックにて、
今度は全てをVBAで行ってしまいます。
標準モジュールに
'================================================
Sub main()
Dim cmb As OLEObject
With Range("d3:f3")
Set cmb = ActiveSheet.OLEObjects.Add(ClassType:="Forms.ComboBox.1", _
Link:=False, DisplayAsIcon:=False, _
Left:=.Left, Top:=.Top, _
Width:=.Width, Height:=.Height * 2)
End With
MsgBox "ready"
ActiveSheet.Range("a1:a5").Value = [{"a";"b";"c";"d";"e"}]
With cmb
.ListFillRange = ActiveSheet.Name & "!a1:a5"
.Object.DropDown
MsgBox "セルA1:A5の内容をコンボボックスに設定しました"
On Error Resume Next
.Object.Clear
If Err.Number <> 0 Then
MsgBox "clearメソッドを実行したところ・・ " & vbCrLf & Err.Description
End If
.Object.ListIndex = 3
MsgBox "dを選択しました"
.Object.Value = ""
.Object.DropDown
MsgBox "Value=""""の実行で dは消去されてもリストは消えません"
.ListFillRange = ""
.Object.DropDown
MsgBox " .ListFillRange = """"の実行で リストが消去されました"
.Delete
End With
End Sub
上記のmainを実行してみてください。
私が実行した限りでは・・・、
・セルD3からF4の辺りにコンボボックスを作成し、「Ready」というメッセージ表示
・OKボタンのクリックでA1からA5にリストデータを作成後、コンボボックスに登録にリストを登録します。
・登録リストが表示された状態で「セルA1:A5の内容をコンボボックスに設定しました」というメッセージが表示されます。OKをクリックしてください。
・Cmb.Object.clearを実行します。エラーが発生していれば
「clearメソッドを実行したところ・・
予期せぬエラーが発生しました。」というメッセージが表示されます。
OKボタンのクリックしてください。
・コンボボックスに登録リストの中の「d」が表示され、
「dが選択されました」というメッセージが表示されます。
OKボタンのクリックしてください。
・Value=""が実行されます。
コンボボックスから「d」は消去されますが、最初に登録したA1:A5のリストは
消えません。「Value=""の実行で dは消去されてもリストは消えません」というメッセージが表示されます。
OKボタンのクリックしてください。
・ListFillRange = ""が実行されます。
今度は、コンボボックスに登録されたA1:A5の内容がクリアされます。
「.ListFillRange = ""の実行で リストが消去されました」というメッセージが表示されます。
OKボタンのクリックしてください。
・最後に作成したコンボボックスを削除して終わります。
Activexコントロールの動的な作成のせいなのか?多少残像が残ったりもしますが、
概ねこのような動作になります。
試して結果を教えてください。
|
|