通过 Access 2013 VBA 编辑后无法打开 Excel 2013 文件

Posted

技术标签:

【中文标题】通过 Access 2013 VBA 编辑后无法打开 Excel 2013 文件【英文标题】:Can't open Excel 2013 file after it's been edited through Access 2013 VBA 【发布时间】:2014-04-10 09:28:42 【问题描述】:

我正在开发一个 Access 数据库,其中有一个按钮,单击该按钮时,将复制一个文件(模板 excel 文件),然后打开新副本,设置几个单元格的值,然后保存并关闭它。另一个按钮执行完全相同的操作,但随后会调用另一个 sub 来打印新文件。

我遇到的问题是,我无法在 Excel 中打开这些已编辑的文件。他们通过访问 VBA 代码打印没有任何问题,这意味着它确实被编辑、保存和打印。但是,当我双击其中一个文件时,excel 会启动,但文件根本没有打开。没有桌子。如果我已经在 Excel 中打开了一个文件,然后右键单击其中一个文件并选择打印,则会打印之前的 Excel 工作表。

这是复制模板然后继续编辑副本的 Acess VBA 子:

Private Sub SaveXLFile(FileNameFull As String)
'FileNameFull: Complete path for file to be saved, including extension.

Dim ExcelApp As Excel.Application
Dim ExcelBook As Excel.Workbook
Dim ExcelSheet As Excel.Worksheet

Dim fso As Object

'copy template
Set fso = VBA.CreateObject("Scripting.FileSystemObject")
fso.CopyFile ThePath & "Arbetsorder - Blankett.xlsx", FileNameFull


Set ExcelBook = GetObject(FileNameFull)
Set ExcelApp = ExcelBook.Parent
Set ExcelSheet = ExcelBook.Worksheets(1)
'we are open and ready for action!


'take values from form and put them in the correct places
ExcelSheet.Range("C2").Value = [Kund]

'edit page 2
'Set ExcelSheet = ExcelBook.Worksheets(2)
'ExcelSheet.Range("B31").Value = [TB_Tid_Ställ]


ExcelBook.Close savechanges:=True
Set ExcelSheet = Nothing
Set ExcelBook = Nothing
Set ExcelApp = Nothing
End Sub

打印代码如下:

Private Sub PrintXLFile(FileNameFull As String)
'opens an excel file and prints it.
'FileNameFull: Complete path to file, including extension.
Dim ExcelApp As Excel.Application
Dim ExcelBook As Excel.Workbook
Dim ExcelSheet As Excel.Worksheet

Set ExcelBook = GetObject(FileNameFull)
Set ExcelApp = ExcelBook.Parent
Set ExcelSheet = ExcelBook.Worksheets(1)

ExcelSheet.PrintOut Copies:=1, Collate:=True
ExcelBook.Sheets(2).PrintOut Copies:=1, Collate:=True

ExcelBook.Close savechanges:=False 'close without changes
Set ExcelSheet = Nothing
Set ExcelBook = Nothing
Set ExcelApp = Nothing
End Sub

...实际按钮单击的 sub 绝不是阴暗的:

Private Sub KnappPrint_Click()
Dim NewFileNameWExt As String

NewFileNameWExt = [I-Order] & ".xlsx"
SaveXLFile (ThePath & "Arbetsordrar\" & NewFileNameWExt)
PrintXLFile (ThePath & "Arbetsordrar\" & NewFileNameWExt)
End Sub

我做错了什么?我尝试只编辑第一张工作表,以防在切换工作表时出错,但这并没有解决问题。

更令人困惑的是,运行 KnappPrint_Click() 时打印正常,但在资源管理器中右键单击该文件并选择“打印”没有任何作用。

【问题讨论】:

【参考方案1】:

您的工作表出现问题的原因是您打开工作簿的方式。尝试将您的 Excel 应用程序和工作簿分配更改为:

Set ExcelApp = CreateObject("Excel.Application")
Set ExcelBook = ExcelApp.Workbooks.Open(str)
Set ExcelSheet = ExcelBook.Worksheets(1)

【讨论】:

对于操作,我总是警告不要使用Worksheets(1)。它给我带来的只是过去的痛苦。我的建议是在自动化时完全限定工作表名称。 谢谢,这成功了!我仍然完全不明白为什么我可以用我的子 PrintXLFile 打印文件,但不能通过正常方式。

以上是关于通过 Access 2013 VBA 编辑后无法打开 Excel 2013 文件的主要内容,如果未能解决你的问题,请参考以下文章

Access VBA - 数据库打开一段时间后对子表单的引用消失

MS Access:导入规范无法通过 VBA

通过 VBA 将查询从 Access 导入 Excel 并删除单个单元格

使用 MS Access VBA 更改标签的默认标题

MS Access 2010,如何让黄色的启用内容栏再次出现?

使用 Access VBA,如何计算选择查询中的输出记录数并将计数存储为 VBA 变量?