アプリ版:「スタンプのみでお礼する」機能のリリースについて

ネットで先人達のコードを参考にマクロを使ってる初級者の域を出ないでいる者です。(^^;)
今回の質問は、一つのモジュールに記述した変数を違うモジュールでも使えないか?ということです。
具体的には、あるファイル(aaa.xlsx)を呼び出し、その最終行のセルの値から頭4文字を取り出し、aaa.xlsxを「1234bbb.xlsx」(1234はその時によって変わります)と名前を付けて保存します。
その1234bbb.xlsxファイルのシートをマクロにより変更する(ここまでを一つのモジュールに記述しました)
次に、1234bbb.xlsxのシートを印刷するモジュールとそのままで終了させるモジュールを用意したいと思います。その際に変数に格納した?セルから取り出した4文字を印刷するモジュールと終了させるモジュールに記述しないとエラーが出てしまいます。
なので、最初のモジュールで取り出した変数を他のモジュールで使えるようにしたいのです。
--------------------------------------
Sub 一覧を作る()
Dim moji As String
Dim LastRow As Long
LastRow = Cells(Rows.Count, 15).End(xlUp).Row
moji = Left(Cells(LastRow, 15), 4)
Workbooks(aaa.xlsx).SaveAs Filename:=ThisWorkbook.Path & "\" & moji & "bbb.xlsx"
(他のコードを記述)
End Sub
--------------------------------------
Sub 印刷()
Workbooks(moji & "bbb.xlsx").Activate
Sheets("bbb(あいう順)").PrintOut Copies:=1
End Sub
--------------------------------------
Sub そのまま閉じる()
Workbooks(moji & "bbb.xlsx").Close SaveChanges:=True
End Sub
--------------------------------------
と、Module1に記述しました。※このままではエラー表示されると分かっています。
この「moji」とした変数を「Sub印刷」と「Subそのまま閉じる」で使いたいのです。
「Dim moji As String」を「Public moji As String」として「Sub一覧を作る」のSubの上に移動させただけでは「引数が必要」とかいわれ、
「Dim LastRow」から変数の宣言までを「Sub 変数」の一つのモジュールを記述して、「Call 変数」で呼び出すようにしたら、mojiが付かないで実行されてしまいました。
よろしくお願いいたしますm(__)m

質問者からの補足コメント

  • 変数に指定したセルの値は、その後のコードで変更してしまうので、そのまま使うことが出来なくなります。

      補足日時:2018/07/18 11:29
  • どう思う?

    tatsu99 さん、ご回答ありがとうございますm(__)m
    後学のためにお教えください。
    Module1に全部記述したから「Dim」でいいんですね?場所は違えど。
    検証として、「印刷」と「そのまま閉じる」をModule2とModule3に分けて記述し、「Dim」を「Public」にしたら同じ動作になりました。※ やったつもりだったのですが、やってなかったのかも・・・
    この理解でよろしいでしょうか?

      補足日時:2018/07/18 15:25

A 回答 (2件)

dim moji as stringを


module1の頭に移動してください。
先頭が、Option Explicitとします。
----------------------------------
Option Explicit
Dim moji As String・・・これを追加する。
Sub 一覧を作る()
Dim moji As String・・・・これを削除する。
Dim LastRow As Long
LastRow = Cells(Rows.Count, 15).End(xlUp).Row
moji = Left(Cells(LastRow, 15), 4)
Workbooks(aaa.xlsx).SaveAs Filename:=ThisWorkbook.Path & "\" & moji & "bbb.xlsx"
(他のコードを記述)
End Sub
    • good
    • 0
この回答へのお礼

ありがとうございましたm(__)m
無事に動作させることが出来ました。
PublicをSubの上というのはネットにも有ったのですが、Dimでも上にというのは見なかったので勉強になりました。
また、何かの際にはよろしくお願いいたします。

お礼日時:2018/07/20 12:09

>Module1に全部記述したから「Dim」でいいんですね?場所は違えど。


はい。この場合は、Module1内の全てのプロシージャから参照/設定が可能です。


>検証として、「印刷」と「そのまま閉じる」をModule2とModule3に分けて記述し、「Dim」を「Public」にしたら同じ動作になりました。
はい、それでOKです。
もし、module1に登録した変数をmudule2,module3等のプロシージャから参照/設定を行う場合は、
Public 変数名 as string
のように登録します。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!