MS Access – > Excel MsgBox出现两次

我在Access 2016中编写了一个模块,打开Excel电子表格,将数据复制到Excel表格中,然后运行存储在显示消息框的Excel文件中的子文件,然后生成图表(或者至less应该!)。

这是访问代码:

Option Compare Database Option Explicit Sub QueryExportMod() 'variable initilizations and definitions --------------------------------------------------------------------------------------- Dim db As DAO.Database Set db = CurrentDb Dim totalFindingsQuery As String Dim breakdownFindingsQuery As String totalFindingsQuery = 'SQL text breakdownFindingsQuery = 'SQL text Dim tempQ1 As DAO.QueryDef Dim tempQ2 As DAO.QueryDef Set tempQ1 = db.CreateQueryDef("tempQ1", totalFindingsQuery) Set tempQ2 = db.CreateQueryDef("tempQ2", breakdownFindingsQuery) Dim rs1 As Recordset Dim rs2 As Recordset Set rs1 = db.OpenRecordset("tempQ1") Set rs2 = db.OpenRecordset("tempQ2") Dim xlApp As Excel.Application Dim wb As Excel.Workbook Dim ws As Excel.Worksheet Set xlApp = New Excel.Application Set wb = xlApp.Workbooks.Open(CurrentProject.Path & "\ExportExcelTest.xlsm") Set ws = wb.Worksheets("Sheet1") Dim table As ListObject Set table = ws.ListObjects("Table1") 'Modifying files and data ------------------------------------------------------------------------------------------------------ ws.ListObjects("Table1").DataBodyRange.Rows.Delete ws.Range("A2") = "Total Findings" ws.Range("B2").CopyFromRecordset rs1 ws.Range("A3").CopyFromRecordset rs2 'Call autoGraph, the Excel sub xlApp.Run "autoGraph()" xlApp.Visible = True Set xlApp = Nothing Set wb = Nothing Set ws = Nothing DoCmd.DeleteObject acQuery, "tempQ1" DoCmd.DeleteObject acQuery, "tempQ2" End Sub 'to be able to run the sub from a macro Function KGQueryExportCall() Call QueryExportMod End Function 

这里是Excel的子:

 Sub autoGraph() 'AppActivate Application.Caption MsgBox " <message> " Dim tb1Range As Range Set tb1Range = ActiveSheet.Range("Table1") Range("Table1").Select ActiveSheet.Shapes.AddChart2(201, xlColumnClustered).Select ActiveChart.SetSourceData Source:=Range("Table1") End Sub 

当我运行Access子QueryExportMod ,消息框被生成(另一个问题是,它总是在其他窗口后面。有谁知道如何强制它当前的窗口,顶部?我尝试AppActivate Application.Caption但它打破了我的代码),当我在消息框上按“确定”,相同的确切消息框将重新出现。 一旦我按这个重复“确定”,那么Excel电子表格将打开,一切工作正常。 我怎样才能摆脱这个重复?

谢谢你的帮助

编辑:我把增加两个DeBug行在Excel中,像这样:

 DeBug.Print("1") MsgBox " <message> " DeBug.Print("2") 

并最终得到

当我运行Access模块​​时 ,在立即窗口中显示1 2 1 2 ,所以现在我知道Excel子程序正在运行两次,但是我仍然无法弄清楚是什么原因造成的。 当我从Excel内部运行Excel模块时, 我只能得到

1 2

我相信这可能与实际应用开放两次有关吗? 当我没有消息框的线路运行时,我看到一个口吃,就像一个窗口打开,然后几乎立即closures,然后再次打开

你不应该在这里添加括号:

xlApp.Run "autoGraph()"

在Access中它只是在Application.Run添加括号时产生一个运行时错误,在Excel中显然运行了两次。

删除它们,它将被修复。