通过 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 - 数据库打开一段时间后对子表单的引用消失
通过 VBA 将查询从 Access 导入 Excel 并删除单个单元格