回答編集履歴

3

再々修正。要件が頭に入っていなかったorz すみません

2021/06/29 16:58

投稿

neonemo
neonemo

スコア191

test CHANGED
@@ -24,7 +24,7 @@
24
24
 
25
25
 
26
26
 
27
- ## 追記分
27
+ ## 追記分1
28
28
 
29
29
  コード付きで回答来ちゃったので出しちゃいますが
30
30
 
@@ -51,3 +51,107 @@
51
51
 
52
52
 
53
53
  ![イメージ説明](19d1516361bd3e9f8047554ae37d8941.gif)
54
+
55
+
56
+
57
+ ## 追記分2
58
+
59
+ ※コメントやり取りの整合性を保つため、以前の記載は残しておきます。
60
+
61
+
62
+
63
+ 失礼しました。要件が頭に入っていませんでした。
64
+
65
+ その要件ですと、基本的に jinojiさんのやり方に収束していくと思います。
66
+
67
+ 私の回答によりかえって混乱させてしまい申し訳ありませんでした。
68
+
69
+
70
+
71
+ ウォッチ式でオブジェクトを確認してみましたが、`CodeName`以外に使えそうなプロパティは見つかりませんでした。
72
+
73
+
74
+
75
+ ### Workbooks配下
76
+
77
+ ![イメージ説明](7281c21b82e7d243def606718b45b545.png)
78
+
79
+ ![イメージ説明](236d652cf00857cb07c93aadb8cd8e56.png)
80
+
81
+ ![イメージ説明](c7e02b4d40b85bd866bd94be0c2e64b6.png)
82
+
83
+
84
+
85
+ ### WorkSheets配下
86
+
87
+ ![イメージ説明](6f9ccf3137db639be118e9b776667049.png)
88
+
89
+
90
+
91
+ ### おまけ: あらかじめシートオブジェクトを確保して、使う時に簡単に呼び出せるようにした場合
92
+
93
+ 予めDictionaryを使って、**Key=CodeName、Value=WorkSheetオブジェクト**を格納しています。
94
+
95
+ 自分で書いておきながら関数を書くコストがより高くなってしまう上に
96
+
97
+ シート名が変わった時はマクロのブックを開きなおす必要があったりとかなり微妙orz
98
+
99
+
100
+
101
+ ![イメージ説明](3c939e8585597f51fa03260ed55c6aa5.gif)
102
+
103
+
104
+
105
+ 標準モジュールのコード
106
+
107
+ ```vba
108
+
109
+ Attribute VB_Name = "Module1"
110
+
111
+ Dim dic As Object
112
+
113
+
114
+
115
+ Sub Auto_Open()
116
+
117
+ Set dic = CreateObject("Scripting.Dictionary")
118
+
119
+ For Each ws In Workbooks("book2.xlsx").Worksheets
120
+
121
+ dic.Add ws.CodeName, ws
122
+
123
+ Next
124
+
125
+ End Sub
126
+
127
+
128
+
129
+ Sub SheetObjectActivate()
130
+
131
+ dic("Sheet1").Activate
132
+
133
+ End Sub
134
+
135
+ ```
136
+
137
+
138
+
139
+ Sheet1のコード
140
+
141
+ ```vba
142
+
143
+ ' ボタンのクリックイベントハンドラ
144
+
145
+ Private Sub CommandButton1_Click()
146
+
147
+ Call SheetObjectActivate
148
+
149
+ End Sub
150
+
151
+ ```
152
+
153
+
154
+
155
+
156
+
157
+ 長文失礼しました。

2

ループは要らないのでその旨修正

2021/06/29 16:58

投稿

neonemo
neonemo

スコア191

test CHANGED
@@ -21,3 +21,33 @@
21
21
  [Sheets オブジェクト (Excel)](https://docs.microsoft.com/ja-jp/office/vba/api/excel.sheets)
22
22
 
23
23
  https://docs.microsoft.com/ja-jp/office/vba/api/excel.sheets
24
+
25
+
26
+
27
+ ## 追記分
28
+
29
+ コード付きで回答来ちゃったので出しちゃいますが
30
+
31
+ book1、book2がどちらも開いている状態ならこれでOKです。
32
+
33
+
34
+
35
+ ```vba
36
+
37
+ Workbooks("book2のファイル名").Worksheets("book2のシート名").Activate
38
+
39
+ ```
40
+
41
+
42
+
43
+ しかし、もしbook2が開いていない状態ならこうなります。
44
+
45
+ ```vba
46
+
47
+ Workbooks.Open("book2のファイル名").Worksheets("book2のシート名").Activate
48
+
49
+ ```
50
+
51
+
52
+
53
+ ![イメージ説明](19d1516361bd3e9f8047554ae37d8941.gif)

1

参考URL追加

2021/06/28 13:32

投稿

neonemo
neonemo

スコア191

test CHANGED
@@ -13,3 +13,11 @@
13
13
  [Workbook オブジェクト (Excel)](https://docs.microsoft.com/ja-jp/office/vba/api/excel.workbook)
14
14
 
15
15
  https://docs.microsoft.com/ja-jp/office/vba/api/excel.workbook
16
+
17
+
18
+
19
+ 質問に対しては↑だけで解決します。↓こっちはおまけ。使いこなしたい場合に見ると良いかと。
20
+
21
+ [Sheets オブジェクト (Excel)](https://docs.microsoft.com/ja-jp/office/vba/api/excel.sheets)
22
+
23
+ https://docs.microsoft.com/ja-jp/office/vba/api/excel.sheets