Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


5403 / 13644 ツリー ←次へ | 前へ→

【50923】コンボボックスを空白にする方法 Tsuyo 07/8/22(水) 14:57 質問[未読]
【50924】Re:コンボボックスを空白にする方法 Tsuyo 07/8/22(水) 15:02 質問[未読]
【50925】Re:コンボボックスを空白にする方法 ぱっせんじゃー 07/8/22(水) 15:03 発言[未読]
【50928】Re:コンボボックスを空白にする方法 Tsuyo 07/8/22(水) 15:52 質問[未読]
【50930】Re:コンボボックスを空白にする方法 neptune 07/8/22(水) 16:49 回答[未読]
【50942】Re:コンボボックスを空白にする方法 Tsuyo 07/8/22(水) 23:28 質問[未読]
【50948】Re:コンボボックスを空白にする方法 ichinose 07/8/23(木) 8:01 発言[未読]
【50965】Re:コンボボックスを空白にする方法 [名前なし] 07/8/23(木) 17:23 質問[未読]
【50966】Re:コンボボックスを空白にする方法 kobasan 07/8/23(木) 18:33 回答[未読]
【50967】Re:コンボボックスを空白にする方法 ichinose 07/8/23(木) 18:34 発言[未読]
【50980】Re:コンボボックスを空白にする方法 Tsuyo 07/8/24(金) 9:34 質問[未読]
【51009】Re:コンボボックスを空白にする方法 ichinose 07/8/24(金) 20:31 発言[未読]
【51023】Re:コンボボックスを空白にする方法 Tsuyo 07/8/25(土) 22:42 質問[未読]
【51029】Re:コンボボックスを空白にする方法 ichinose 07/8/26(日) 0:54 発言[未読]

【50923】コンボボックスを空白にする方法
質問  Tsuyo  - 07/8/22(水) 14:57 -

引用なし
パスワード
   こんにちは。
Activeコントロールなのですが
コンボボックスに入力された値を全てクリアしたいです。
ComboBox1.Value = ""
などやってみたのですがうまくいかないです。

LinkdSellは使わず、逆にセルの式から、コンボボックスの値をセルに持ってくる方法はあるのでしょうか?

分かる方いらしたら教えてください。

【50924】Re:コンボボックスを空白にする方法
質問  Tsuyo  - 07/8/22(水) 15:02 -

引用なし
パスワード
   >LinkdSellは使わず、逆にセルの式から、コンボボックスの値をセルに持ってくる方法はあるのでしょうか?
これはまた別の質問になります。
宜しくお願いします。

【50925】Re:コンボボックスを空白にする方法
発言  ぱっせんじゃー  - 07/8/22(水) 15:03 -

引用なし
パスワード
   コンボボックスのクリアの方法です。

ComboBox1.Clear

【50928】Re:コンボボックスを空白にする方法
質問  Tsuyo  - 07/8/22(水) 15:52 -

引用なし
パスワード
   ▼ぱっせんじゃー さん:
返信ありがとうございます。
>ComboBox1.Clear
試してみたのですが

コンパイルエラー
変数が定義されていません。

というエラーが発生してしまいます。
その他に原因があるのでしょうか?

【50930】Re:コンボボックスを空白にする方法
回答  neptune  - 07/8/22(水) 16:49 -

引用なし
パスワード
   ▼Tsuyo さん:
こんにちは


>>ComboBox1.Clear
>試してみたのですが
>
>コンパイルエラー
>変数が定義されていません。
>
>というエラーが発生してしまいます。
>その他に原因があるのでしょうか?
コンボボックスのコントロール名.clear
ですよ。

コンボボックスのコントロール名があっていてそれでも出るなら
他に原因があります。

ツール
 →オプション
  →編集タブ
   →「変数の宣言を強制する」
にチェックは入れてますか?入っていれば「Option Explicit」
がモジュールの先頭に自動的に記入されているはずです。
入ってなければ入れることを強くお勧めします。

【50942】Re:コンボボックスを空白にする方法
質問  Tsuyo  - 07/8/22(水) 23:28 -

引用なし
パスワード
   ▼neptune さん:
こんばんは
>コンボボックスのコントロール名.clear
>ですよ。
プロパティのオブジェクト名のことですよね?
一緒のはずです。
>コンボボックスのコントロール名があっていてそれでも出るなら
>他に原因があります。
原因に思い当たるところはありますか?
このコンボボックスはフォームではなくシートに貼り付けています。
>
>ツール
> →オプション
>  →編集タブ
>   →「変数の宣言を強制する」
>にチェックは入れてますか?入っていれば「Option Explicit」
>がモジュールの先頭に自動的に記入されているはずです。
>入ってなければ入れることを強くお勧めします。
'Combobox.clear
として動かすと他のコードは正常に動くのでこの命令が原因だと思うのですが。
標準モジュールでやろうとしているのがいけないのでしょうか?

