読者です 読者をやめる 読者になる 読者になる

ActiveWindowプロパティでちょっとハマる……

ActiveWindowプロパティの怪

Excel2010でのエラー

職場のPCはOffice2010なんだが、妙なエラーが出た。

ThisWorkbookモジュールに仕込んだWorkbook_Openイベントマクロでの話。

データを集約するマクロを作っていて、データ集約が終わったら、マクロを仕込んだブックから、不要なシートを削除して新しいブックとして保存するようにしていると思ってください。

データ集約用本体のブックと、新たにできあがった集約データ入りのブックは、シートの数が異なることになるので、ブックオープン時に処理を切り替えるようにした。

リスト1
Private Sub Workbook_Open()
  If ThisWorkbook.Worksheets.Count = 2 Then
    ActiveWindow.DisplayHeadings = True    '……(1)'
    Exit Sub
  End If
  '通常の処理'
       ・
       ・
       ・
End Sub

たとえばこんな感じ。

オープン時にシートの数が「2」だということは、データ集約済みのブックだということになるので、(1)の処理をしてプロシージャを抜けるようにしたわけです。

で、これを職場のPCで、

他のブックが開いている状態で

実行すると、

オブジェクト変数または With ブロック変数が設定されていません。

というエラーが出た。

単独で開くときにはエラーにならないのに。

対応

デバッグ」をクリックしてVBE上で確認すると、リスト1の(1)のところ、

ActiveWindow.DisplayHeadings = True

がハイライトされている。

んで、「ActiveWindow」が「Nothing」になっているらしい。

わけわからん。

で、リスト1の(1)を

Application.Windows(1).DisplayHeadings = True

にしたら直った。

分からないこと

  • なぜ「ActiveWindow」が「Nothing」になってしまうのか。「Workbook_Open」が実行されているということは、そのブックが「ActiveWindow」になっているはずなのに。
  • しかも、この現象は2013では再現できなかった。

納得いかないぜーーー!

@akashi_keirin on Twitter