|
この場合、たぶん
>最初に開いたブック
というのは「マクロを実行しているブック」ではなく「その次に開いたブック」という
意味になるのでしょうか ? でないと
>他のブックを開いたとき
と矛盾してしまいますよね。つまりこのマクロを入れているのは ○×.xls であり、
マクロを実行する前に日々違うブック(20060202歩み値.xls, 20060203歩み値.xls,
20060204歩み値.xls・・・)を開く、ということになるわけでしょ ?
ならばそれらのデータブックを、手作業で開くことを止めて
Sub Test()
Dim MyF As String
Dim MyB As Workbook
ChDir "C:\My Documents\Data" 'データブックの保存先フォルダー
With Application
MyF = .GetOpenFilename("エクセルブック(*.xls),*.xls")
If MyF = "False" Then Exit Sub
.ScreenUpdating = False
End With
Set MyB = Workbooks.Open(MyF)
というように「実行したマクロの冒頭で目的のブックを開くダイアログを出す」
と言う形にするのが定石です。そうすれば選んだブックを変数(MyB)に入れて確定し、
自在に操作できます。ただし、ブックを開く操作もマクロでやるわけだから、そこから
ユーザーが任意のシートや任意のセル範囲を選ぶ、ということは出来なくなりますから、必ずシート名やセル範囲を特定して、コピー等をするコードにしなくてはなりません。
従って Selection とか ActiveCell などの曖昧な語句は使えなくなります。
例えば上記のコードに続けて
MyB.Sheets("任天堂").Range("A:D").Copy Workbooks("大口歩み値.xls") _
Sheets("Sheet1").Range("A65536").End(xlUp).Offset(1)
などとすることになります。当然ながら「ダイアログから任意に選んだどのブック
においても」"任天堂" という名前のシートがなければエラーになります。あと、
貼り付け先の "大口歩み値.xls" が開かれていて、そちらにも "Sheet1" が
存在しているという前提になります。 もしそうした前提条件を満たすのが困難なら、
逆にそのような処理はマクロ向きでは無い、と言えるでしょう。
ちなみにマクロを入れて実行するブックが、Workbooks("大口歩み値.xls") であれば
それは ThisWorkbook と置き換えることも出来ます。普通はそのように書きます。
|
|