【发布时间】:2021-01-04 11:42:25
【问题描述】:
我有下面的代码,当我在保存到 pdf 的部分中添加它时,它按预期运行以创建单词,它第一次运行并保存。第二个循环它构建 word 文件并保存文件,但未能第二次完成 pdf 创建。第二个单词文件在循环中完成后出现以下错误。
运行时错误“462” 远程服务器机器不存在或不可用
对 VBA 很陌生,所以对我的代码要温柔!
提前致谢,
大卫
Sub CreateBasicWordReport()
Dim WdApp As Word.Application
Dim SaveName As String
Dim FileExt As String
Dim LstObj1 As ListObject
Dim MaxValue As Integer
Dim FilterValue As Integer
Dim Organisation As String
Dim Rng As Range
Dim WS As Worksheet
Set LstObj1 = Worksheets("Sheet1").ListObjects("Table1")
MaxValue = WorksheetFunction.Max(LstObj1.ListColumns(1).Range)
FilterValue = MaxValue
Do Until FilterValue = 0
Sheets.Add(After:=Sheets("Sheet1")).Name = "Static"
Sheets("Sheet1").Select
Set WdApp = CreateObject("Word.Application")
With WdApp
.Visible = True
.Activate
.Documents.Add "C:\Users\david\Documents\Custom Office Templates\IBD Registry Quarterly Report Template2.dotx"
ActiveSheet.ListObjects("Table1").Range.AutoFilter Field:=1, Criteria1:=FilterValue
Range("F11").Select
Range("A1", Range("A1").End(xlDown).End(xlToRight)).Copy
.Selection.GoTo what:=-1, Name:="TableLocation"
.Selection.Paste
For Each Row In Range("Table1[#All]").Rows
If Row.EntireRow.Hidden = False Then
If Rng Is Nothing Then Set Rng = Row
Set Rng = Union(Row, Rng)
End If
Next Row
Set WS = Sheets("Static")
Rng.Copy Destination:=WS.Range("A1")
Sheets("Static").Select
Sheets("Static").Activate
Organisation = Range("D2").Value
Sheets("Static").Select
Range("D2").Copy
.Selection.GoTo what:=-1, Name:="Organisation"
.Selection.PasteAndFormat wdFormatPlainText
Application.CutCopyMode = False
Sheets("Static").Select
Range("F2").Copy
.Selection.GoTo what:=-1, Name:="MalePatients"
.Selection.PasteAndFormat wdFormatPlainText
Application.CutCopyMode = False
Chart2.ChartArea.Copy
.Selection.GoTo what:=-1, Name:="ChartLocation"
.Selection.Paste
If .Version <= 11 Then
FileExt = ".doc"
Else
FileExt = ".docx"
End If
SaveName = Environ("UserProfile") & "\Desktop\IBD Registry Quarterly Report for " & _
Organisation & " " & _
Format(Now, "yyyy-mm-dd hh-mm-ss") & FileExt
If .Version <= 12 Then
.ActiveDocument.SaveAs SaveName
Else
.ActiveDocument.SaveAs2 SaveName
End If
SaveNamePDF = Environ("UserProfile") & "\Desktop\IBD Registry Quarterly Report for " & _
Organisation & " " & _
Format(Now, "yyyy-mm-dd hh-mm-ss") & ".pdf"
ActiveDocument.ExportAsFixedFormat _
OutputFileName:=SaveNamePDF, _
ExportFormat:=wdExportFormatPDF _
.ActiveDocument.Close
.Quit
End With
Set WdApp = Nothing
FilterValue = FilterValue - 1
Application.DisplayAlerts = False
Sheets("Static").Delete
Application.DisplayAlerts = True
Loop
End Sub
【问题讨论】:
-
第一步——你在循环中做了很多可能应该在循环之外的事情,例如
Set WdApp = CreateObject("Word.Application")、.Quit和Set WdApp = Nothing。 -
是的,我认为我每次都在打开和关闭 word 应用程序,而不仅仅是关闭文档。现在开始变得有意义了,我的大部分编码都是用 SQL 编写的,所以这对我来说是一种新的思维方式。感谢您的帮助。
标签: excel vba loops pdf ms-word