2015-11-14 112 views
1

我有一個Excel用戶表單和一些Excel VBA代碼,可將某些工作表數據轉換爲準備導入到Access應用程序的格式。 該代碼工作正常,但我已經決定,如果窗體和代碼被移到Access應用程序而不是電子表格中,它會更好地用於開發和操作。如何通過Access VBA代碼處理Excel工作簿

我在哪裏可以學習如何將Excel VBA代碼轉換爲在Access中工作或至少在Access VBA中處理Excel的編碼參考?

僅僅根據 VBA ACCESS - Loop Excel workbooks 到目前爲止我設法開始與這個(注:以下所有的都只是片段):

Private source_empl_col As Integer 
Private xl_app As Object 

Set xl_app = CreateObject("Excel.Application") 
xl_app.Workbooks.Open (workbook_txt) 

,我已經成功地轉換

Private source_sheet As Worksheet 

Set source_sheet = Worksheets(source_cbo.Text) 
source_sheet.Activate 

Dim ws As Integer 
For ws = 1 To Worksheets.Count 
    source_cbo.AddItem Worksheets(ws).Name 

從Excel VBA到Access VBA

xl_app.Sheets(source_cbo).Activate 

Dim ws As Integer 
For ws = 1 To xl_app.Worksheets.Count 
    source_cbo.AddItem xl_app.Worksheets(ws).Name 

沒有錯誤。然而,當涉及到從Excel VBA轉換

source_empl_col = Range(empl_col_txt & 1).Column 

到Access VBA

source_empl_col = xl_app.Sheets(source_cbo).Range(empl_col_txt.Text & 1).Column 

甚至只是

source_empl_col = xl_app.Sheets(source_cbo).Range("B1").Column 

我得到

Run-time error: '91'
Object variable ... not set.

只是有太多我需要翻譯的代碼遲到,所以它在Access中工作,而不知道我在做什麼。 需要一些指導!

+1

終於來了!看到電子表格的人不是數據庫,也不是用戶界面,在應用程序和自動化環境中不可擴展! – Parfait

+0

不太確定你來自哪裏,@Parfait,但我會把它當作恭維。 –

回答

2

在Access VBA中,爲了利用外部Office應用程序的對象模型,即這裏的Excel(也適用於Outlook,PowerPoint,Word等相同的規則)需要顯式聲明外部對象。

您需要的是明確聲明並設置workbook對象。你從應用程序直接跳到,忘記了中間人 - 工作簿

Dim xl_app As Object, xl_wkb As Object 
Dim source_empl_col As Integer 

Set xl_app = CreateObject("Excel.Application") 
Set xl_wkb = xl_app.Workbooks.Open (workbook_txt) 

source_empl_col = xl_wkb.Sheets(source_cbo).Range(empl_col_txt.Text & 1).Column 

或者,你甚至可以設置worksheet對象:

Dim xl_app As Object, xlwkb As Object, xl_wks As Object 
Dim source_empl_col As Integer 

Set xl_app = CreateObject("Excel.Application") 
Set xl_wkb = xl_app.Workbooks.Open (workbook_txt)   
Set xl_wks = xl_wkb.Sheets(source_cbo) 

source_empl_col = xl_wks.Range(empl_col_txt.Text & 1).Column