Combo1.AddItem "AAA"
Combo1.AddItem "BBB"
Combo1.AddItem "CCC"

のようなコンボボックスがあり、プログラムの途中で

Combo1.Text = "AAA"
または
Combo1.ListIndex = 0

としたときに、どちらの方法でもClickイベントが発生します。
このClickイベントを発生させないようにしたいのですが
何かよい方法はありますか?
あれば教えてください。よろしくお願いします。

A 回答 (1件)

こんにちは。



Publicのフラグを立てるのが一番簡単だと思います。

Public bClickFlg as Boolean ''Trueの時はクリックイベントに入らない。コンボボックス用フラグ

と設定しておき、

bClickFlg = True
Combo1.Text = "AAA"
bClickFlg = False

んで、Clickイベントには、

IF bClickFlg = True then Exit Sub

として、Trueの時はすぐに外に出るようにしてしまう。

Clickイベント自体を発生させないことは出来ないので、
こうするのがてっとり早いかと思います。

それと、Combo1.Text = "AAA" でClickイベント走りますか?
Chageイベントだとしても、同様にすれば大丈夫です。

Publicの変数は、他の人が見てわかるように、
きちんとコメントをつけて、特定のモジュールで宣言にするようにしましょうね^^

見当違いでしたらすいません。
それでは、また。
    • good
    • 0
この回答へのお礼

こんばんは。
試してみたらちゃんと動きました。
ありがとうございました。

Combo1.Text = "AAA" でClickイベント走ってますよ。
その代わりChangeイベントは発生してないです。
Styleプロパティがドロップダウンリストボックスだからでしょうか。
まぁ、ちゃんと動いたからいいっか。
ということで本当にありがとうございました。

お礼日時:2002/03/12 18:43

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qエクセル、フォームでのVBAについて(コンボボックス)

エクセル97でフォームのコンボボックスを使用する場合の質問です。
ワークシートにコンボボックスを10個配置しました。
入力範囲はすべて同じです。
このコンボボックスで特定の項目(入力範囲6番目)を選んだ場合、次のマクロを実行するようにしようと思っています。マクロを10個書いてそれぞれのコンボボックスに登録してもいいのですが、それよりはどのコンボボックスが使用されたか特定できればすべてのコンボボックスに一つのマクロで対応できます。
コンボボックスに番号(たとえばコンボ1~コンボ10)を振ってその番号の取得ができればいいのですが、どのように記述したらよいのか検討がつきません。
お教えください。

Aベストアンサー

