ネットで先人達のコードを参考にマクロを使ってる初級者の域を出ないでいる者です。(^^;)
今回の質問は、一つのモジュールに記述した変数を違うモジュールでも使えないか?ということです。
具体的には、あるファイル(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
No.1ベストアンサー
- 回答日時:
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
ありがとうございましたm(__)m
無事に動作させることが出来ました。
PublicをSubの上というのはネットにも有ったのですが、Dimでも上にというのは見なかったので勉強になりました。
また、何かの際にはよろしくお願いいたします。
No.2
- 回答日時:
>Module1に全部記述したから「Dim」でいいんですね?場所は違えど。
はい。この場合は、Module1内の全てのプロシージャから参照/設定が可能です。
>検証として、「印刷」と「そのまま閉じる」をModule2とModule3に分けて記述し、「Dim」を「Public」にしたら同じ動作になりました。
はい、それでOKです。
もし、module1に登録した変数をmudule2,module3等のプロシージャから参照/設定を行う場合は、
Public 変数名 as string
のように登録します。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 【ご教示ください】VBAの記述方法がわかりません。 2 2022/08/12 21:28
- Visual Basic(VBA) サブフォルダ(データ)にある複数の.xlsxファイルのSheet3のA2セルの値で01から左側をB2 2 2022/08/14 15:46
- Visual Basic(VBA) 【前回の続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/16 16:44
- Visual Basic(VBA) 複数csvを横に追加していくマクロについて 2 2023/04/25 09:19
- Visual Basic(VBA) パーソナルXLSBのfuctionを呼び出すと「Functionが定義されていません」のエラーになる 2 2022/08/22 22:51
- Excel(エクセル) Excel VBAどこが間違ってますか? 4 2023/07/17 10:04
- Visual Basic(VBA) 3個のfileのセルデータを1個のfileのセルに貼り付けるVBAコードですが。 1 2023/02/20 09:21
- Visual Basic(VBA) 【前回の続き続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/24 20:49
- Visual Basic(VBA) VBA 別ブックからの転記の高速化について VBA 別ブックからの転記の高速化についてご教授下さい。 19 2022/07/26 13:07
- Excel(エクセル) フォルダ内の全ブックのシート名を変更したい 7 2022/09/22 21:34
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ArduinoのジャイロモジュールMP...
-
ユーザー定義関数に#NAME?が返...
-
Excel VBAでリンク切れをチェッ...
-
モジュールの最大数はいくつな...
-
Excel VBA 定義されたプロージ...
-
VBAで別モジュールへの変数の受...
-
VBのフォームモジュールと標準...
-
Workbook.BeforeSave イベント...
-
【vba】フォームに書いてあ...
-
Excel VBA 『Call』で呼び出す...
-
Form間の値の渡し方
-
グラフのX,Y座標を取得したい
-
現在アクティブなフォーム名を...
-
ユーザー定義関数をEXCELに常駐...
-
シートモジュールで使う変数を...
-
Excelで時刻になったら知らせて...
-
Visual Basicプログラムのエラ...
-
エクセルVBAでシートモジュール...
-
標準モジュール Public mOnTime...
-
モジュールとは何ですか
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excel VBAでリンク切れをチェッ...
-
ユーザー定義関数に#NAME?が返...
-
VBAで別モジュールへの変数の受...
-
VBでグローバル変数を宣言するには
-
エクセルVBAでシートモジュール...
-
VBA This Workbookモジュール...
-
モジュールの最大数はいくつな...
-
Excel VBAで、ユーザーフォーム...
-
VBAで旧字体を異字体に一括で変...
-
Access VBA標準モジュールにつ...
-
VBA モジュールで共通に使う変...
-
'Range'メソッドは失敗しました
-
グラフのX,Y座標を取得したい
-
モジュールとは何ですか
-
Excel VBA 『Call』で呼び出す...
-
プラグイン、ライブラリ、コン...
-
【vba】フォームに書いてあ...
-
モジュールからフォームのボタ...
-
モジュールとクラスの違いって...
-
acwzlibとは?
おすすめ情報
変数に指定したセルの値は、その後のコードで変更してしまうので、そのまま使うことが出来なくなります。
tatsu99 さん、ご回答ありがとうございますm(__)m
後学のためにお教えください。
Module1に全部記述したから「Dim」でいいんですね?場所は違えど。
検証として、「印刷」と「そのまま閉じる」をModule2とModule3に分けて記述し、「Dim」を「Public」にしたら同じ動作になりました。※ やったつもりだったのですが、やってなかったのかも・・・
この理解でよろしいでしょうか?