[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『実行中のマクロのブック名を取得する』(ろっしい)
今、マクロのファイル マクロ.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)
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)
(ろっしい)
ろっしいさん、 もう一つ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.