ゆん(yunn117)です。
まず、ByValですが、引数を値渡しするという宣言(?)です。
もうひとつ、ByRefというのがあって、それは参照渡しというモノになります。
・・・値渡しとか参照渡しってなに?というのを説明するべきなんでしょうが
説明がかなり苦手なので。。。申し訳ないです。(^-^;

で、検討がつかない、なんておっしゃってますが
Combo2では、ちゃんとNextMacro(2)って渡してるじゃないですか♪
カッコ内に入れた値が、NextMacro側に渡ってます。

ExcelのVBAのヘルプが見られる環境なら、ヘルプで調べてみてください。引数、ByVal、ByRefなど。

で、更なる質問部分についてですが
DrawingObjects("Combo1")といった表現をする場合はまとめられないんです。。。
が!
もう一度、考え直してみました。

Sub Combo1()
Call NextMacro(1)
End Sub

Sub NextMacro(ByVal SelCombo As Integer)
Dim ans As String
If Sheets("LOG").Range("C1") = False Then
Sheets("回答書").DrawingObjects("Combo" & SelCombo).ListIndex _
= Sheets("LOG").Range("H" & (30 + SelCombo)).Value
Exit Sub
End If
If Sheets("回答書").DrawingObjects("Combo" & SelCombo).ListIndex = 6 Then
ans = InputBox("地域を入れてください。", "地域設定")
Worksheets("LOG").Range("J" & SelCombo) = ans
End Sub

で、いいのでは。
ちゃんと全部キレイにまとまるやん♪
と、言いたいところなんですが、テストしてません。
動かなかったらごめんなさい。(^-^;;;

ゆん(yunn117)です。
まず、ByValですが、引数を値渡しするという宣言(?)です。
もうひとつ、ByRefというのがあって、それは参照渡しというモノになります。
・・・値渡しとか参照渡しってなに?というのを説明するべきなんでしょうが
説明がかなり苦手なので。。。申し訳ないです。(^-^;

で、検討がつかない、なんておっしゃってますが
Combo2では、ちゃんとNextMacro(2)って渡してるじゃないですか♪
カッコ内に入れた値が、NextMacro側に渡ってます。

ExcelのVBAのヘルプが見られる環境なら、...続きを読む

Q(VBA)チェックボックスのclickのイベントが、プログラムからの操作でも反応してしまいます。

エクセルのマクロを作成中なのですが、
チェックボックスのTrue/Falseを他のプロシージャから直接変更すると、
clickのイベントに設定してあるはずのプロシージャが反応してしまいます。
本来、そういった操作で反応するのはchangeのイベントだと認識しているため、
意図しない挙動になってしまって困っています。何が原因でしょうか?
エクセルのバージョンは2013、VBAのバージョンは7.1です。

以下ソース
(ユーザーフォームにテキストボックス「TextBox」とチェックボックス「CheckBox」を配置)
テキストボックスに何かを入力するとチェックボックスをTrueにしますが、
そうするとCheckBox_Clickでないと表示されないはずのメッセージボックスが出てしまいます。

Private Sub TextBox_Change()
Me.CheckBox = True
End Sub

Private Sub CheckBox_Click()
MsgBox "test"
End Sub

エクセルのマクロを作成中なのですが、
チェックボックスのTrue/Falseを他のプロシージャから直接変更すると、
clickのイベントに設定してあるはずのプロシージャが反応してしまいます。
本来、そういった操作で反応するのはchangeのイベントだと認識しているため、
意図しない挙動になってしまって困っています。何が原因でしょうか?
エクセルのバージョンは2013、VBAのバージョンは7.1です。

以下ソース
(ユーザーフォームにテキストボックス「TextBox」とチェックボックス「CheckBox」を配置...続きを読む

Aベストアンサー

こんばんは。

>他のプロシージャから直接変更すると、
このように、ActiveControl で、回避すればよいと思います。
If ActiveControl.Name = CheckBox1.Name Then

なお、私なら、このようにしていると思います。TextBox が空なら、CheckBox もオフになるということです。意味が違っていたら、ご指摘ください。

Private Sub TextBox_Change()
 If Me.TextBox.Text <> "" Then
  Me.CheckBox.Value = 1
 Else
  Me.CheckBox.Value = 0
 End If
End Sub
Private Sub CheckBox_Click()
 '直接処理しないと、MsgBox は働かない。
 If ActiveControl.Name = CheckBox.Name Then
   MsgBox "Test"
 End If
End Sub

Qコンボボックスの設定  【エクセル】

エクセルのコンボボックスについてです。
コンボボックスのリストとして


黄色
というリストをコンボボックスの‘入力範囲’に指定します。

コンボボックスの
‘コントロールの書式設定’→‘リンクするセル’
でセルを指定すると、赤を選んだとき リンクさせたセルには
「1」とでますが、なぜ1と出るのか、というのと
私は「赤」と表示させたいのですが、そのやり方を教えて頂きたいです。

コンボボックスを初めて使うので初心者的な質問だと思いますが宜しくお願いします。

Aベストアンサー

この質問もあいまいな点あるのだが。
(1)データー入力規則ーリストー元の値のドロップダウンリスト
ガあるのだが知っていて使わないのか?
これだと質問のようなことはない。選択したドロップダウンの出るセルに文字が出る。
(2)シートやユーザーフォームにコンボボックスを貼り付けているのか
A。質問者はどうもフォームのコンボボックスを使っているらしい
(「入力範囲」という言葉から)
下記Bをお勧めします。
しかし現状のままだと別のセルに一旦数字を出して(J2とでも仮定して)赤白黄うお出したいセルに
=INDEX(H1:H3,J2)
と入れると良い。
H1:H3に赤、青、黄といれて置く(入力範囲)。
ーー
B.コントロールツールボックスのコンボぼっくすを使うと
FillListRangeに例えばH1:H3  H1:H3に赤、青、黄といれ
LinkedCellを例えばD2にすれば、選択後出るには赤とでる。
ーー
>「初心者的な」といいながら、一番難しい方法でやっているようだ。

QVB6でClickイベントを一時的に削除したい

お世話になります

VB6で二つのコンボックス内でお互いのリストを編集する処理を作りたいのですが、
イベントを止めないと、編集時に相手のコンボックスにClickイベントが発生して無限ループになってしまいます。
そこでRemoveHandler、AddHandlerで一時的にイベントを停止させたいのですが、
今度は「メソッドまたはデータメンバが見つかりません。」のエラーが出てしまいます。
※Me.を付けても同じ結果でした

どのように記述したらClickイベントを止められますか?

Private Sub Combo1_Click()
RemoveHandler Combo2.Click, AddressOf Combo2_Click
ここでCombo2の編集
AddHandler Combo2.Click, AddressOf Combo2_Click
End Sub

Private Sub Combo2_Click()
RemoveHandler Combo1.Click, AddressOf Combo1_Click
ここでCombo1の編集
AddHandler Combo1.Click, AddressOf Combo1_Click
End Sub

お世話になります

VB6で二つのコンボックス内でお互いのリストを編集する処理を作りたいのですが、
イベントを止めないと、編集時に相手のコンボックスにClickイベントが発生して無限ループになってしまいます。
そこでRemoveHandler、AddHandlerで一時的にイベントを停止させたいのですが、
今度は「メソッドまたはデータメンバが見つかりません。」のエラーが出てしまいます。
※Me.を付けても同じ結果でした

どのように記述したらClickイベントを止められますか?

Private Sub Combo1_Click()
RemoveHand...続きを読む

Aベストアンサー

ざっと作ったのと試験環境がないので多少の手直しは必要かも。
おおよそのイメージです。

'Option explicitの直下で定義すること
public bフラグ as boolean  'True:他のイベントで発生、false:ユーザ操作で発生

private form_load

 bフラグ=true

 'ここでコンボ要素を作る

 bフラグ=false
exit sub

private combo1_click

 if bフラグ then 'booleanだからbフラグ=trueと書かなくてもOK
  exit sub
 end if

 bフラグ=true
 combo2.Listindex=combo1.Listindex
 bフラグ=false
exit sub

private combo2_click

 if bフラグ then 'booleanだからbフラグ=trueと書かなくてもOK
  exit sub
 end if

 bフラグ=true
 combo1.Listindex=combo2.Listindex
 bフラグ=false

exit sub

ざっと作ったのと試験環境がないので多少の手直しは必要かも。
おおよそのイメージです。

'Option explicitの直下で定義すること
public bフラグ as boolean  'True:他のイベントで発生、false:ユーザ操作で発生

private form_load

 bフラグ=true

 'ここでコンボ要素を作る

 bフラグ=false
exit sub

private combo1_click

 if bフラグ then 'booleanだからbフラグ=trueと書かなくてもOK
  exit sub
 end if

 bフラグ=true
 combo2.Listindex=combo1.Listindex
 bフラグ=false
exit sub
...続きを読む

Qエクセル、コンボボックス/フォームのとコントロールツールボックスの

エクセル2000です。
今まではワークシートにフォームのコンボボックスを貼って使ってきました。
でも色を変えたり出来ないので、今度はコントロールツールボックスからコンボボックスを貼ってみました。

質問ですが、コンボボックスに表示させるリストを設定するのに、これまでのフォームのコンボボックスだと書式設定で入力範囲をカーソルをあてて一度に簡単に指定できたのですが、コントロールツールボックスのコンボボックスだとそれが出来ません。VBEditorのプロパティのところのListFillRangeの右側にいちいち手でSheet1!A1:A5のように打ち込まなければならないようです。これではけっこう手間がかかってしまいます。
わたしのやりかたが間違っているのでしょうか?

Aベストアンサー

#2です。
>この意味が良くわかりませんでした。
エクセル(VBA)ではリストに出す範囲を指定するだけですが、
VBのコンボボックスの項目(アイテム)の登録はListFillRangeがないので、AddItemを項目数だけ、記述
する必要があると言うことを言いたかったのです。
エクセル(VBA)では手数が省けていると思います。

QVB.NETでコンボボックスの1行目を空白にしたい

毎度、お世話になっております。

VB.NETでコンボボックスの1行目を空白にしたいです。

(1)[デザイン]のプロパティで設定できますか?
 探したのですが、なかなか見つけられず困っています。
 コードで記述する方法も分からずながら、試してみましたが、うまくいきません。
(2)もしコードで記述するしかなければ、どのように記述したらよいか教えてください。

※データは、DBから取得したものを、DataSetに割り当てています。
 それをPropertyで宣言したコンボボックスに表示するという形に
 しています。

どうぞ、よろしくお願いいたします。 

Aベストアンサー

(1)ではなかったような。。。
(2)の方法です。
dim dt as datatable = DBから取得
Dim drWork As DataRow = dt.NewRow
drWork("AAA") = "" ’表示用
drWork("BBB") = -1 ’値用
dt.Rows.InsertAt(drWork, 0)

Me.ComboBox1.DataSource = dt
'この下の行はプロパティで設定してるならいらない
Me.ComboBox1.DisplayMember = "AAA"
Me.ComboBox1.ValueMember = "BBB"

な感じでしょうか。

Qエクセルに貼りついたコンボボックスについて

パソコン初心者です。よろしくお願いします。

インターネットの画面をコピーしてエクセルに貼り付けました。
余分な部分まで貼り付けてしまい削除したのですが、コンボボックスがどうしても削除できません。(リンクははずしました。)
ドラッグすることもできず、行を削除してもコンボボックスは残っております。どうしたらコンボボックスを削除できるでしょうか?
ご回答よろしくお願いいたします。

Aベストアンサー

こんにちは。

お使いのExcelのバージョンによって操作が違うかもしれませんので参考までに。
※以下はExcel2000での操作例です。

まず、ツールバーに「デザインモード」というアイコン(鉛筆?と三角定規とものさし
が書かれているもの)が表示されていないでしょうか?
もし表示されていなければ以下の操作をしてみて下さい。

1)メニュー操作
  「表示」→「ツールバー」をクリック
2)表示されたメニューより「Visual Basic」にチェックマークが付いていなければ、
  クリックして下さい。
3)これでツールバーが追加されて「デザインモード」というアイコンが表示され
  ていれば、下記の作業を行ってみて下さい。

次に、コンボボックスの削除を行います。
※添付画像もご覧下さい。

4)ツールバーの「デザインモード」のアイコンをクリックして、くぼんだ状態に
  して下さい。(※デザインモードをONの状態にします。)
