No.4ベストアンサー
- 回答日時:
こんばんは。
どうやら、こちらでは、もう思うところは、ほとんど尽きてしまいました。
>もともと_Clikのところはコントロール変数も消えてなくてのも期待通りに動作しているので問題はないように思います
私が思っていたのは、今までの私の経験で、終了時のOLEがブックと関係が切れる場合の時間差というものです。だから、プロシージャの置き場所によっても変わると考えたのです。
ExcelのバージョンとかOSの問題によってもそういうことはあるらしいのですが。
コントロールツールは、シートの属性ですから、それだけ、ブック全体やアプリケーション全体からすると、つながりは低いのです。その点でいくと、フォーム・ツールのほうが上になります。
後は、アップデートや修復ということになりそうです。
ところで、「コントロール変数」とお書きになっていますが、コントロール変数にして受け渡しをするか、コントロールを変数として作っていらっしゃるという意味ですか?
コントロールを変数として入れておけば、エラーはなくなるはずですが、インスタンスを用いないと、イベントが走らないと思います。その辺りはご存知でいらっしゃるとなると、話の様子がだいぶ違ってきてしまいます。コードとしてはややこしいです。
Class 側に、以下のようにします。
Public WithEvents OpButton As MSForms.OptionButton
ここに、イベントを設定します。
VBEditor に出てくるのは、「オブジェクト名」です。コントロール変数は、特別に、プロシージャ等の引数に、コントロールを受け渡しとして使うか、Class で、OLEオブジェクトにインスタンスを設け、それをコントロールツールのオブジェクトに当てはめて、変数にすることです。ただし、ダブルクリックしても、コードは出ません。
この回答への補足
こんばんは。 時間経ってすみません。
>終了時のOLEがブックと関係が切れる場合の時間差というものです。
そうですね。ThisWorkbookのBefore_Closeまでは大丈夫なんです。そこから何が原因でどうなっていくのか?です。
「コントロール変数」は、エラーメッセージで変数が定義されていません。と出ていて、コントロールのオブジェクト名が対象になっていたのでそのようにしました。少し安易だったかもしれません。
>Class で、OLEオブジェクトにインスタンスを設け、それを
少し苦労しましたが、エラーが出なくなりました。ただややこしくなるので個人的にはなるべく使いたくないですね。
No.5
- 回答日時:
こんにちは。
私も、今回のことは、勉強のひとつとして、長く記憶に残しておこうと思いますので、補足要求ではありませんが、もし良かったら、ExcelのバージョンとOSを教えていただけないものでしょうか?
似たような質問のケースは、今まで、1度しかありません。
あまり、特殊な解決は、私も望んではいませんが、今後、2007 から以降は、残念ですが、そういうスタイルになることは間違いないと思っています。
最近、別の方が、Wordマクロで、イベントの利かない問題が発生しました。それは、Microsoft サポートでトラブルシューティングとして公開されていましたが、やはり、Class インスタンスの解決方法でした。やがて、だんだんと、マクロも、本格的なオブジェクト指向になる可能性が強くなってきているような気がします。
この回答への補足
こんばんは。
分けの分からない問題を考えて下さってありがとうございます。
Excel2003 SP3 , 2000 SP4です。excel2000でも起きました。
MicrosoftサポートはVBAでは有料みたいです。バグは無料?
解決法がClassインスタンスという、根本を直さずに対処するマイクロソフトの姿勢は、情けないなぁ。
こんにちは。 ようやく解決しました。
直接の原因は、ComboBoxにありました。これを一旦消して全く同じものに
作り直したところ前記のエラーは表示しなくなりました。プロパティを比較しても全く同じなので、いつの間にかコントロール内部に不具合が蓄積してたようです。どうしてComboBoxなのかは、VBAと直接の変更が多かったぐらいの理由ですので対処法はここの事例によって違ってきます。
今後もコントロールを多く使ったソフトを作る過程で起きる可能性があると思いますので、皆さんの参考になればと思います。
No.3
- 回答日時:
こんばんは。
>(General)ある変数の欄を見ますと閉じる前にあったOptionButton_chart1がそから消えてしまっているのです。
これは、内部でエラーが出ているから消えるのですが、
SetChartParemeter
というのは、プロシージャーですね。
それらは、ThisWorkbook には基本的には置かないことです。標準モジュールに置く必要があるはずです。それで直ればよいのですが。
私は、はっきりとした経験がないけれども、おそらく、閉じるときに、プロシージャのエラーチェックが走るのではないでしょうか?
そのChart は、別のシートにあるのではないでしょうか?グラフシートとか別のシートに作られているのでしょうか?そうでないと、そういうコードは考えられません。
Chart に対する親オブジェクトとの不一致が起きているけれど、その時に、その元のコード自体ではなく、イベントの発生する、OptionButton_chart1_Click 等に対して、反映してくるからではないでしょうか?
一度、ためしに、
Private Sub OptionButton_chart1_Click()
'ThisWorkbook.SetChartParemeter "*****"
'Refresh_Chart "*****"
End Sub
と、コメントアウトしたら、おそらくは、発生しないのではないかと思いますが、どうでしょう。それでも、エラーが発生するでしょうか?
もし、それでエラーがとまるなら、今度は、
ThisWorkbook.SetChartParemeter
Refresh_Chart
Disp_ChartData
これらをひとつずつ見ていかなくてはなりません。簡単には終わりそうにありません。
なお、VBEditor のツール-オプション-全般
順次コンパイルは外してありますか?一度、チェックしてみてください。
この回答への補足
こんばんは。 おつき合いの程ありがとうございます。
_Click()のところの二つをコメントアウトしてみましたが、状況は
変わりませんでした。もともと_Clikのところはコントロール変数も消えてなくてのも期待通りに動作しているので問題はないように思います。
ツール-オプション-全般順次コンパイルは外していませんでした。
外してコンパイルしますとエラーメッセージはそのままで、OKを押すと
黄色のハイライトが無くそのまま閉じるようになりました。逐次コンパイルの過程がなくなっただけのような気がします。
コントロールのどこかに原因があるのか? 不思議です。
No.2
- 回答日時:
こんばんは。
まず、TextBox は、コントロールツールなのですか。
それで、コントロールツール(=OLEオブジェクト)は、シートを親オブジェクトにするものですから、シートモジュールに、そのコントロール用のコードも基本的にはなくてはなりません。そうしないと、かなりややこしいコードになってしまいます。
出来れば、コントロールツールにコードを設定するときに、「青い三角定規」がオン(編集可能な状態)になっている時、コントロール(例:テキストボックス)をダブルクリックして、開いてから、そこにコードを書くということをすれば、まず、間違いないのです。
以下のことを試してみてください。
「編集可能な状態」の時、そのコントロールをダブルクリックしてみてください。
きちんとコントロールとコードが設定されていれば、その設定されたコードが開くはずです。開いたら何もない状態なら、その登録したコードの場所が違うか、そのコードを一度見せていただくしかありません。
コントロールツール用のコードは、ネットでは高度な設定を公開している人もいます。その場合は、ダブルクリックしても、設定されたコードは開きませんから、そのコードを全部みないとチェックできません。
なお、フォームツールは、基本的には、標準モジュールで登録しますから、そのような問題は起こりません。
この回答への補足
こんばんは。回答を頂きありがとうございます。
コントロールと言うのはツールバーのコントロールツールボックスからシートに貼り付けたものです。ダブルクリックすると開きます。
以下にOptionButtonのコードで説明します。(OptionButtonでも同じエラーになりました。)
ダブルクリックしますと普通に_Click()が開きます。繰り返すのですが通常の動作は問題ありません。閉じて終了するときにComboBox_Chartlength_Change のところでOptionButton_chart1が反転してSubのタイトルが黄色にハイライトされます。
それから(General)ある変数の欄を見ますと閉じる前にあったOptionButton_chart1がそから消えてしまっているのです。
困った状態です。
Private Sub OptionButton_chart1_Click()
ThisWorkbook.SetChartParemeter "*****"
Refresh_Chart "*****"
End Sub
Private Sub ComboBox_Chartlength_Change()
....
If OptionButton_chart1.Value = True Then
Refresh_Chart "*****"
Disp_ChartData 2, 1, "******"
ElseIf OptionButton_chart2.Value = True Then
....
End Sub
No.1
- 回答日時:
こんにちは。
ご質問のタイトルの
「コントロールの変数が定義されていません 」
というエラー自体は思い当たりません。また、インターネット検索しても、ヒットしないです。
ともかく、VB Editor (Alt + F11)を開いて、プロジェクトエクプローラ(でていない場合は、Ctrl + R )で、ひとつずつ、中を開いていただくしかありません。しかし、フリーのアドイン辺りになるなら、それは、捨てていただいたほうがよいです。
その中に、
Workbook_BeforeClose(Cancel As Boolean)
や、
Auto_Close()
などの文字があったら、その画面の一番上の
Option Explicit を削除してください。
この回答への補足
説明不足で申し訳ありませんでした。
補足しますとTextBoxなどのコントロールですがブックを開いている時は
普通に認識して動作しています。閉じて終了する時にそのTextBoxが(General)などの変数があるの欄の中からなぜか消えてしまって、VBA本体が未定義の変数としてみなしているかのように「変数が定義されていません」のエラーを表示します。全てのコントロールがそうなるわけではありません。
ちなみに Option Explicit を削除して試してみますとエラー内容が「オブジェクトが必要です」に変わってしまいました。開いているときは同じように問題はありません。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- セキュリティホール・脆弱性 論理的アクセス・コントロールに関する問題で悩んでいます 1 2022/10/08 08:42
- Visual Basic(VBA) パーソナルXLSBのfuctionを呼び出すと「Functionが定義されていません」のエラーになる 2 2022/08/22 22:51
- 数学 変数と範囲について、(空集合について)質問です。 数学苦手です。よくわからないところで引っかかりがち 4 2022/09/27 13:16
- Visual Basic(VBA) Excel のユーザー定義関数でソルバーが動作しない 1 2022/09/05 19:51
- Excel(エクセル) Application.Volatile利用(excel2003) 1 2023/02/06 10:11
- Visual Basic(VBA) マクロVBA 1シートをまとめる 閉じ方 初心者 SOS! 1 2022/06/17 14:54
- Visual Basic(VBA) エクセルVBA エクセルを開いた後に編集可能な状態にするには? 2 2023/06/14 11:58
- Excel(エクセル) コントロールにリンクするセルが選択されない 3 2022/06/12 14:37
- 数学 モデルのパラメータの定義がいまいちわかりません。 3 2022/10/11 15:16
- 数学 f(x)=e^(-ax+b) のフーリエ変換をフーリエ変換の定義に従って計算せよ。但し、a>0、bは 1 2023/02/06 18:26
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
カメラスクロールするのを動画...
-
エクセル・VBA CheckBoxのオブ...
-
EXCELでactivexコントロールを...
-
コンボボックスの文字によるif...
-
C#で角が丸いテキストボックス
-
ExcelVBAでListViewが使用できない
-
C#で自分のウインド・ハンド...
-
間違えて配置してしまったコン...
-
エクセルVBAでオプションボタン...
-
コントロール配列と同じような...
-
'ckbl' コントロールは作成され...
-
VB.NET 動的コントロールの存在...
-
もしフォームヘッダーにコント...
-
ListViewのチェックボックスに...
-
With~EndWithの省略部分と引数...
-
(VBA)スピンボタンの大量...
-
コントロールのイベントの透過
-
VBAのエラーについて、”実行時...
-
ユーザーフォームで動的(Me.Con...
-
vb.netで画面のコントロールId...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
カメラスクロールするのを動画...
-
エクセル・VBA CheckBoxのオブ...
-
vb.netで画面のコントロールId...
-
エクセルVBAでオプションボタン...
-
EXCELでactivexコントロールを...
-
ExcelVBAでListViewが使用できない
-
excelのリストボックスで選択し...
-
ユーザーフォームで動的(Me.Con...
-
フォーム上の現在アクティブな...
-
C#で自分のウインド・ハンド...
-
変数をコントロール型で使用す...
-
VBAのフォームでTextBoxがいっ...
-
コントロールを移動できない
-
Groupboxの配下のコントロール...
-
C#で角が丸いテキストボックス
-
(VBA)スピンボタンの大量...
-
間違えて配置してしまったコン...
-
エクセル コントロールツール...
-
'ckbl' コントロールは作成され...
-
OCXって何ですか?
おすすめ情報