Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
当Access被声明为数据库而不是对象时,如何从Excel调用Access sub?_Excel_Ms Access_Vba - Fatal编程技术网

当Access被声明为数据库而不是对象时,如何从Excel调用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

我熟悉在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 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"