
マクロを書く場合に次のように宣言しています。
Sub test()
'(1)始まり
Dim WB1 As Workbook
Dim SH1 As Worksheet
Set Wb1 = Workbooks("Book1")
Set Sh1 = Wb1.Worksheets("Sheet1")
'(1)終わり
Msgbox Sh1.Cells(1, 1)
end Sub
新たにマクロを書く場合には、その都度上記コードの「'(1)始まり~'(1)終わり」を書いていますが、面倒です。
「Public ~」などのように一箇所に宣言しておけば,他のモジュールからもブックやシートを参照できるようにする方法は無いでしょうか?
よろしくお願いします。
No.1ベストアンサー
- 回答日時:
Test1 が実行された後なら Test2 も Test3 も下記で動くけど、、、
そういう事ではない?
'Module1-------------------------------
Public wb As Workbook
Public ws As Worksheet
Sub Test1()
Set wb = ThisWorkbook
Set ws = wb.Worksheets(1)
End Sub
'--------------------------------------
'Module2-------------------------------
Sub Test2()
MsgBox ws.Cells(1, 1).Value
End Sub
'--------------------------------------
'Module3-------------------------------
Sub Test3()
MsgBox ws.Cells(1, 1).Value
End Sub
'--------------------------------------
ありがとうございます。
私が知りたいのはpapayukaさんのおっしゃる「そういう事」です。
上記Test1を実行する必要があるのですね。
所定のコーディングをすれば、定数として設定できるものと思っていました。
No.3
- 回答日時:
標準モジュールを作成し、モジュールレベルの宣言部に Public で変数を定義して、同モジュールに変数に値を入れるプロシージャを作成し、ブックのオープンイベントで上のプロシージャをコールしてみてはどうでしょう。
具体的には、
module(標準モジュール)
Public WB1 As Workbook
Public SH1 As Worksheet
sub main
Set WB1 = Workbooks("Book1")
Set SH1 = WB1.Worksheets("Sheet1")
End Sub
ThisWorkBook(クラス)
Private Sub Workbook_Open()
Call main
End Sub
ThisWorkBook(クラス)で呼び出すのは妙案ですね。
基本的にはNo1さんと同じと思うのですが、起動時にコールできれば楽ですね。
勉強になりました。ありがとうございます。
No.2
- 回答日時:
No.1の papayuka さんのご回答のとおりなのですが、別解としてはPublic定数としてシート名やブック名を定義しておく方法があります。
利点としては、、、あまり無いように思いますが(--;)papayukaさんの方法は、オブジェクト変数Shにアクセスするために
Set Sh = Sheets("Sheet1")
Sh.Select
のように予めSetステートメントでShを定義しなければなりません。
一方、シート名を文字列型の定数にした場合は
Public Const cnsShName as String ="Sheet1"
Sub Sample()
Sheets(cnsShName).Select
End Sub
のように、シートを指定できます。
どちらの方法でも、同一プロジェクトの全てのプロシージャからシートを指定できますし、コーディングの手間も変わりません。
好みの問題かもしれませんが、私はSetを省略できるので良く定数を用います。
また、自信がないのですが、文字列型定数でシート名を保持する方が、オブジェクト変数でシートオブジェクトを保持するよりも省メモリなのではないかと思います。
(勘違いかもしれません)
ありがとうございます。
ただ、シート名を文字列型の定数にするのは、コーディングの手間と言う点で不利な気がするのですが。
sh.select と書くか
Sheets(cnsShName).Select と書くか
いかがでしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 【ご教示ください】VBAの記述方法がわかりません。 2 2022/08/12 21:28
- Visual Basic(VBA) VBAが止まります。 1 2022/09/02 14:51
- Visual Basic(VBA) 【前回の続き続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/24 20:49
- Visual Basic(VBA) 【前回の続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/16 16:44
- Visual Basic(VBA) 2つ目のコンボボックスが動作しません。 3 2023/03/25 12:29
- Visual Basic(VBA) エクセルのマクロを使ってメールを送る方法について教えてください 2 2022/03/29 01:36
- Visual Basic(VBA) VBA This Workbookモジュールを別ファイルにコピーする方法 1 2022/09/14 01:51
- Visual Basic(VBA) VBA 別ブックからの転記の高速化について VBA 別ブックからの転記の高速化についてご教授下さい。 19 2022/07/26 13:07
- Visual Basic(VBA) エクセルのマクロについて教えてください。 2 2023/07/15 15:12
- Visual Basic(VBA) 特定の文字を含むシートだけマクロ処理をしたい 1 2023/05/22 01:43
このQ&Aを見た人はこんなQ&Aも見ています
-
エクセルVBAでシートモジュールでのパブリック変数
Excel(エクセル)
-
Excel VBA 定数にオブジェクトを指定したい
Visual Basic(VBA)
-
VBAで保存しないで閉じると空のBookが残る
Excel(エクセル)
-
-
4
ExcelのVBA。public変数の値が消える
Visual Basic(VBA)
-
5
VBAでエクセルシートを更新(リフレッシュ)する方法を教えて下さい。
Excel(エクセル)
-
6
VBAコード記述に際して、コード全体を自動的にインデント付ける方法
Access(アクセス)
-
7
エクセルのラベルの値(文字列)を垂直方向で中央揃えにするには?
Excel(エクセル)
-
8
エクセル:マクロ「Application.CutCopyMode = False」って?
Excel(エクセル)
-
9
UserForm1.Showでエラーになります。
工学
-
10
VBAでブックを非表示で開いて処理して閉じる方法
Excel(エクセル)
-
11
VBA 変数名に変数を使用したい。
Visual Basic(VBA)
-
12
VBA public変数はどのようなことをしたら解放されますか?
Visual Basic(VBA)
-
13
ユーザーフォームを表示中にシートの操作をさせるには
Excel(エクセル)
-
14
EXCEL VBAで全選択範囲の解除
Excel(エクセル)
-
15
数式による空白を無視して最終行を取得するマクロ
Excel(エクセル)
-
16
VBAでの Replace関数で、ワイルドカードは使えないのでしょうか?
Visual Basic(VBA)
-
17
callで順に実行されるプロシージャを途中で止める方法
Excel(エクセル)
-
18
VBAでワークシートを引数としてサンプル関数に渡したい
Visual Basic(VBA)
-
19
worksheetFunctionクラスのVlookupプロパティを取得できません エラーへの対応
Visual Basic(VBA)
-
20
EXCELで特定のセルに表示された項目をヘッダーやフッターに出力するには
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
特定の文字を含むシートだけマ...
-
excelのマクロで該当処理できな...
-
Excelマクロのエラーを解決した...
-
【VBA】特定の文字で改行(次の...
-
【ExcelVBA】全シートのセルの...
-
ユーザーフォームに入力したデ...
-
エクセルのシート名変更で重複...
-
実行時エラー1004「Select メソ...
-
VBAで同じシート名のコピー時は...
-
VBA 存在しないシートを選...
-
実行時エラー'1004': WorkSheet...
-
ブック名、シート名を他のモジ...
-
Worksheet_Changeの内容を標準...
-
XL:BeforeDoubleClickが動かない
-
Excel VBA 文字列のセルを反映...
-
エクセルVBA ListBoxの並び...
-
EXCEL(VBA)でシート保護がかか...
-
VBA ユーザーフォーム上のチェ...
-
Excelマクロで複数シートの特定...
-
【エクセルVBA】「Protect User...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
特定の文字を含むシートだけマ...
-
Excelマクロのエラーを解決した...
-
excelのマクロで該当処理できな...
-
ユーザーフォームに入力したデ...
-
実行時エラー'1004': WorkSheet...
-
XL:BeforeDoubleClickが動かない
-
エクセルVBA Ifでシート名が合...
-
実行時エラー1004「Select メソ...
-
エクセルのシート名変更で重複...
-
【ExcelVBA】全シートのセルの...
-
VBA 存在しないシートを選...
-
ブック名、シート名を他のモジ...
-
Excel チェックボックスにチェ...
-
VBA 検索して一致したセル...
-
エクセルで通し番号を入れてチ...
-
シートが保護されている状態で...
-
ExcelのVBAのマクロで他のシー...
-
【VBA】特定の文字で改行(次の...
-
Worksheet_Changeの内容を標準...
-
Excel VBA で自然対数の関数Ln...
おすすめ情報