Excel VBA質問箱 IV

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

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


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

【68875】SpinButtonのイベント 悩める老人 11/4/24(日) 7:31 質問[未読]
【68876】Re:SpinButtonのイベント ichinose 11/4/24(日) 9:00 発言[未読]
【68881】Re:SpinButtonのイベント 悩める老人 11/4/24(日) 10:06 お礼[未読]
【68877】Re:SpinButtonのイベント SK63 11/4/24(日) 9:05 発言[未読]
【68878】Re:SpinButtonのイベント grok 11/4/24(日) 9:15 発言[未読]
【68879】Re:SpinButtonのイベント grok 11/4/24(日) 9:20 発言[未読]

【68875】SpinButtonのイベント
質問  悩める老人  - 11/4/24(日) 7:31 -

引用なし
パスワード
   下記のとおり SpinButtonの値を UserForm_Initializeで入力
したところイベント SpinButton1_Changeが発生します。

イベント発生回避の Apllication.EnableEvents=False を使ってみましたが
うまくいきませんでした。

SpinButton1_Changeイベント発生回避はどのようにしたらよいのかご教示ください。

Private Sub UserForm_Initialize()

Dim aa As Integer
 aa = Sheet1.[a1].CurrentRegion.Rows.Count
 SpinButton1.Min = 1
 SpinButton1.Max = aa

End Sub

Private Sub SpinButton1_Change()

  ・・・略・・・・
  TextBox1.Value = SpinButton1.Value
  ・・・略・・・・

End Sub

【68876】Re:SpinButtonのイベント
発言  ichinose  - 11/4/24(日) 9:00 -

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

>下記のとおり SpinButtonの値を UserForm_Initializeで入力
>したところイベント SpinButton1_Changeが発生します。
InitializeイベントでSpinButtonの値を変更すれば、発生しますよね。
>イベント発生回避の Apllication.EnableEvents=False を使ってみましたが
>うまくいきませんでした。
ActivexControlのイベントをApllication.EnableEventsの値で抑制はできませんよ!!


>SpinButton1_Changeイベント発生回避はどのようにしたらよいのかご教示ください。
検討事項
Changeイベントではなく、SpinDown、SpinUpイベントで対応できないのか?
検討してください。これなら、SpinButtonの変更では、イベントが発生しません。

どうしてもChangeイベントでの処理が必要な場合、
Apllication.EnableEventsの役割をするフラグを自分で作成する必要があります。

ユーザーフォームのモジュールに

private eev as boolean 'イベント発生 True 可 False 不可
Private Sub UserForm_Initialize()

 Dim aa As Integer
 aa = Sheet1.[a1].CurrentRegion.Rows.Count
 eev=false
 SpinButton1.Min = 1
 SpinButton1.Max = aa
 eev=true
End Sub

Private Sub SpinButton1_Change()
  if not eev then exit sub
  ・・・略・・・・
  TextBox1.Value = SpinButton1.Value
  ・・・略・・・・

End Sub

検討してみてください

【68877】Re:SpinButtonのイベント
発言  SK63  - 11/4/24(日) 9:05 -

引用なし
パスワード
   ▼悩める老人 さん:
>下記のとおり SpinButtonの値を UserForm_Initializeで入力
>したところイベント SpinButton1_Changeが発生します。
>
>イベント発生回避の Apllication.EnableEvents=False を使ってみましたが
>うまくいきませんでした。
>
>SpinButton1_Changeイベント発生回避はどのようにしたらよいのかご教示ください。
>
ここにのっています、一度参考にされては、
ht tp://home.att.ne.jp/zeta/gen/excel/c04p38.htm


■ SpinButtonコントロールオブジェクトのプロパティ
・Enabled:SpinButton1コントロールの場合、Trueで通常の表示と操作ができます、Falseで淡色表示となり、イベントに応答しなくなります。

【68878】Re:SpinButtonのイベント
発言  grok  - 11/4/24(日) 9:15 -

引用なし
パスワード
   ▼悩める老人 さん:

おはようございます。

>下記のとおり SpinButtonの値を UserForm_Initializeで入力
>したところイベント SpinButton1_Changeが発生します。
>
>イベント発生回避の Apllication.EnableEvents=False を使ってみましたが
>うまくいきませんでした。

Apllication.EnableEventsは、Application配下のオブジェクトのイベントを制御
するものです。Applicationの配下にあるのはWorkBookやWorkSheetなどです。

UserFormはApplicationの配下にはありません。
ここで言うApplicationとはExcelの事です。

悩める老人さんが作成したUserFormは、AccessやWordでもインポートすればその
まま使用出来ます。(RangeやCellsなどExcel特有のコードを書いていなければそ
のまま、書いてあっても手を加えれば使用できます。)
ですのでUserFormは、Excel君の持ち物ではないと分かります。

UserFormはMSForms.UserFormと書くことから、MSFormsの持ち物だと
分かりますね?

UserFormでのイベントの抑制は、フラグを使う方法がよく紹介されています。

'モジュールレベルで宣言します。
'このフラグはUserForm_Initialize中はTrueに設定しておき、Subを抜ける前に
'Falseに設定します。このフラグを見てイニシャライズ中かどうか判断します。
Private IniFlag As Boolean

Private Sub UserForm_Initialize()

Dim aa As Integer
 
 IniFlag = True

 aa = Sheet1.[a1].CurrentRegion.Rows.Count
 SpinButton1.Min = 1
 SpinButton1.Max = aa

 IniFlag = False

End Sub

Private Sub SpinButton1_Change()
 
  IF IniFlag Then Exit Sub 'IniFlagがTrueならExit Subします。

  ・・・略・・・・
  TextBox1.Value = SpinButton1.Value
  ・・・略・・・・

End Sub

参考になれば。

【68879】Re:SpinButtonのイベント
発言  grok  - 11/4/24(日) 9:20 -

引用なし
パスワード
   あああ、、
みなさんレスポンス早すぎです、、
ichinoseさんモロかぶりすいません。。

ichinoseさんと私が使っているフラグの意味合いが違いますので
trueとfalseが逆になっています。ご注意を。

失礼しました。

【68881】Re:SpinButtonのイベント
お礼  悩める老人  - 11/4/24(日) 10:06 -

引用なし
パスワード
   おはようございます! 早速のご回答ありがとうございます。
回答よせられた皆さんに感謝しています。
大変嬉しく思い一段とVBAへの勉強意欲が増してきました。
今後ともよろしくお願いします。

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