次の方法で共有

イベントの共有でクラスモジュール変数にプロパティーをセットすると、1度フォームで正常動作後、デザインビューに戻すとハングアップする。

Anonymous
2014-10-14T03:51:31+00:00

60歳からVBAを始めた初心者です。 2003から2013年度版に移行したソフトが、うまく動作しません。

フォームにタブコントロールを作り、更に各ページにタブコントロールを入れ、かつ各タブの各ページににコンボボックスを2~3個入れ、全部で100個以上のコンボボックスを配置(配列化しています)しています。

(実際にはタブの入れ子は出来ないので、Visibleで切り替えています) このコンボボックスに共通のイベント(値リストの行を8個にし、新しいデータ時にFIFOさせる)を発生させる為にクラスモジュールを作り、WithEventsでイベントを発生させ、クラスモジュールでモジュール変数をセットし、該当する配列変数のモジュール変数を、OnNotInListやLimitToListのプロパティーに、"[Event Procedure]"などを設定しています。 

このソフトが、2003年度版では機能していたのですが、2013年度版では、1度フォーム開で正常動作するのですが、デバッグのためデザインビューにするとハングアップするようになりました。

エラーにもならず、いきなり「対策を考えています・・」のコメント表示後、バックアップファイルをつくり、再起動してしまいます。この配列変数.モジュール変数=Form_フォーム名.コンボボックス名をしないと現象は発生しません。 ネット情報からイベント共有のソフトがいくつか有り、参考にして作成してみましたが、同じ症状でハングアップします。

どうにもならず私もハングアップしています。 

良い知恵が有りましたら、教えていただけないでしょうか。 

なおもう一つ、タブコントロールにたくさんタブを作り、タブの幅を超えたら、2003ではタブのスクロールが自動で出来ていたのですが、2013では出来ません。 仕方なくタブサイズとフォントを小さくして使っていますが、この機能は無くなったのでしょうか? 余りにも普通の機能だったので、不便で仕方が有りません。

Microsoft 365 と Office | アクセス | 家庭向け | Windows

ロックされた質問。 この質問は、Microsoft サポート コミュニティから移行されました。 役に立つかどうかに投票することはできますが、コメントの追加、質問への返信やフォローはできません。

0 件のコメント コメントはありません

質問作成者が受け入れた回答

Anonymous
2015-01-05T05:33:15+00:00

MSDNの方を検索してみましたが、該当する質問がないようでしたので、こちらに。

私の環境でも、下記ソースにて、同様現象が再発致します。

解決方法としては、「Form_Unload時に、インスタンス化したオブジェクトに、Nothingをセットする」

ことで回避可能です。

検証環境は、Access2013(単体、別途Office2010 Personal導入済) + Windows7 32bitです。

他の環境における動作については、

手持ちがないため、勇士の方に検証をお願い致します。

accdbファイル新規作成後、クラスを追加

クラス名:CommonEvents

-----------ここから------------

Public CommonEvents As Control

Public WithEvents CommonTextBox As TextBox

Public Sub BindCtl(ByRef prControl As TextBox)

    Set Me.CommonTextBox = prControl

End Sub

Public Sub UnBindCtl()

    '紐付けされているコントロールを解放する

    Set pubCommonTextBox = Nothing

End Sub

-----------ここまで-----------------

フォームを作成し、テキストボックスおよびボタンを1つ配置

-----------ここから------------

Private CE(0) As New CommonEvents

Private Sub Form_Load()

    Call CE(0).BindCtl(Me.テキスト0)

End Sub

Private Sub コマンド2_Click()

    Call CE(0).UnBindCtl

End Sub

-----------ここまで-----------------

・Formを起動し、すぐにデザインモードへ

 →Access自体が強制終了

・Formを起動し、ボタンを押してからデザインモードへ

 →問題なし

実際にプログラムとして使う場合は、form_Unloadイベントで、UnbindCtlを呼んでいます。

しかし、うっかりUnbindし忘れた状態で、

保存せずにデザインモードにすると入力内容が全て無駄になりますし、

DoCmd.Close acForm からでも同様に不正終了となってしまいますので、

Access側で、対応して欲しいところですね。

この回答は役に立ちましたか?

0 件のコメント コメントはありません

4 件の追加の回答

並べ替え方法: 最も役に立つ
  1. Anonymous
    2015-01-30T08:41:11+00:00

    ​へつ さん、コメントをありがとうございます。

    60notenarai さん、こんにちは。

    へつ さんのアドバイスにより、無事に問題が解消されたようで良かったです。

    私のほうではお役にたてず、すみません。。

    同じようなことでお困りの方にも参考にしていただけるよう、今回は私のほうで「回答としてマーク」をさせていただきました。

    よろしければ、また投稿してみてくださいね。

    今後もマイクロソフト コミュニティをどうぞよろしくお願いいたします。

    この回答は役に立ちましたか?

    0 件のコメント コメントはありません
  2. Anonymous
    2015-01-28T09:48:19+00:00

    へつさんへ

    有難うございました! おかげで何とか次へ進むことが出来ました。

    何分アクセスVBAも、このような投稿も含め初めてのことで、ご回答を頂いたことも最近知りました。

    早速まねして(少し理解して)作り直し、ハングアップはしないようになり、ほっとしているところです。

    「 '紐付けされているコントロールを解放する」部分の記述がまずかったようでした。

    60も過ぎると、覚える先から忘れていき、四苦八苦しています。

    でもこの世界は白黒がはっきりしていて、気持ちが良いですね。

    又お世話になることもあろうかと思いますので、今後とも宜しくお願いいたします。

     60の手習い

    この回答は役に立ちましたか?

    0 件のコメント コメントはありません
  3. Anonymous
    2014-10-17T09:04:13+00:00

    森 様

     早速の返信、有難うございます。

    なにぶんはじめてのことで、何でもアドバイスいただけると助かります。

    業務の都合でやっとこの年で、この世界に入ることが出来ました。

    内容は面白いのですが勉強・経験不足で、ひっかかってばかりです。

    MSDNフォーラムのほうにもお願いしてみます。

    今後とも宜しくお願いいたします。

     60の手習い

    この回答は役に立ちましたか?

    0 件のコメント コメントはありません
  4. Anonymous
    2014-10-15T00:25:42+00:00

    60notenarai さん、こんにちは。

    マイクロソフト コミュニティをご利用いただき、ありがとうございます。

    VBA で作成されたソフトについてのご質問ですね。

    VBA に関しては、開発者の方々が情報交換を行っている MSDN に専門のフォーラムがあるので、そちらに投稿していただいた方が、より情報やアドバイスが得られやすいかと思います。

    MSDN の VBA フォーラム

    せっかくこちらに投稿していただいたのにお手数をおかけいたしますが、一度 MSDN フォーラムをご利用になってみてくださいね。

    この回答は役に立ちましたか?

    0 件のコメント コメントはありません