【发布时间】:2020-07-13 20:04:57
【问题描述】:
我有一个访问数据库,我正在尝试编写一些 VBA 来提高自动化程度。
我有一个名为 Global Variables 的模块,我已经成功地使用它来定义全局常量(文件路径等)和一个模块 ReportCode,它有两个主要子程序,一个用于使用 ADODB 运行查询(在需要时抓取表单参数 - 返回一个记录集),第二个获取该记录集并将数据写入 Excel 模板。
鉴于我可能希望将多个查询写入多个选项卡,我认为最好的方法是定义一个 ExportDocument 对象以包含公共参数和一个 OrgReport 对象,其中包含查询和选项卡特定参数 - 然后收集多个 @ 987654329@ 集合中的对象。
我希望只将这两个参数传递到主子例程中。事实证明,这在 VBA 中是一种痛苦(或者至少与 ruby 相比!)。
在这里你可以看到我是如何通过自定义对象定义的
Option Private Module
' Define Custom Doc Object
Public Type ExportDocument
TeamName As String
TemplatePath As String
SaveName As String
SavePath As String
End Type
' Define Custom Report Object
Public Type OrgReport
Query As String
Fields As Variant
Sheet As String
StartCol As Integer
StartRow As Integer
Headers As Boolean
End Type
这是我表单中的代码,然后调用了一个额外的模块来完成繁重的工作 - 我知道这部分有效,因为它在我尝试对此进行所有 OOP 之前就已经完成了......
Private Sub my_report_from_form_Click()
' Prep Query Inputs
Dim TeamX_Report As OrgReport
TeamX_Report.Query = "qry_TeamReporting Query"
TeamX_Report.Sheet = "RawData"
TeamX_Report.StartCol = 1
TeamX_Report.StartRow = 2
TeamX_Report.Headers = True
TeamX_Report.Fields = Nothing
' Prep Document Inputs
Dim Teamx_Doc As ExportDocument
Teamx_Doc.TeamName = "MyTeam"
Teamx_Doc.TemplatePath = strReportTemplatePath & "MyTeam.xltm"
Teamx_Doc.SaveName = ""
Teamx_Doc.SavePath = strReportSavePath & Teamx_Doc.TeamName
' Init and set collection for CHAIN reports
Dim TeamReports As New Collection
TeamReports .Add Item:=TeamX_Report, Key:=TeamX_Report.Query
Call export_data_dump(Teamx_Doc, TeamReports)
End Sub
这给了我以下问题:
听从here的建议我改变了
Dim Teamx_Doc As ExportDocument
到
Teamx_Doc = CreateObject("ExportDocument")
但是现在我明白了
运行时错误“429”:ActiveX 组件无法创建对象 VBA
对这个问题的所有引用似乎都与从Word.、Excel. 或Outlook. 代码库调用代码有关,所以也许我只是缺少存储在我的数据库中的我自己的模块的前缀?
我发现的最佳线索是 one,这似乎表明我正在尝试做的事情存在更深层次的问题,或者我可以通过调用 Friend 来解决部分问题,尽管我迷路了地点和方式。
有没有一种方法可以在我的表单代码中后期绑定我的 UDT 对象,将一个存储在集合中,然后将两者都传递给一个子例程,该子例程将能够从第一个“Doc”对象中获取参数,然后遍历第二个“报告”对象?
VBA >_
【问题讨论】:
-
你试过删除“选项私有模块”