Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


12493 / 13646 ツリー ←次へ | 前へ→

【10229】非アクティブなファイルのシート名の取得方 注意報 04/1/13(火) 19:56 質問
【10230】Re:非アクティブなファイルのシート名の取... ichinose 04/1/13(火) 20:52 回答
【10232】Re:非アクティブなファイルのシート名の取... 注意報 04/1/13(火) 22:41 お礼

【10229】非アクティブなファイルのシート名の取得...
質問  注意報  - 04/1/13(火) 19:56 -

引用なし
パスワード
   初めまして。
2つのエクセルのファイル(a.xls b.xls)を開き、
一方から他方の全シート名を取得したいのですが、

ws <- ワークシート
for each ws in worksheets
  msgbox ws.name
next ws

だと、アクティブな方のワークシート名しか取得できません。
現在は、(aがアクティブなとき)、

workbooks("b.xls").worksheets(1).select

などとしてシート名を取得していますが、不細工で仕方ありません。
決まったやり方があるのでしょうか?
VBAを始めて2週間くらいの初心者なので、実例を示していただけると助かります。

Office200 です。

【10230】Re:非アクティブなファイルのシート名の...
回答  ichinose  - 04/1/13(火) 20:52 -

引用なし
パスワード
   ▼注意報 さん:
こんばんは。
>初めまして。
>2つのエクセルのファイル(a.xls b.xls)を開き、
>一方から他方の全シート名を取得したいのですが、
>
>ws <- ワークシート
>for each ws in worksheets
>  msgbox ws.name
>next ws
>
>だと、アクティブな方のワークシート名しか取得できません。
>現在は、(aがアクティブなとき)、
>
>workbooks("b.xls").worksheets(1).select
>
>などとしてシート名を取得していますが、不細工で仕方ありません。
以下のコードは、アクティブなブック以外のブックのブック名と全ワークシート名を
イミディエイトウインドウ(VBEでCtrl+Gを押せば表示されます)に
表示するものです。
'===========================================================
Sub test()
  For Each wk In Workbooks
    If Not wk Is ActiveWorkbook Then
     Debug.Print wk.Name
     For Each sht In wk.Worksheets
       Debug.Print Space$(3) & sht.Name
       Next
     End If
    Next
End Sub

もっともブックがb.xls限定なら、

    For Each sht In workbooks("b.xls").Worksheets
     Debug.Print Space$(3) & sht.Name
     Next

でも良いと思いますが・・・。
確認してみて下さい。

【10232】Re:非アクティブなファイルのシート名の...
お礼  注意報  - 04/1/13(火) 22:41 -

引用なし
パスワード
   ▼ichinose さん:

ありがとうございました。
ご教授いただいた、下の方法で解決しました。
非アクティブなシート(セル)に値を設定する場合、

Workbooks("b.xls").Worksheets(1).Range("A1").Value = XXX

のようにすることは分かっていたのですが、
今回の場合、どこにオブジェクト(?)を指定するのか分からず、

With Workbooks("b.xls")
For .ws in Worksheets
  Msgbox .ws.Name
Next ws
End With

みたいな事もやってみました(エラーでした)。
コレクションのところで指定すればいい事が分かり、
もやが晴れました。
また、

>Sub test()
>  For Each wk In Workbooks
>    If Not wk Is ActiveWorkbook Then
>     Debug.Print wk.Name
>     For Each sht In wk.Worksheets
>       Debug.Print Space$(3) & sht.Name
>       Next
>     End If
>    Next
>End Sub

も非常に参考になるコードで、もう少し分かってきて、
改造するときに利用させていただきたいと思います。

12493 / 13646 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free