这是我遇到的问题。
我创建了一个Excel项目。在我的项目中的某个点上,我将当前工作簿保存为PDF并使用日志信息和PDF的超链接更新现有工作簿( Step1 )。
在项目的另一个点上,我将项目重新保存为相同的PDF(覆盖现有PDF)。在这一点上,我尝试重新保存我收到的PDF:
运行时错误-1004
文档未保存,可能已打开或可能遇到错误。这是我使用的2个脚本。
我想也许它可能与 step1 脚本的第二部分有关(当打开工作簿并更新日志信息时,它可能无法正常关闭)
请不要理睬任何帮助,因为我会继续麻烦拍摄。
步骤1:
Sub Step1()
Dim rng As Range
Dim nwb As Workbook
Dim FileName As String
Dim var
Dim var1
Dim var2
Dim var3
Dim var4
Dim var5
Dim var6
var1 = frmsetup.cmbauditor.Text
var2 = frmsetup.lblsequence.Caption
var3 = frmsetup.cmbtrimstyle.Text
var = "SEQ-" & frmsetup.lblsequence.Caption & " "
var4 = frmsetup.lbldate.Caption
FileName = var & var4
With Sheets(Array("END RESULTS", "DRIVER SEAT", "PASSENGER SEAT", "40% SEAT", "60% SEAT", "RSC SEAT")).Select
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, FileName:= _
"H:\APPLICATIONS\SEAT AUDIT\QUERY RESULTS\SEAT AUDIT - PDF\" & FileName & ".pdf", Quality:=xlQualityStandard, _
IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:= _
False
End With
Application.ScreenUpdating = False
Application.WindowState = xlMaximized
这是 step1 的下一部分,它打开现有工作簿并添加包含pdf的超链接的日志信息:
Set nwb = Workbooks.Open("H:\APPLICATIONS\SEAT AUDIT\LOG FILES\Seat Audit Log.xlsm")
With Sheets("Seat Audit Log")
nextrow = Range("B" & Rows.Count).End(xlUp).Row + 1
Cells(nextrow, 1).Value = var1
Cells(nextrow, 2).Value = var2
Cells(nextrow, 3).Value = var3
Cells(nextrow, 4).Value = var4
Set rng = .Range("E" & nextrow)
rng.Parent.Hyperlinks.Add Anchor:=rng, Address:="H:\APPLICATIONS\SEAT AUDIT\QUERY RESULTS\SEAT AUDIT - PDF\" & FileName & ".pdf", TextToDisplay:="CLICK HERE!"
End With
Application.ScreenUpdating = True
ActiveWorkbook.Save
ActiveWindow.Close
End Sub
这是 Step2 重新保存为PDF以覆盖Step1中的现有PDF:
Sub Step2()
Dim FileName As String
Dim var
Dim var4
var = "SEQ-" & frmsetup.lblsequence.Caption & " "
var4 = frmsetup.lbldate.Caption
FileName = var & var4
With Sheets(Array("END RESULTS", "DRIVER SEAT", "PASSENGER SEAT", "40% SEAT", "60% SEAT", "RSC SEAT", "ACTIONS")).Select
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, FileName:= _
"H:\APPLICATIONS\SEAT AUDIT\QUERY RESULTS\SEAT AUDIT - PDF\" & FileName & ".pdf", Quality:=xlQualityStandard, _
IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:= _
False
End With
End Sub
答案 0 :(得分:1)
您的大多数With
块似乎构造不良,可能导致某些错误(或者,可能不是,很难说肯定)。通常,您将对象限定为With
对象。在您的情况下,除了一行或两行代码之外,您似乎没有这样做。
您不需要变量来表示表单控件,并且这样做会让您的代码更难以阅读。我已相应修改了Step1。
但是,对于主要问题:通常当您尝试Save
文件时,首先需要检查是否已存在相同的文件,如果存在,则删除它。
Sub Step1()
Dim rng As Range
Dim nwb As Workbook
Dim FileName As String
FileName = "SEQ-" & frmsetup.lblsequence.Caption & " " & frmsetup.lbldate.Caption
'## Add the PATH and EXTENSION to the filename
FileName = "H:\APPLICATIONS\SEAT AUDIT\QUERY RESULTS\SEAT AUDIT - PDF\" & FileName & ".pdf"
With Sheets(Array("END RESULTS", "DRIVER SEAT", "PASSENGER SEAT", "40% SEAT", "60% SEAT", "RSC SEAT")).Select
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, FileName:= _
FileName, Quality:=xlQualityStandard, _
IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:= _
False
End With
Application.ScreenUpdating = False
Application.WindowState = xlMaximized
**'This is the next part of the step1, it opens a existing workbook and adds log information including hyperlink to pdf'**
Set nwb = Workbooks.Open("H:\APPLICATIONS\SEAT AUDIT\LOG FILES\Seat Audit Log.xlsm")
With Sheets("Seat Audit Log")
nextrow = Range("B" & .Rows.Count).End(xlUp).Row + 1
.Cells(nextrow, 1).Value = frmsetup.cmbauditor.Text
.Cells(nextrow, 2).Value = frmsetup.lblsequence.Caption
.Cells(nextrow, 3).Value = frmsetup.cmbtrimstyle.Text
.Cells(nextrow, 4).Value = frmsetup.lbldate.Caption
.Set rng = .Range("E" & nextrow)
rng.Parent.Hyperlinks.Add Anchor:=rng, Address:=FileName, TextToDisplay:="CLICK HERE!"
End With
Application.ScreenUpdating = True
ActiveWorkbook.Save
ActiveWindow.Close
End Sub
Sub Step2()
Dim FileName As String
FileName = "SEQ-" & frmsetup.lblsequence.Caption & " " & frmsetup.lbldate.Caption
'## Add the PATH and EXTENSION to the filename
FileName = "H:\APPLICATIONS\SEAT AUDIT\QUERY RESULTS\SEAT AUDIT - PDF\" & FileName & ".pdf"
'## Check to see if this file exists, and delete it if it does
If Dir(FileName) <> vbNullString Then
Kill FileName
End If
With Sheets(Array("END RESULTS", "DRIVER SEAT", "PASSENGER SEAT", "40% SEAT", "60% SEAT", "RSC SEAT", "ACTIONS")).Select
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, FileName:= _
FileName, Quality:=xlQualityStandard, _
IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:= _
False
End With
End Sub