2015-11-14 109 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