Excel VBA質問箱 IV

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

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


74051 / 76612 ←次へ | 前へ→

【7031】Re:変数の値が初期化されてしまう現象について
お礼  ichinose  - 03/8/20(水) 18:21 -

引用なし
パスワード
   MPUS さん、でれすけさん、BOTTAさん、こうちゃん、つんさん。
みなさん、こんにちは。
大変参考になる情報をありがとうございました。

BOTTAさん、こうちゃん、つんさん。
ありがとうございました。再現性があるバグ?だと認識できました。

でれすけさん、初めまして、ご回答ありがとうございます。

>ichinoseさんが提示されたマクロをステップ実行すると、
>コマンドボタンを追加するところで、
>「中断モードでは入力出来ません」とメッセージがでて、
>実行が終了します。
>私の経験では、こういうときは変数が初期化されます。
↑このご経験、別の事象の「変数の初期化」を探る時に参考になりそうです。

手動でActiveXControlを貼り付けるときにデザインモードになりますよね。
デザインモードに入った時点で変数は初期化されます。
これがAddメソッドにも影響を及ぼしているというようなバグかな?等と考えていました。

MPUSさん、初めまして。
ご回答ありがとうございます。

>コントロールツールボックスのaddは変数を初期化してしまう仕様(バグ)の
>ようですね。
>シートでコントロールツールボックスを用いるのは色々不都合の元みたいです。
↑ですね、でも、基本的には私、新しいもの好きなもので・・・。


>正確に言うとOLEObjects.Addしたシートのbookの変数を初期化するみたいです。
>従って、コードの書かれた以外のbookのシートにaddすると、変数は初期化されない
>のではないでしょうか?
実際には、作成したボタンのイベントモジュールが作れなかったので、この現象に
気が付いたのですが・・・。
ヒントになりました。ありがとうございます。

文字列変数や数値変数などは、これがバグだと分かれば、セルに保存するとして・・。

イベントプログラムやインスタンスを作成するブック(変数を保持するブック)とボタンを作成するブックを分けてしまおう と思いました。

仮に
 ブックA.xlsがボタンを貼り付けるブックとします。
 ブックB.xlsには、イベントプロシジャーやクラスのインスタンスを作成します。
 ブックA.xlsは、ブックB.xlsを参照設定しておきます。
A.xlsの標準モジュールでは
'=============================================
Sub main()
  Dim btn As OLEObject
  Set btn = myclss.add_chkbtn(Range("a1"))
  btn.Object.Caption = "感謝"
End Sub

これだけ。

B.xlsの標準モジュールには、
'====================================
Public myclss As New Class1

クラスモジュール(Class1)に
'=====================================
Public WithEvents cbt As CommandButton
'=====================================
Private Sub cbt_Click()
  MsgBox "ok"
End Sub
'=============================================
Function add_chkbtn(rng As Range) As OLEObject
  With rng
    Set add_chkbtn = _
      .Parent.OLEObjects.Add _
       (ClassType:="Forms.CommandButton.1", Link:=False, _
       DisplayAsIcon:=False, Left:=.Left, _
       Top:=.Top, Width:=.Width, _
       Height:=.Height)
    Set cbt = add_chkbtn.Object
    End With
End Function

とし、A.xlsのmainを実行し、作成されたボタンをクリックしたところ、
クリックイベントが作動してくれました。

実際には、B.xlsは、アドインにするか見えなくしておく等の処理が必要ですが・・。

こんなに大勢の方に回答を頂いたのに何も結果を残さないのでは・・と思い、
コードを記述しました。

みなさん、ありがとうございました。


追伸
このサイトで新規質問をしたのは、記憶違いでなければ、これで2回目です。
普段は、質問すら浮かばない・・・なので、他の方のご質問を勉強材料にさせて
頂いています。

前の質問したときは、説明が悪かったのか回答を頂けませんでした。
今回は、大勢の方からの回答を頂き、正直すっごくうれしいです。

繰り返しになりますが、本当にありがとうございました。

495 hits

【7011】変数の値が初期化されてしまう現象について ichinose 03/8/20(水) 9:33 質問
【7012】こっちは出来たよ(98se+2002) つん 03/8/20(水) 10:06 発言
【7013】大うそつき野郎でした つん 03/8/20(水) 10:13 発言
【7015】Re:大うそつき野郎でした ichinose 03/8/20(水) 10:21 お礼
【7014】Re:こっちは出来たよ(98se+2002) ichinose 03/8/20(水) 10:17 お礼
【7016】Win2k/XP Office2k/xp すべて再現 こうちゃん 03/8/20(水) 11:48 発言
【7019】Re:Me Office2k でも0 BOTTA 03/8/20(水) 14:35 発言
【7027】Re:Me Office2k でも0 でれすけ 03/8/20(水) 16:29 発言
【7029】Re:変数の値が初期化されてしまう現象につい... MPUS 03/8/20(水) 16:33 回答
【7031】Re:変数の値が初期化されてしまう現象につい... ichinose 03/8/20(水) 18:21 お礼
【7032】Re:変数の値が初期化されてしまう現象につい... でれすけ 03/8/20(水) 19:38 発言
【7036】Re:変数の値が初期化されてしまう現象につい... ichinose 03/8/21(木) 0:00 お礼
【7059】いまごろ、結果だけ...。 Jaka 03/8/21(木) 13:13 発言
【7071】Re:いまごろ、結果だけ...。 ichinose 03/8/21(木) 17:34 回答

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