【50948】Re:コンボボックスを空白にする方法
発言  ichinose  - 07/8/23(木) 8:01 -

引用なし
パスワード
   おはようございます。

>'Combobox.clear
>として動かすと他のコードは正常に動くのでこの命令が原因だと思うのですが。
>標準モジュールでやろうとしているのがいけないのでしょうか?
これですね!!
標準モジュールでは、どこのシートのコンボボックスか特定しないといけませんね

Sub test()
  Worksheets("sheet1").ComboBox1.Clear
End Sub

【50965】Re:コンボボックスを空白にする方法
質問  [名前なし] E-MAIL  - 07/8/23(木) 17:23 -

引用なし
パスワード
   お世話になります。
>これですね!!
>標準モジュールでは、どこのシートのコンボボックスか特定しないといけませんね
>
>Sub test()
>  Worksheets("sheet1").ComboBox1.Clear
>End Sub
試してみたのですが、「予期せぬエラーが発生しました。」というエラーが出ます。予期せぬエラーとはどんなエラーなのでしょうか?
コンボボックスのイベントとして上記の命令を試してみると確かにクリアされます。

シートにComboboxを設定しているのでセルとコンボボックスなどオブジェクトを1つのボタンで一変にクリアしたいのですが。

分かる方いましたら、返信お願いします。

【50966】Re:コンボボックスを空白にする方法
回答  kobasan  - 07/8/23(木) 18:33 -

引用なし
パスワード
   今晩は。

>>Sub test()
>>  Worksheets("sheet1").ComboBox1.Clear
>>End Sub
>試してみたのですが、「予期せぬエラーが発生しました。」というエラーが出ます。

Comboboxのプロパティウインドウを表示させ、ListFillRangeプロパティに値が設定されてないか確認してみてください。
RowSourceプロパティに値が設定されていると、
Worksheets("sheet1").ComboBox1.Clear
で、「予期せぬエラーが発生しました。」というエラーが発生すると思います。

【50967】Re:コンボボックスを空白にする方法
発言  ichinose  - 07/8/23(木) 18:34 -

引用なし
パスワード
   ▼[名前なし] さん:
こんばんは。
ん?誰?

>お世話になります。
>>これですね!!
>>標準モジュールでは、どこのシートのコンボボックスか特定しないといけませんね
>>
>>Sub test()
>>  Worksheets("sheet1").ComboBox1.Clear
>>End Sub
>試してみたのですが、「予期せぬエラーが発生しました。」というエラーが出ます。予期せぬエラーとはどんなエラーなのでしょうか?
予期せぬエラーでしょうね!!

本来は上記のエラーが発生するまでの手順書をここで記述しなければならないのですよ!!

・Excelを起動してください。から始まってね!!
 標準モジュールに記述の件も最初に記述しなければなりません。
・新規ブックの適当なシート(ここではSheet1というシ−ト)に
 コマンドバー「コントロールツールボックス」にあるコンボボックスを
 配置してください。尚、説明の都合上、コンボボックスをSheet1の
 セルA1からA5の範囲に配置することは避けてください。

・標準モジュールに

'=================================================================
Sub 設定()
  With Worksheets("sheet1")
    .Range("a1:a5").Value = [{"a";"b";"c";"d";"e"}]
    .ComboBox1.ListFillRange = "=sheet1!a1:a5"
    End With
End Sub

上記の設定を実行してください。

Combobox1には、Sheet1のA1からA5の内容がリスト表示されると思います。

上記のコンボボックスに対して、


標準モジュールに

'=======================
Sub クリア()
  Worksheets("sheet1").ComboBox1.Clear
End Sub

この「クリア」を実行すると、、「予期せぬエラーが発生しました。」というエラーが
発生します。


と記述すれば、多くの方が再現できるでしょう?

不具合って再現できて何ぼものですからね!!

この場合は、標準モジュールに

Sub test()
  Worksheets("sheet1").ComboBox1.ListFillRange = ""
End Sub

上記のtestで対応してください。

試してみてください。

【50980】Re:コンボボックスを空白にする方法
質問  Tsuyo  - 07/8/24(金) 9:34 -

引用なし
パスワード
   kobasonさん、ichinose さん:
おはようございます。
返信ありがとうございます。

>不具合って再現できて何ぼものですからね!!
そうですね。質問時に状況をどこまで説明すれば良いかいつも迷います。
コードを最初から最後まで載せてしまったら、かえって訳が分からなくなるのではないかとか、教えて貰うからにはポイントを絞らナければと逆の方向に気を使ってしまいました。
問題部分が分からないのだから絞れるわけないんですけどね。

