マクロを書く場合に次のように宣言しています。
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も見ています
-
外出時に「待たせる妻」vs イライラする「待つ夫」は日本だけ?見習いたい海外事情
夫の家事参加に積極的なイメージのある海外でも、同様の事例はあるのか。結婚カウンセラーの佐竹悦子さんに伺ってみた。
-
エクセルVBAでシートモジュールでのパブリック変数
Excel(エクセル)
-
VBAで別モジュールへの変数の受け渡し方法
Visual Basic(VBA)
-
VBAで保存しないで閉じると空のBookが残る
Excel(エクセル)
-
-
4
エクセルのラベルの値(文字列)を垂直方向で中央揃えにするには?
Excel(エクセル)
-
5
Excel VBA 定数にオブジェクトを指定したい
Visual Basic(VBA)
-
6
ExcelのVBA。public変数の値が消える
Visual Basic(VBA)
-
7
エクセル:マクロ「Application.CutCopyMode = False」って?
Excel(エクセル)
-
8
Application.ScreenUpdating = Falseが効きません
Visual Basic(VBA)
-
9
UserForm1.Showでエラーになります。
工学
-
10
VBAでループ内で使う変数名を可変にできないか。
Visual Basic(VBA)
-
11
VBAでブックを非表示で開いて処理して閉じる方法
Excel(エクセル)
-
12
VBAでワークシートを引数としてサンプル関数に渡したい
Visual Basic(VBA)
-
13
エクセルでエラーが出て困っています。
Excel(エクセル)
-
14
エクセルVBAでUserFormを起動した時
Excel(エクセル)
-
15
VBA 変数名に変数を使用したい。
Visual Basic(VBA)
-
16
EXCEL VBAで全選択範囲の解除
Excel(エクセル)
-
17
エクセルVBA ユーザーフォームのTextBoxを日付にしたい
Excel(エクセル)
-
18
エクセルVBA テキストボックスに3桁ごとにコンマ
Visual Basic(VBA)
-
19
「Columns(A:C")」の列文字を数字にして表記したい"
Excel(エクセル)
-
20
Cellsのかっこの中はどっちが行と列なの?
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
別のシートから値を取得するとき
-
VBAの天才来てください
-
【ExcelVBA】全シートのセルの...
-
ユーザーフォームに入力したデ...
-
エクセルのマクロでアクティブ...
-
VBA 存在しないシートを選...
-
同じ作業を複数のシートに実行...
-
ExcelのVBAのマクロで他のシー...
-
エクセルのシート名変更で重複...
-
【VBA】シート名に特定文字が入...
-
【VBA】色のついたシート名を取得
-
ExcelVBA:複数の特定のグラフ...
-
ExcelVBA シート名を複数セルか...
-
XL:BeforeDoubleClickが動かない
-
VBAを用いて繰り返し自動的...
-
excelのマクロで該当処理できな...
-
VBA ユーザーフォーム上のチェ...
-
Excel マクロについての相談
-
特定の文字を含むシートだけマ...
-
エクセル・マクロ シートの非...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
別のシートから値を取得するとき
-
ユーザーフォームに入力したデ...
-
Excelマクロのエラーを解決した...
-
excelのマクロで該当処理できな...
-
同じ作業を複数のシートに実行...
-
ExcelVBA シート名を複数セルか...
-
【ExcelVBA】全シートのセルの...
-
Excel マクロについての相談
-
VBA 存在しないシートを選...
-
実行時エラー'1004': WorkSheet...
-
特定の文字を含むシートだけマ...
-
ExcelのVBAのマクロで他のシー...
-
ブック名、シート名を他のモジ...
-
XL:BeforeDoubleClickが動かない
-
VBA 複数の各シートに行を追加...
-
エクセルのシート名変更で重複...
-
【Excel VBA】Worksheets().Act...
-
シートが保護されている状態で...
-
Excel VBA 複数行を数の分だけ...
-
for 文の 繰り返し処理に使える...
おすすめ情報