用户可以将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
答案 0 :(得分:1)
如果这被认为是错误的部分,请向工作人员道歉,我没有足够的声誉来添加评论但想要回复评论...如果屏幕闪烁是唯一阻止你的事情从使工作簿可见,您是否考虑过添加以下行?
objxl.screenupdating = false
我不知道它是否会在应用程序屏幕打开时停止显示,但它应该阻止应用程序中的任何其他进程导致闪烁。