>この場合は、標準モジュールに
>
>Sub test()
>  Worksheets("sheet1").ComboBox1.ListFillRange = ""
>End Sub
>
>上記のtestで対応してください。
testしてみたのですが、確かにエラーは出なくなりましたが、
Worksheets("sheet1").ComboBox1.Clear
を実行してみてもなんの変化もなくコンボボックス内のアルファベットが残ったままになります。代わりに
Worksheets("sheet1").ComboBox1.value = ""
で対応しクリアしまし。
しかしWorksheets("sheet1").ComboBox1.value = ""を使う場合、ListFillRangeに値が入っていようがいまいが上手くいってしまうことがテストしていて分かり、少し愕然としてしまいました。

.Clearと""を当てはめることは同等と判断して良いのでしょうか?

【51009】Re:コンボボックスを空白にする方法
発言  ichinose  - 07/8/24(金) 20:31 -

引用なし
パスワード
   ▼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コントロールの動的な作成のせいなのか?多少残像が残ったりもしますが、
概ねこのような動作になります。

試して結果を教えてください。

【51023】Re:コンボボックスを空白にする方法
質問  Tsuyo  - 07/8/25(土) 22:42 -

引用なし
パスワード
   ▼ichinose さん:
こんばんは
返事が遅くなってすみません。
>Excel2002(Excel2000でも確認)で前回の投稿どおりの手順で行うと
>記述したとおりにエラーが発生し、記述したとおりにリストがクリアされますけどね!!

Excelは2007です。
Worksheets("sheet1").ComboBox1.Clear
では消えませんでしたが(エラーは出ません)
Worksheets("sheet1").ComboBox1.value = ""
を実行したら消えました。
という意味で前回は書きました。
>因みに
>Worksheets("sheet1").ComboBox1.Value = ""
>と
>Worksheets("sheet1").ComboBox1.ListFillRange = ""
>とでは、結果は違いますよ!!
少し勘違いをさせているようですが比べているのは
Worksheets("sheet1").ComboBox1.Clear 

Worksheets("sheet1").ComboBox1.value = "" 
です。
.Clearでは消えませんでしたが、.ComboBox.value=""
でやったら消えましたという意味です。

最初に質問したときは標準モジュールで
Sub test0()
 ComboBox1.Value = ""
End Sub
を実行したのですが上手くいかず,みなさんに教えていただいた
Sub test1()
  Worksheets("sheet1").ComboBox1.Clear
End Sub
を実行したところ、「予期せぬエラーが発生しました。」というエラーが発生したため、それはListFillRangeプロパティに値が設定されていることが原因だということを教えてもらったため
Sub test2()
  Worksheets("sheet1").ComboBox1.ListFillRange = ""
  Worksheets("sheet1").ComboBox1.Clear
End Sub
を実行したところ、エラーは発生しなくなりましたがコンボボックスを空白にすることはできませんでした。そこで
Sub test3()
  Worksheets("sheet1").ComboBox1.ListFillRange = ""
  Worksheets("sheet1").Value = ""
End Sub
を試したところコンボボックスが空白になり上手くいってしまったので喜んでいたのですが、ListFillRangeプロパティに値が入っていても
Sub test4()
  Worksheets("sheet1").Value = ""
End Sub
でもコンボボックスが空白になることが分かり少しショックを受けたのと同時に、Clearと""では同じ意味なのかと疑問に思いました。
これがいままでのまとめになります。
よろしくお願いします。

【51029】Re:コンボボックスを空白にする方法
発言  ichinose  - 07/8/26(日) 0:54 -

引用なし
パスワード
   ▼Tsuyo さん:
こんばんは
>返事が遅くなってすみません。
>>Excel2002(Excel2000でも確認)で前回の投稿どおりの手順で行うと
>>記述したとおりにエラーが発生し、記述したとおりにリストがクリアされますけどね!!
>
>Excelは2007です。
>Worksheets("sheet1").ComboBox1.Clear
>では消えませんでしたが(エラーは出ません)
>Worksheets("sheet1").ComboBox1.value = ""
>を実行したら消えました。
>という意味で前回は書きました。

何となくわかったような気もしますし、そうでもないような・・・。

Combobox1.Value=""

Combobox1.Clearは、違いますよ!!

ただ、Excel2007は持っていないので確認ができません。

前回投稿した


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

このコードの結果がExcel2007では私が記述した内容と違うなら、
私はこのご質問から手を引かなければなりません。
だって、確認できないのですから・・・。


再度お聞きします。上記のコードは、どのようにメッセージが表示されますか?

5403 / 13644 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free