5)シート上の消したい「コンボボックス」にマウスを当ててクリックして下さい。
  ※これで「コンボボックス」が選択状態になり、周囲にサイズ変更用の
   マークが表示されると思います。
6)上記5)でコンボボックスが選択状態になったら、[Del]キー(デリートキー)
  を押して下さい。
  ※これで「コンボボックス」が削除されれば完了です。
7)続けて、他のコンボボックスなどのコントロールを削除したい場合は、
 上記5)、6)の作業を繰り返して下さい。

8)なお、シート上のコントロールを全て削除したい場合は、下記の操作を
 行って下さい。
 ◎あらかじめ「デザインモード」をONの状態にします。
   ↓
 ◎メニュー: 「編集」→「ジャンプ」
   ↓
 ◎表示された「ジャンプ」ダイアログの「セル選択」ボタンをクリックします。
   ↓
 ◎表示」された「選択オプション」ダイアログの中の「オブジェクト」という
  項目(オプションボタン)を選択します。
   ↓
 ◎「OK」ボタンをクリックします。
   ↓
 ◎これでシート上の全てのコントロールが選択された状態になります。
   ↓
 ◎ここで[Del]キー(デリートキー)を押せば、全てのコントロールが削除
  されます。

9)作業が終了したら、「デザインモード」アイコンを再度クリックして、
  デザインモードをOFFにします。

