|
よこから 失礼します。
以下は、マナ さんがすでにおっしゃってることですが
---------
▼Aoba さん:
> sht.Activate をしないとゆうことでしょうか
> これではどのSheetがActiveになっているかどうか
> 不明でうまくいきません
それはエクセルにとっても同じです。
> Set sht = Workbooks("Bookname.xls").Worksheets("Sheet1")
> Set Rng = Range("E4", Range("E65536").End(xlUp))
> sht.Activate
この1行目は shtという変数に あるブック内の"Sheet1"という名のシートを
指定していますから、shtがどのBookのシートか 明示されています。
ところが、2行目は
> Range("E4", Range("E65536").End(xlUp))
となっていて、どのシートのRange("E4") か どのシートの Range("E65536")
か? 明示されてません。
シートが明示されてないと、エクセルは ActiveSheet が省略されているのだと
と解釈します。
なので、
> Set Rng = Range("E4", Range("E65536").End(xlUp))
は、
そのときアクティブになっているシートが
Workbooks("Bookname.xls").Worksheets("Sheet1")
すなわち sht でなかったら、Rngは 別のシートの
Range("E4", Range("E65536").End(xlUp))
がセットされていることになります。
[E4]セルというのは どのシートにもあるセルの名前なので、
仮にいま アクティブなシートが sht でなくても、このコードは
"エラーになってくれません"。
なので、ご質問のようなバグ状況が発生するのです。
あなたは shtをアクティブにしたつもりでも、それは Rngをセットしてあと
のことなので、Rngの親シートが sht であることは保障されていないのです!
2行目で sht の E列範囲を 変数Rng にセットしたいのなら、
(sht をアクティブにしてから、
Set Rng = Range("E4", Range("E65536").End(xlUp))
とする方法もあるにはありますが...)
sht をアクティブにしなくても、
Set Rng = sht.Range("E4", sht.Range("E65536").End(xlUp))
とシートを明示しておけば、済むことなのです。
|
|