我有一个Excel用户表单和一些Excel VBA代码,可以将一些工作表数据转换为可以导入Access应用程序的格式。 代码工作正常,但我已经决定,如果将表单和代码移到驻留在Access应用程序中而不是电子表格中,那么开发和操作会更好。
在哪里可以了解如何将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
没有错误。但是,当谈到转换时
source_empl_col = Range(empl_col_txt & 1).Column
从Excel VBA进入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
我得到了
运行时错误:'91'
对象变量...未设置。
我需要翻译的代码太多,所以它在Access中工作,却不知道我在做什么。 需要一些指导!
答案 0 :(得分:2)
在Access VBA中,要使用外部Office应用程序的对象模型,即此处Excel(但同样适用于Outlook,PowerPoint,Word等的规则)需要显式声明外部对象。
您需要的是workbook对象的显式声明和设置。您从 app 直接跳到表,忘记了中间人 - 工作簿。
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