以上で作業完了です。

もしも上手くいかなかった場合はすみません。
参考になれば幸いです。

こんにちは。

お使いのExcelのバージョンによって操作が違うかもしれませんので参考までに。
※以下はExcel2000での操作例です。

まず、ツールバーに「デザインモード」というアイコン(鉛筆?と三角定規とものさし
が書かれているもの)が表示されていないでしょうか?
もし表示されていなければ以下の操作をしてみて下さい。

1)メニュー操作
  「表示」→「ツールバー」をクリック
2)表示されたメニューより「Visual Basic」にチェックマークが付いていなければ、
  クリックして下さい。
...続きを読む

QVB.NETでボタンクリックイベントの後に来るPage_Loadのようなイベントはありますか?

タイトルのとおりなのですが、
VB.NETでボタンクリックイベントの後に来るPage_Loadのようなイベントはありますか?
教えてくださいーー

Aベストアンサー

お世話になります。

ボタンを押そうが何をしようが、
PostBack するたびに、Page_Load は走りますよ。
そこで判断をしたいのであれば、
Page.Load イベント内で以下の様に記述してやれば
よいかもしれません。

If IsPostBack Then
  ' 初めてページを読み込んだ時処理
Else
  ' そうでない時処理
  If Not Request("ボタンの name") Is Nothing Then
    ' ボタン押下により発生した PostBack
  End If
