[[20070309074125]] 『実行中のマクロのブック名を取得する』(ろっしい) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『実行中のマクロのブック名を取得する』(ろっしい)

 
今、マクロのファイル マクロ.xls と データのファイル データ.xls
が同時に開いている状況だとします。このとき、マクロ側のシートで
データの加工用に作業を行いたいと思い(データファイルは書き換えません)、

<作業> マクロの途中で明示的に
Workbooks.Open Filename:="データ.xls"でデータファイルを開いた後にそのデータを配列に入れてから
windows(マクロ.xls").Activate
として、マクロ.xls のシートに配列データを吐き出して加工しています。

質問は、マクロを修正して、ファイルをマクロ2.xls に書き換えるとき、いちいちソースを確認
してwindows("マクロ2.xls").Activateと書き換えているのですが、現在自分が
実行させているマクロの名前を(自動的に)取得し、マクロのブックの名前が変わってもソースを書き直さなくても済むようにする方法はあるでしょうか?というものです。

ご教授頂けると幸いです。よろしくお願いします。


 どちらも変数で処理すれば楽ですよ?

 例:
 Dim ThisWb As Workbook, DataWb As Workbook
 Set ThisWb = ThisWorkbook '<-マクロの書かれているブック(マクロ.xls)
 Set DataWb = Workbooks.Open("データ.xls")

 そして、Obejct(Workbook/Sheet)を明示的に参照すれば、Activete/Selectは
 特殊なケースを除けば必要なくなります。これにより処理速度もアップします。
 (seiya)

回答ありがとうございます。今テスト的にやってみたのですが、うまくいきました。
2つのブックを同時に開いた状態で、

Sub Macro1()

 Dim this_wb As Workbook, dataWb As Workbook
 Set this_wb = ThisWorkbook '<-マクロの書かれているブック(マクロ.xls)
 Set dataWb = Workbooks.Open("データ.xls")

 this_wb.Sheets("アウトプット").Cells(1, 1).Value = 100

End Sub

とやってみるとマクロの中のシート「アウトプット」にデータが書き込まれていました。一つだけ質問なのですが、「Obejct(Workbook/Sheet)を明示的に参照すれば」と仰っておられるのは、私のマクロのthis_wb.Sheets("アウトプット"). の部分だと解釈してよろしいのでしょうか?
重ね重ねすみませんが、これが分かると全部クリアになるので宜しくお願いします

(ろっしい)


 そのとおりです。

 this_wb.Activate
 Sheets("アウトプット").Select
 Cells(1,1).Value = 100

 が、ご提示された一行で処理できますよね?
 特に、Cells プロパティには必ずSheet object を明示的に参照しないと
 エラー、もしくは予想し得ない結果をもたらすことがあります。
 (seiya)

丁寧なコメント大変感謝しております。ありがとうございました。今後とも宜しくお願いしますm(__)m

(ろっしい)


 ろっしいさん、
 もう一つCells property を使用した場合のよくあるケースで

 Range(Cells(1,1),Cells(5,5))

 のように使用する場合にも各Cells propertyにObjectを参照する必要があります。

 this_wb.Sheets("アウトプット").Range(this_wb.Sheets("アウトプット").Cells(1,1), this_wb.Sheets("アウトプット").Cells(5,5))

 これを With ステートメントで this_wb.Sheets("アウトプット") を参照すると

 With this_wb.Sheets("アウトプット")
      .Range(.Cells(1,1), .Cells(5,5))
 End With

 となります。
 これ、とっても大事です。
 (seiya)

 私が先日やったミス。ブックの各シートのA1のデータを使ってそれぞれのシートの
 名前にしようとしたら思い切り「実行時エラー」。初心者レベルのミスですが、
 油断するとやりますね。
(純丸)(o^-')b ※スレを見てて思い出しました。
 
 For Each sh In Worksheets
  sh.Name = Range("A1").Value
 Next sh

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.