痴漢の冤罪が怖くて電車に乗らなくなりました、どうもoReです。
今回は、オブジェクト名の変更をしていきます。
オブジェクト名の変更
前回、部品登録フォームを追加したんですけど、
UserForm1、UserForm2だとわかりにくいので、
今回はオブジェクト名を変更します。
・UserForm1のオブジェクト名をMainへ変更
・UserForm2のオブジェクト名をTourokuへ変更
こうしておくと、これは何のユーザーフォームかわかりやすくなります。
このまま、Excel上からユーザーフォームを表示させると
エラーが出てしまいます。
(# ゚Д゚)『オブジェクトが必要です。』
オブジェクト名をUserForm1からMainに変更したので、
UserForm1っていうオブジェクトはねーよ!!って事です。
Sub Hyouzi()
UserForm1.Show
End Sub
もちろん、部品登録フォーム表示時もエラーがでます。
痴漢× 置換○
プログラムを変更しないといけません。
・UserForm1→Main
・UserForm2→Touroku
この程度のプログラムであれば、探し出して変更はさほど訳ないですが、
プロのグラマーな方等が作るプログラムは、大量のコードが書かれていて、
変更する箇所を探すのが大変です。
その時に役立つのが、置換です。
置換とは、置き換えることです。
ちなみに、
痴漢(ちかん)とは、性暴力の一つであり、相手の意に反して性的行為を行う者、もしくは行為そのものを指す。法律や条例によって処罰される性犯罪である。
Wikipediaより抜粋
痴漢ダメ!!絶対!!
それでは、置換してみましょう。
とりあえず、Mainフォームのコードを表示させて
・編集→置換
・検索する文字列(F):に、『UserForm1』を入力
・置換後の文字列(W):に、『Main』を入力
すべて置換(A)ボタンを押してみましょう。
『検索文字列が見つかりません。』と、エラーがでましたよね。
これは、対象が『カレント モジュール(M)』になっているためです。
・Current カァーラァントゥ
Currentは、『今の』『現在の』という意味らしいです。
・カレント プロシージャ(P)は、現在選択されているプロシージャ内のみ置換する
Sub ○○()
この選択されたプロシージャ内のみ置換
End Sub
・カレント モジュール(M)は、現在選択されているモジュール内のすべてを置換する
・カレント プロジェクト(C)は、選択されているプロジェクト内のすべてを置換する
UserForm1と書いたコードはどこにあるかというと、
Sheet1(データベース)モジュール内の、
Hyouziプロシージャ内に書いてあります。
現在選択しているのは、Mainフォームモジュールなので、
このモジュール内には『UserForm1』はありませんって意味です。
なので、置換対象をカレント モジュールではなくて
カレント プロジェクトにして、すべて置換ボタンを押してください。
置換できましたか?
※UserForm2もTourokuへ置換しましょう。
無事置換できていれば、ユーザーフォームを表示できるようになります。
Worksheets(“入出庫履歴”)
ちなみに、オブジェクトとは物体と言う意味みたいです。
ブックもシートも、コマンドボタンもラベルも物体ですよね?
その物体の名前が、オブジェクト名というわけです。
幽霊は物体か?霊体か?
『幽霊』←これがオブジェクト名だとすれば…
物体ですよ!!
幽霊はいるんですよ!!奥さん!!
ほら、あなたの後ろに。
それでは、入出庫履歴シートのシート名を変更して、
ユーザーフォームを表示してみます。
(# ゚Д゚)『インデックスが有効範囲にありません。』
シート名を変更したので、そのシート名はねーよ!!って事です。
これは、シート名を指定してプログラムを書いているので
エラーが出ています。
Worksheets("入出庫履歴") ワークシート名("入出庫履歴")
もし誰かがシート名を変更したらエラーが出てしまうので、
シートを指定する場合、オブジェクト名で指定したほうがいいですね。
Sheet2(入出庫履歴)
↑このSheet2というのがオブジェクト名になってます。
もちろん、自分でオブジェクト名を付けることができます。
ただ、面倒臭いのでそのままで進めます。
だって、オブジェクト名の横にシート名でてますし、わかるし、お寿司。
では、『Worksheets(“入出庫履歴”)』を『Sheet2』へ置換、
『Worksheets(“データベース”)』を『Sheet1』へ置換しましょう。
ちなみに、置換のショートカットキーは
Ctrlキー + H です。
痴漢だけに、Hってか…わざとか?ねらってるよね?(笑)
でも覚えやすいですよね。
これで、シート名を変更されてもエラーが出なくなります。
まとめ
・カレント モジュール(M) モジュール内のすべてを置換
・カレント プロジェクト(C) プロジェクト内のすべてを置換
次回 繰り返し処理を使ってみるよ
コメント