End If

参考URL:http://msdn2.microsoft.com/ja-JP/library/system.web.ui.page.ispostback.aspx

QエクセルVBA コンボボックスで強制終了

こんにちは。
エクセルVBAでいくつかのフォームを作成しているのですが、
常にではないのですが、「問題が発生したため・・・」のメッセージで
強制終了させられてしまいます。
恐らく、コンボボックスが原因かと思われるのですが。。。
申し訳ありません。教えていただけると嬉しいです。

VBA
1.Initialize
 (1)コンボボックス1リスト設定:データ2
 (2)コンボボックス2~21(20個のコンボボックス)リスト設定
               :データ数80
2.コンボボックス1_Change
 (1)コンボボックス22リスト設定:データ数80

現象
 (1)コンボボックス22を▼でなく入力し、保存すると強制終了
 (2)上記現象発生後、コンボボックス1の▼押下で強制終了
 (3)複数のPCで試したが、性能の良いPCでもたまに起こる。
  性能が悪いPCの場合、確実に起きる。
 (4)他のフォームはいくらやってもこの現象は発生しない。
  但し、コンボボックス2~21のような大量なコンボボックスはない

考えること
 (1)コンボボックスのリストの限界等はあるのでしょうか。
 (2)メモリ等の関係で発生するのでしょうか。
 (3)コンボボックスに入力不可とするか、テキストでNoを入力
  させる方法をとった方がよいでしょうか。

長々とすみません。
よろしくお願いいたします。

   

こんにちは。
エクセルVBAでいくつかのフォームを作成しているのですが、
常にではないのですが、「問題が発生したため・・・」のメッセージで
強制終了させられてしまいます。
恐らく、コンボボックスが原因かと思われるのですが。。。
申し訳ありません。教えていただけると嬉しいです。

VBA
1.Initialize
 (1)コンボボックス1リスト設定:データ2
 (2)コンボボックス2~21(20個のコンボボックス)リスト設定
               :データ数80
2.コンボボックス1_Change
 (1)コンボ...続きを読む

Aベストアンサー

こんにちは。

>VBAを組んだのは2007で今、それを動かしているのは2002です。
>こんなことをしているのが悪いのでしょうか・・・。

一般論なのですが、VBAの場合は、下位互換は期待しないほうがよい、ということです。下のバージョンでは、テキストコード(.bas)で、エクスポート・インポートをしたほうが良いかもしれません。特に、2007と2003では、ファイルフォーマットが違いますからね。

>自分で設定しない限りは、Add-inの機能はエクセルに入ってないという認識でよいでしょうか?

今、私は、「自分で設定しない限り」だったか、ちょっとはっきり答えられません。これは、当面、そのままにしておきます。

Qtextbox.textやlabel.captionの型変換について

VB6.0を使用しています。
テキストボックスやラベルに値として数字を入れているのですが、これらの値に数字で加算減算する場合・・・

●宣言部でintegerを宣言する又は、

●string型で宣言してからプロシージャ内でCint(textbox.text)やCint(label.caption)のように変換するのとどう違うのでしょうか?

Aベストアンサー

宣言部でintegerを宣言した変数でも、textboxやlabelに放り込む時点で、テキスト型にキャストされてます。

また逆に、textbox.textやlabel.captionをそのまま数値計算式に放り込んで計算できたりするのは、「それらが数値だった場合、数値型にキャストする」といった処理が暗黙のうちに行われているためです。

VB6.0に限れば別に問題の無い話かもしれませんが、自身の将来的なことも見越すならば、明示的な型変換はなるべく心がけるようにしたほうがよいと思います。
textbox.textやlabel.captionの値を計算式に用いる場合は、CintやClngで型変換するようにしましょう。


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング