[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『Me.Controlsについて』(S TO Z)
Me.Controlsについて質問です
For i = 1 To 100
Me.Controls("ComboBox" & i).Clear
Next
上記のようにComboBox1〜100までをクリアしたいのですが
「メソッドまたはデータ メンバが見つかりません。 (Error 461)」
となります。
また、プログラム入力時のMe.の次の選択肢にもControlsはでてきません
なぜでしょう?
こんにちわ。。
Me.Controls("ComboBox" & i).Value="" ではいかが。。 (kei)
またも
メソッドまたはデータ メンバが見つかりません。 (Error 461)
となりました。?
そうですか・・
>プログラム入力時のMe.の次の選択肢にもControlsはでてきません USERFORM上にあるComboBoxのプロパティのオブジェクト名は、ちゃんとありますか? (kei)
横から失礼します。 Me.OLEObjects("ComboBox" & i).Object.Value = "" これはどうでしょうか?
自己削除 表現の仕方?がよくわからなかったので一部削除しました。 (てつろう)
Me.OLEObjects("ComboBox" & i).Object.Value = ""
その通りでした。最終的には
Me.OLEObjects("ComboBox" & i).Object.Clear としました。
ちなみにMe.Controls("ComboBox" & i).Value=""は
ユーザーフォームを作りその上に置いたものにしか使えないのでしょうか?
てつろうさん、フォローありがとうございました。m(__)m
>Me.Controls("ComboBox" & i).Value= "" わたしはフォーム上でよく使ってます。 ActiveXコントロールについては、あまり分かっていません^^; (kei)
>ちなみにMe.Controls("ComboBox" & i).Value=""は >ユーザーフォームを作りその上に置いたものにしか使えないのでしょうか?
「Me」たり得るものの上であれば使えると思います。
※ オブジェクトブラウザで、Controlsは何のメンバーとして存在するかをチェックすれば 判明すると思います。
こんなところではないですか? ↓ CommandBar、CommandBarPopUp、Frame、Page、UserForm
(半平太) 2010/03/25 16:07
<追記> 実験した訳ではありません。m(__)m ご質問の真意が分からないうちは、無駄になりそうなことはしない主義なので。。
オブジェクトブラウザで調べたらControlsはMSFORMSのメンバでした。
だとしたら、どのように指定したら良いのでしょうか?
正直MSFORMSとControlsの関係がよくわかってません。
>どのように指定したら良いのでしょうか?
ご質問の意味がよく分かりません。
そのComboBoxはMSFORMSの上にあるのですか? (・・と云うより、どこにあるのか明確にして頂けませんか? 今までの経緯を読んでも、それが曖昧な気がします。)
(半平太) 2010/03/25 17:13
例えば、ユーザーフォームにコントロールを追加する時は UserForm1.Controls.Add・・・・ と言うコードになりますが
シートにコントロールを配置した時のマクロ記録を見てください。 すると ActiveSheet.OLEObjects.Add・・・となると思います。
シート上のコントロールはControlsコレクションには追加されずに OLEObjects コレクションに追加されます。
なのでシート上のコントロールに対してControlsコレクションは使えません。 (momo)
割り込み失礼します。マクロ記録をやってみました。 両方ともシート上に追加しています。 ActiveSheet.OLEObjects.Add(ClassType:="Forms.ComboBox.1", Link:=False, _ DisplayAsIcon:=False, Left:=456, Top:=134.25, Width:=124.5, Height:= _ 60).Select ActiveSheet.DropDowns.Add(236.25, 210.75, 76.5, 90).Select 上が コントロール ツールボックスのコンボ ボックス、 下が フォームのコンボ ボックスです。 (あん)
シート上にコンボボックスを配置すると、コントロールコレクションには追加されないんですね。
だとするとControlsコレクションに追加されるのはユーザーフォーム上に配置したときなんですかね。
ありがとうございました。
どのコントロールかにもよりますね。 CommandBarにもコントロールはありますので。 あとはユーザーフォーム上や、さらにユーザーフォーム内でも タブストリップやマルチページ、フレーム内に置かれたコントロールもさらに その配下のControlsコレクションに入ると思います。
個人的にはシート上にActiveXコントロールを置くのは好きではないので (色々なトラブルを抱えた経験もありますし、何よりコーディングが面倒くさいので) ユーザーフォームにするか、シート上であればフォームの方を使うか入力規則のリストで済ませます。
(momo)
>だとするとControlsコレクションに追加されるのはユーザーフォーム上に配置したときなんですかね。 momoさんが
>ユーザーフォーム内でも >タブストリップやマルチページ、フレーム内に置かれたコントロールもさらに >その配下のControlsコレクションに入ると思います。
Frame等は、シートにも貼りつけ可能です。そうすると、シートに貼り付けたフレーム内に コンボボックスを配置すると、Controlsコレクションで操作できます。
例
新規ブックの標準モジュールに
'================================================================================= Sub SampleControl() Dim ole As OLEObject Dim frm As Object Dim r As Range Dim c1 As Range Dim c2 As Range Set c1 = Range("d6:f7") Set c2 = Range("d11:f12") Set r = Range("c4:g14") Set ole = ActiveSheet.OLEObjects.Add(ClassType:="Forms.Frame.1", Link:=False, _ DisplayAsIcon:=False, Left:=r.Left, Top:=r.Top, Width:=r.Width, Height:=r.Height) ole.Name = "Frame1" Set frm = ole.Object With frm .Caption = "" .BackColor = &H80000009 .BorderColor = &H80000009 .SpecialEffect = 2 With .Controls.Add("Forms.ComboBox.1") .Left = c1.Left - r.Left .Top = c1.Top - r.Top .Width = c1.Width .Height = c1.Height .List() = [{"a","b","c","d","e"}] End With With .Controls.Add("Forms.ComboBox.1") .Left = c2.Left - r.Left .Top = c2.Top - r.Top .Width = c2.Width .Height = c2.Height .List() = [{"aaaa","bbbb","cccc","dddd","eeee"}] End With End With ole.Visible = False ole.Visible = True End Sub
適当なシートをアクティブにして 上記のSampleControl を実行してみてください。
アクティブシートにフレームが作成され、その中にコンボボックスが二つ作成されます。
このコンボボックスのデータをクリアするには、
Sub test() Dim g0 As Long With ActiveSheet.OLEObjects("frame1").Object For g0 = 1 To 2 .Controls("combobox" & g0).Clear Next End With End Sub
というようにControlsコレクションの使用が必要になります。
私も仕事では使ったことはありませんけど・・・。
試してみてください。
ichinose
ichinoseさん かなり目からウロコ・・・^^; OLEobjectの中のControlsまでは頭が回りませんでした。 さすが・・・ 何かに使えそうですが、何に使うか閃かない。 また勉強させられました。 ありがとうです。
(momo)
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.