2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Excel2013UPDのVBA注意点

Last updated at Posted at 2018-03-15

Excel2013以前→Excel2013へ移行したときにVBA周りがてんやわんやしたときの話。

知識集約として載せる。

Excel2013で何がおこったか

平たく言うと、2013以前はExcelアプリケーションというウインドウに複数のBookが乗っかっていた(アプリケーション閉じるボタンの下の奴で最小化すれば、複数bookを並べられたやつ)。

2013以降は個別のBookごとにウィンドウが立ち上がる。

VBAにどんな問題が?

1Bookで閉じてる処理なら問題ない。
問題があるのは、複数bookに渡って操作をする場合だ。

2013以前は1アプリケーションに紐づく全てのBookがActiveな状態だった。
対して2013以降は、別ウィンドウとして表示されるBookが処理の過程で非Activeとなる可能性がある、と言う話。

VBA、ExcelApplicationの一部の処理が、Active Bookを前提とした動作をするため、そのときに対象が非Activeな状態だったらVBA処理がエラー落ちしてしまう。

####対処法は?
非Activeな操作の前に、意図的に対象をActive、もしくは明示してやる必要がある。

自分で分かっているActive前提の処理をいかに羅列する。

.Runでマクロを起動する処理

既にOpen済みのBookに対してだけなら、マクロ名を引数に渡せば実行してくれる。
だけど、Excel2013以降、Open済みでも非ActiveなBookが対象なら、ブック名!マクロ名で起動する必要がある。

.Deleteでシートを削除する処理

ということで、Delete発効前に、非ActiveなBookをActivateさせなきゃいけない。

まとめ

現状動かないと分かったのは上記。
ExcelAppの中身が調べられればいいんだけど、その方法は知らないっす。
とりあえず、リネームやシートの移動は問題ないみたい。
また何か不具合があったら追記します。

2
2
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?