変数とスコープ

VBAに限らずプログラミングで扱う変数はとても重要です。
変数が扱えないとプログラミングできないでしょう ^^;
変数は文字通り変化する値を格納する入れ物で、「スコープ(Scope)=適用範囲」があります。

ややこしいですが、シートをまたいだ処理やプロシージャ(Procedure)間で変数を使いまわしたい時、あるいはプロシージャ内だけの処理などScopeを正しく理解する必要があります。
かく云う私もこの辺の理解はしばしば混同し、期待しない結果で悩むことがあります。

Dimステートメントの例

exeTestDIMの実行結果

TestDIM_01
TestDIM_02

プロシージャの中で宣言されたDimステートメントは、そのプロシージャの中だけで有効です。これがスコープの範囲です。
上記では、TestDIM_01()の中で NUMを宣言しているので、TestDIM_02で参照しようとしても値がありません。(当たり前ですが)
ちなみにSub TestDIM_02()の中で使用しているNUMはあながち間違いではなく、Dimは省略できるのでTestDIM_02の中では成立しています。

と同じ解釈です。

同じModuleの中で変数を共有したい

実行結果

TestDIM_01
TestDIM_02

得たかった結果はこんな感じでしょうか?
変数の扱いは他にも
・Static
・Public
など覚えておくことがあります。(別述)

※プロシージャの外で宣言する場合は、Privateステートメントで宣言するとの表現があるようですが、Dimでも Privateでも結果は同じです。
私には使い分けがわかりません ^^;
Dimは歴史的な使い方との意見や、省略形だとの意見もあるようですが・・・
また単純な変数をModule内で単独に使うことはあまり無いかと思います、値を保持する静的変数Staticとの組み合わせで使う場面があるでしょう。