|
▼mohimohi さん:
コードは、もうしばらく待ってください。
以下は、「予習」ということで、時間があるときに目を通していただければと思います。
ブックを開いたときに、何かを自動実行させるには参照された井上さんのページにも記載の
2つの方法があります。
1つは ThisWorkbookモジュールに書く、WorkBook_Open イベント処理。
もう1つは 標準モジュールに書く、Auto_Open プロシジャによる処理です。
後者は、古い仕組みで、ブックを開いたときには実行されますが、
別のマクロで、このブックを開いたときには実行されません。
ですから、最近のトレンドとしては前者が多いですね。
いずれにしても、今回は、今までのシートモジュール以外にもコードを書くことになります。
シートモジュールで、そのシートのActiveXコントロールを参照する場合、
コントロール名記述のみでOKです。
たとえば ComboBox1 、その値は ComboBox1.Value といったように。
ところが、当該シート以外のシートモジュールも含めて、別のモジュールで記述する場合は
以下のいずれかの記述が必要です。
Sheets("シート名").OLEObjects("ComboBox1").Object.Value
あるいは
シートコード名.ComboBox1.Value
前者は煩雑なので、今回は後者でいこうと思っています。
じゃぁ、この シートコード名 とは、何者か? ちょっとメモします。
(もし、先刻承知ならスルーしてください)
1.新規ブックを立ち上げてください。
最初にできているシートはPCの設定でかわりますが、初期設定では Sheet1〜Sheet3。
2.ここでVBE画面を開き、左上のプロジェクトエクスプローラをみてください。
Sheet1(Sheet1)
Sheet2(Sheet2)
Sheet3(Sheet3)
このようになっていますね。
3.「VBE画面をXボタンで閉じて」シートに戻って、Sheet1 のシート名を "ABCD" にかえてください。
4.で、VBE画面を呼び出しプロジェクトエクスプローラを見てください。
Sheet1(ABCD)
Sheet2(Sheet2)
Sheet3(Sheet3)
こうなっているはずです。
Sheet1(ABCD)の Sheet1 これがシートコード名です。(かっこの中はシート名)
5.で、ここからが、ちょっとややこしいのですが、「VBE画面をXボタンで閉じて」シートに戻って、
Sheet4とSheet5 を追加してください。
6.追加したSheet4を移動させて最後のシートに、Sheet5を移動させて最初のシートにしてください。
7.この状態で、VBE画面のプロジェクトエクスプローラを見てください。
Sheet1(ABCD)
Sheet2(Sheet2)
Sheet3(Sheet3)
Sheet4(Sheet5)
Sheet5(Sheet4)
Sheet名 "Sheet5" のシートコード名が Sheet4、Sheet名"Sheet4"のシートコード名がSheet5になっています。
8.ですから、シート名 "Sheet5" にある ActiveXコントロールの参照は Sheet4.ComboBox1 になります。
ややこしいですし、間違いの元になりそうですね。
なぜ、こんなことになるかというと
・シートコード名は、シートができたときには、つけられていない。
・VBE画面を開いたときに、まだシートコード名を持たないシートについて、その時の状態で「左から」
それまでにつけられた Sheet● の次の番号から連番をアサインする。
・いったんつけられたシートコード名は、強制的に変更しない限り、そのシート名をかえようが、
そのシートの場所を変更しようが 決してかわらず同じ名前のままです。
シート名が【芸名】、シートコード名が【本名】といった感じです。
で、先ほど書いた、Sheet4.ComboBox1、シート名が"Sheet4"じゃないので、間違える可能性が高いですね。
このような時、この【本名】を強制的に変更してやります。たとえば山田花子さんが佐藤さんと結構したら佐藤花子さんに
本名がかわりますね。そういうことをしてやります。
|
|