当Access被声明为数据库而不是对象时,如何从Excel调用Access sub?
我熟悉在Access声明为对象时如何调用外部sub:当Access被声明为数据库而不是对象时,如何从Excel调用Access sub?,excel,ms-access,vba,Excel,Ms Access,Vba,我熟悉在Access声明为对象时如何调用外部sub: Sub exportRecords() Dim report As Worksheet Set report = Sheets("Report") Dim lastrow, x As Integer With report lastrow = report.Range("A" & .Rows.Count).End(xlUp).Row End W
Sub exportRecords()
Dim report As Worksheet
Set report = Sheets("Report")
Dim lastrow, x As Integer
With report
lastrow = report.Range("A" & .Rows.Count).End(xlUp).Row
End With
Dim db As Database
Dim rs As DAO.Recordset
Set db = OpenDatabase("\\~\myDB.accdb")
Set rs = db.OpenRecordset("TblData", dbOpenTable)
For x = 2 To lastrow
If report.Range("AI" & x) = "MSH" Then
rs.AddNew
rs.Fields("Date") = report.Range("A" & x).Value
rs.Fields("AgentName") = report.Range("E" & x).Value
rs.Fields("Tardy") = report.Range("S" & x).Value
rs.Fields("Comments") = report.Range("X" & x).Value
rs.Update
Else
End If
Next x
'****THIS IS WHERE I WANT TO RUN THE ACCESS SUB/MACRO****
rs.Close
db.Close
End Sub
但是如果我走这条路,那么我不确定如何像下面这样使用DAO添加记录。有没有其他方法来调用sub?您的标题似乎指向了后期绑定与早期绑定的混淆。在这两种情况下,代码是相同的,唯一的区别是当您针对
对象
VBA在运行时解析成员调用时,而使用早期绑定时,它们在编译时解析(因此您可以获得IntelliSense&auto completion)。只需执行Dim accApp As Access.Application
。完成。我不得不稍微调整一下,设置accApp=CreateObject(“Access.Application”),并在末尾添加了accApp.Application.Run“modulename.macroname”
,但现在我发现运行时错误方法运行对象“Application”失败了
我现在正在研究如果您提前绑定,只需Set accApp=New Access.Application
。。。。没有理由更改.OpenCurrentDatabase
或.DoCmd.RunMacro
代码。早/晚绑定代码做完全相同的事情。唯一的区别是,延迟绑定调用在运行时解决。不熟悉Access,但它似乎来自应用程序。run
仅支持ProjectName。MacroName
语法-如果有模块名称,请忽略它,并确保名称明确无误。
Dim accApp As Object
Set accApp = CreateObject("Access.Application")
accApp.OpenCurrentDatabase("\\~\myDB.accdb")
accApp.DoCmd.RunMacro "Modulename.Macroname"