投稿/コメントを表示します。

受講生さんの投稿

(投稿ID: 4713)  添付ファイルのダウンロード権限がありません

小川慶一さん:
返信とご教示頂きありがとうございます。
Publicとprivateの使い方について、
”'モジュールレベル変数をpublicにするのは、他のモジュールからも呼び出したいときです”
”'プロシージャをprivateにするのは、他のモジュールから呼び出されたくないときです”
をしっかり認識できていなかったです。再度動画・テキスト見返し理解することできました。

>作成中はsubプロシージャごと変数へ格納しなければならないので、ちょっとめんどくさいなと感じました
について、部分的に修正しやすいようにsubプロシージャをいくつか分けて作成し、動作を一気に実行するsubプロシージャを作っていますが、
部分的に修正が発生し、部分的に動作確認する場合、「オブジェクト変数またはWithブロック変数が設定されていません」というエラーが出てきてしまいます。
よって、subプロシージャ毎に
' Set shFm = Worksheets("main")
' lnFmMx = shFm.Range("B" & Rows.Count).End(xlUp).Row
と残しておいているのですが、(部分的に動作確認するときはコメントブロックを外す)
subプロシージャ毎に毎回同じ文言である
' Set shFm = Worksheets("main")
' lnFmMx = shFm.Range("B" & Rows.Count).End(xlUp).Row
を記載するのは面倒だなと感じました。(コピペなので、そんなに苦ではありませんが)
オプションエクスプレシットと最初に出てくるサブプロシージャの間に変数を宣言して、
さらに格納でき、そのモジュール内の全てのsubプロシージャで利用できれば便利ではないかと思ってしまいました。
試しに
Option Explicit
Dim shFm As Worksheet
Dim shTo As Worksheet
Dim lnFmMx As Long
Set shFm = Worksheets("main")
lnFmMx = shFm.Range("B" & Rows.Count).End(xlUp).Row

sub~

と作成したら、Setの部分で「プロシージャの外では無効です」とエラーがでました。

また、コメント頂いた部分チャレンジしてみました!
いろいろな書き方があるのだと知れてよかったです。コメントありがとうございます。(コード記載しようとしましたが、文字化けしてうまく記載できなかったので、ファイル添付します)
2020/05/10 06:02