【ExcelVBA】Application.Workbooks:Excelのインスタンスの参照

書くネタがないのでとりあえず割割り増しましで。

Application.Workbooks

Workbook = 今開いてるExcelファイル1個。

全体を保持するコレクションがApplication.Workbooks。Applicationは省略できるので、単にWorkbooksとも書ける。

Function FindBook(ByRef bookname As String) As Workbook
    For Each book In Workbooks
        If book.Name = bookname Then
            set FindBook = book
            Exit Function
        End If
    Next book
    set FindBook = Nothing
End Function

注意点

  • Office2010以前だと、1つのウィンドウがあってその中にBookの子ウィンドウがたくさんある実装だが、 Wookbooksは、その1つのウィンドウ内のものだけを保持している。(らしい) 例えばxlsmとxlsを同時開きしても、互いに別のアプリのウィンドウでVBAから見えないため悲しみが生まれる。 これなんか解決策あるんかな。。

  • Workbook.Nameは、拡張子も含む。(タイトル部分ママ)ただし、未保存のものは拡張子のない「Book1」みたいな感じになる。