无需激活即可将数据从 Access 导出到 Excel2013

Posted

技术标签:

【中文标题】无需激活即可将数据从 Access 导出到 Excel2013【英文标题】:Export data from Access to Excel2013 without activation 【发布时间】:2014-09-20 15:29:14 【问题描述】:

用户可以将数据从我的 Access2013 应用程序导出到 Excel2013。在 Access 中,CreateObject 创建一个 Excel 实例,并通过 VBA 方法在后台处理数据并将其存储在 Excel 中。 (见下面的代码摘录) 这在早期的 Office 版本中运行良好,但如果 Excel2013 尚未激活,几秒钟后会弹出激活窗口。但由于 Excel 对象的可见性设置为 false,激活窗口对用户是隐藏的。然后我的 Access 应用程序会冻结,因为其中一种 VBA 方法不会返回,并且用户将不知道发生了什么或如何解决问题。

我希望我的应用程序 a) 在导出之前检查 Excel 是否已激活或 b) 在出现问题时正确完成并提示错误消息。

我失败的方法: 1) 导出前检查激活状态:调用 OSPP.VBS 并将结果通过管道传输到文本文件中,然后解析文本文件。问题:OSPP.VBS 需要提升管理员权限;我找不到有关输出格式的文档,并且可能有各种条目(运行时、试用版、完整版……)

2) 使用表单计时器和 DoEvents 在超时后捕获挂起方法,但这不起作用。

3) 启动第二个 Access 应用程序,测试是否出现 Excel 问题,如果出现,则终止第二个应用程序。问题:直到激活窗口弹出的持续时间各不相同,所以有时第二个应用程序可以正常工作,有时不能。

任何提示和想法将不胜感激!

Set objxl = CreateObject("Excel.Application")
On Error GoTo ExcelErrorHandler
objxl.Visible = False
objxl.Workbooks.Open (strPath & TMP_FILE)
objxl.Workbooks(TMP_FILE).Worksheets(1).Name = "Report"
objxl.Workbooks(TMP_FILE).Save
objxl.Workbooks.Open (strPath & "TemplateTexts.xlsx")
objxl.Workbooks.Add (strPath & strCurrTemplate)
'***** convert formulas to 'real' values in target excel sheet strFullFileName
objxl.Cells.Select
objxl.Selection.Copy
objxl.Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
objxl.Range("A1").Select
objxl.Selection.Copy
objxl.ActiveWorkbook.SaveAs strFullFileName

【问题讨论】:

excel 应用程序必须保持隐藏有什么特别的原因吗?以我自己的经验,使 excel 应用程序可见,解决了这个问题,因为访问必须等到 excel 应用程序完全打开。之后,用户可以立即访问 Excel 报告。 我同意,问题将得到解决。但是,当打开三个工作簿并复制和格式化数据时,会出现严重闪烁,在默认模式下应避免。 只是猜测,或许objxl.DisplayAlerts = False 可以解决? 是的,我也试过了,但没有运气。 那么,哪个vba方法不返回,带有哪个错误和描述? 【参考方案1】:

如果这被认为是在错误的部分,向工作人员道歉,我没有足够的声誉来添加评论但想回复评论......如果屏幕闪烁是唯一阻止你做的事情工作簿可见,您是否考虑添加以下行?

objxl.screenupdating = false

我不知道它是否会阻止应用程序屏幕在打开时显示,但它应该会阻止应用程序中的任何其他进程导致闪烁。

【讨论】:

激活窗口仍然会弹出,但至少闪烁停止,这是一个改进。谢谢。 这可能非常脏,但也许您可以使用 sendkeys 方法在弹出窗口打开时按 enter。笔记;极易出错,只能在其他一切似乎都失败时作为最后的手段使用 @JenZzz:我的问题是找不到激活向导什么时候弹出。我的 Access VBA 代码只是冻结;没有错误处理程序会有所帮助。 最后的猜测,然后我出局了;您是否尝试在设置 createobject 之前放置 objxl.displayalerts 命令? 是的,我有,但对激活窗口没有影响。

以上是关于无需激活即可将数据从 Access 导出到 Excel2013的主要内容,如果未能解决你的问题,请参考以下文章

无需输入即可将数据从 Web 应用程序获取到客户端计算机上特定文件夹中的 XML 文件中的方法

无需在浏览器中登录即可将视频上传到 youtube

无需用户移动鼠标即可将浏览器光标从“等待”变为“自动”

无需卡即可将图像分享到 Twitter

无需 youtube 应用即可将 Youtube 视频集成到应用中

无需登录即可将曲目添加到播放列表 - API Spotify