最近気づいたんですけど、Excel2013以降で保存したファイルをExcel2010で開いて、(Excel本体ではなく)ブックの最大化を解除すると右に移動してるんですよ。
つまり、この状態のブックを保存して、
一度Excel2013以降で開いて、上書きして、それをもう一度Excel2010で開くと、ちょっと右にずれる。
いや、なんでや…。
Excel本体ならともかく、ブックの最大化を解除するなんて滅多にしないもんだから、半年間気づかずにいたらブックがはるか彼方に吹っ飛んでタヨ。
パッと見、何事だって感じダヨ。
Excel2010まではこのブックの位置はファイルごとに保存されているんだけど、最大化してるorしていないは、直近開いていたExcelファイルを閉じるときに最大化していたかどうかに依存されるっぽい。
Excel2013以降はブックの位置はファイルごとではなく、直近開いていたExcelファイルに依存するので、そのへんの違いからこういうことになるのかな?
対策
Excel2010なんて使うのやめよう
2020/10/13にはMicrosoftのサポート切れるしね?そうしよう?
VBAで起動時に調整する
Excel2010では赤枠のExcel本体がApplication、青枠のWorkbookがActiveWindowです。
Excel本体のみでWorkbookが1つもないときはActiveWindow = Nothingなので注意。
で、ActiveWindowのTop/Leftは赤枠内の座標を返します。
Excel2013以降ではApplication = ActiveWindowと見て良いみたい。
複数ファイルを開いて全部サイズを変更したとしても、
ApplicationのTop/Left/Width/Heightは現在ActiveなブックのTop/Left/Width/Heightを返し、ActiveWindowのTop/Leftはディスプレイ内の座標を返します。
つまり恒久対応するなら起動時とWorkbook_WindowResizeイベントハンドラで
- Excel2010以下の環境か判定
- ActiveWindow.WindowStateがxlNormalか(xlMaximizedだと座標変更するとき例外が発生するので)
- ActiveWindow.Top/LeftがApplication.Height/Widhtを超えてないか
をチェックしてActiveWindow.Top/Leftを補正してあげないといけないってことなのかな。
他にもニッチなIT関連要素をまとめていますので、よければ一覧記事もご覧ください。