2007.08.16

VBAの落とし穴 ~フォーカスを当てる方法 ~

一般の家庭にまで広まっているExcel
そのExcelを利用して様々な処理をマクロでする事が出来ます。

大体の作業は新しいマクロのコピーを行う事で
おおよそのあたりがつきます。

そんなExcelマクロ、VBAにて落とし穴が潜んでいます
今日はひとつ紹介。

フォーカスを当てるために以下の処理を書く。
oSheet.Cells(1, 1).Select

しかし"A1"にフォーカスが当たって無いように見える。
よくみると上の方で"A1"にフォーカスが当たっていて
Enterを押すと"A2"にフォーカスが移動する。

なぜ、このような状態になっているかというと
フォーカスは"A1"に当たっているのですが
スクロールバーが動いてしまっていたために
開いたシートには"A1"が無いからです。

この現象を解決する為の対処方法は
ActiveWindow.ScrollRow = 1
と書けばよいのです。

設定をしてあげる事でスクロールバーが上まで行きフォーカスを設定した場所が見えるようになります。
フォーカス設定したのにその項目が見えなくなってしまう可能性がある場合には
ActiveWindow.ScrollRow の設定も忘れないようにしましょう。

コメントを投稿

(いままで、ここでコメントしたことがないときは、コメントを表示する前にこのブログのオーナーの承認が必要になることがあります。承認されるまではコメントは表示されません。そのときはしばらく待ってください。)

photo
ntakayama