まず、具体的には尋ねなかった質問に答えるために、カスタム クラスをセットアップし、その中にデータをロードします。真剣に、後で私に感謝します。
OK、あなたの質問に進みます。範囲をできるだけ限定することから始めます。つまり、プロシージャ間で変数を渡しています。すべての変数のスコープが可能な限り制限されている場合、問題に遭遇することはほとんどありません。
変数が 2 レベルの深さを通過すると (手順を第 1 層に、第 1 層から第 2 層に)、自分の構造を批判的に調べ始めます。通常 (常にではありません)、3 つのプロシージャがすべて同じモジュール内にある場合は、モジュール レベルの変数を作成します (Dim の代わりに Private キーワードを使用します)。モジュールを正しく (恣意的にではなく) 分離すれば、大きなリスクなしにモジュール レベルの変数を使用できます。
最初から常にグローバルな変数がいくつかあります。アプリ名とアプリのバージョンを保持する変数です。アプリが実行されている限りスコープを失うことのない最上位のクラス モジュール。コマンドバー名などを保持する定数(変数ではないことはわかっています)。私はこれらのグローバルが必要であることを知っているので、そのように開始します。
モジュール レベルの変数がグローバル変数に移行することは決してない、と言いたいところです。グローバル変数は、その性質上、そのように開始されます。モジュール レベルの変数を使用するのが面倒に思える場合、それはおそらく、正当な理由もなくモジュールを分割したか、フレームワーク全体を再考する必要があるためです。
だからと言って、不正行為をしてグローバルを使用すべきでないときに使用したことがないと言っているわけではありません。私たちは皆それをやったので、あなたもやったとしても睡眠を失うべきではありません.
したがって、この投稿を適切に締めくくるには、強制されない限り、配列の使用をやめます。カスタムクラスを使用する理由
ActiveCell.Value = Invoice.LocalSalesTaxAmount
よりもデバッグする方がはるかに優れています
ActiveCell.Value = aInvoice(35,2)
カスタム クラスを操作するには、さらにスキルが必要だと思われる場合に備えて、私もそうしました。