web-dev-qa-db-ja.com

Access VBAでExcelオブジェクトを参照する方法は?

Access 2007 VBAスクリプトからExcelオブジェクトと定数を使用できるようにするには、どの宣言を作成する必要がありますか?

Dim wb As Workbook

または

Set objExcelApp = New Excel.Application

または

.Borders(xlEdgeBottom)

ありがとう

15
Pablo

最初にMicrosoft Excelオブジェクトライブラリへの参照(メニュー:[ツール]-> [参照])を設定する必要があります。その後、すべてのExcelオブジェクトにアクセスできます。

参照を追加すると、すべてのExcelオブジェクトにフルアクセスできます。たとえば、すべての前にExcelを追加する必要があります。

Dim xlApp as Excel.Application

フォームにExcelワークブックオブジェクトを追加し、xLObjectという名前を付けたとします。

このオブジェクトのシートにアクセスして範囲を変更する方法は次のとおりです

Dim sheet As Excel.Worksheet
Set sheet = xlObject.Object.Sheets(1)
sheet.Range("A1") = "Hello World"

(この質問への回答から上記をコピーしました)

AccessでExcelを使用する別の方法は、Accessモジュールを介してExcelを起動することです(shahkalpeshが答えで説明した方法)

13
marg

私は両方の答えに反対します。参照をまったく作成しないで、遅延バインディングを使用します。

  Dim objExcelApp As Object
  Dim wb As Object

  Sub Initialize()
    Set objExcelApp = CreateObject("Excel.Application")
  End Sub

  Sub ProcessDataWorkbook()
     Set wb = objExcelApp.Workbooks.Open("path to my workbook")
     Dim ws As Object
     Set ws = wb.Sheets(1)

     ws.Cells(1, 1).Value = "Hello"
     ws.Cells(1, 2).Value = "World"

     'Close the workbook
     wb.Close
     Set wb = Nothing
  End Sub

上記のコードの唯一の違いは、変数がすべてオブジェクトとして宣言され、CreateObject()でExcelインスタンスをインスタンス化することです。

このコードは、インストールされているExcelのバージョンに関係なく実行されますが、参照を使用すると、異なるバージョンのExcelがインストールされている場合、または別の場所にインストールされている場合、コードが簡単に破損する可能性があります。

また、上記のコードにエラー処理を追加して、Excelインスタンスの初期インスタンス化が失敗した場合(Excelがインストールされていないか、正しく登録されていないなど)、コードを続行できます。参照セットを使用すると、Excelがインストールされていない場合、Accessアプリケーション全体が失敗します。

31
David-W-Fenton

モジュール内

Option Explicit
dim objExcelApp as Excel.Application
dim wb as Excel.Workbook

sub Initialize()
   set objExcelApp = new Excel.Application
end sub

sub ProcessDataWorkbook()
    dim ws as Worksheet
    set wb = objExcelApp.Workbooks.Open("path to my workbook")
    set ws = wb.Sheets(1)

    ws.Cells(1,1).Value = "Hello"
    ws.Cells(1,2).Value = "World"

    'Close the workbook
    wb.Close
    set wb = Nothing
end sub

sub Release()
   set objExcelApp = Nothing
end sub
3
shahkalpesh