首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >DocumentExport将pdf复制到excel页,但留下一份打开的pdf副本,我无法将其关闭。

DocumentExport将pdf复制到excel页,但留下一份打开的pdf副本,我无法将其关闭。
EN

Stack Overflow用户
提问于 2020-02-06 22:00:42
回答 1查看 105关注 0票数 0

我有一个Microsoft project vba应用程序,我想在其中使用“标记”字段复制选定的任务,以标识目标任务的所有前置任务,下面将其标识为“目标”。当我追踪到网络只包含未完成的任务时,控制传递给一个例程,该例程使用DocumentExport创建一个复制的文件并将其保存到pdf。然后,使用ActiveSheet.OLEObjects.add,将此文件复制到特定的excel选项卡中,其中"A3“单元格是要放置的文件的左上角。

我当前代码的摘录:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    target = ActiveCell.Task
    SaveFilePath = "C:\Macros\"
    SaveFileName = SaveFilePath & "Target-" & target & ".pdf"
    SaveFilePath = "C:\Macros\"
    SaveFileName = SaveFilePath & "Target-" & target & ".pdf"

    Application.FilePageSetupView Name:=".MarkedPred_View", allsheetcolumns:=True, BestPageFitTimescale:=True
    Application.FilePageSetupPage Name:=".MarkedPred_View", Portrait:=False, PagesTall:=6, PagesWide:=1, PaperSize:=pjPaperLegal, FirstPageNumber:=False
    StrHeader = "&18&B" & GetFontFormatCode("Calibri") & "Status Date=" & Format(ActiveProject.StatusDate, "mm/dd/yy") & " Task Name= " & SelTask.Name & " ID:" & SelTask.ID & " UID:" & SelTask.UniqueID
    Application.FilePageSetupHeader Name:=".MarkedPred_View", Alignment:=pjCenter, Text:=StrHeader
    Application.FilePageSetupLegend Name:=".MarkedPred_View", LegendOn:=pjNoLegend

    DocumentExport SaveFileName, pjPDF, FromDate:=EarliestStart - 30, ToDate:=LFin + 30

    xlsheet.Range("A3").Select
    ActiveSheet.OLEObjects.Add(FileName:=SaveFileName, Link:=True _
            , DisplayAsIcon:=False).Activate

如果将Link属性设置为false,则不会复制到excel

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    sbDeleteAFile (SaveFileName)

    Sub DeleteAFile(ByVal FileToDelete As String)
         IsFileOpen (FileToDelete)
             SetAttr FileToDelete, vbNormal
             Kill FileToDelete
    End Sub

    Function IsFileOpen(FileName As String)
    Dim filenum As Integer, errnum As Integer

    OutputStr = ("1587 - IsFileOpen - started for = " & FileName)       'added
    Call Txt_Append(MyFile, OutputStr)

    On Error Resume Next   ' Turn error checking off.
         filenum = FreeFile()   ' Get a free file number.
         ' Attempt to open the file and lock it.
         Open FileName For Input Lock Read As #filenum
         Close filenum          ' Close the file.
         errnum = Err           ' Save the error number that occurred.
         On Error GoTo 0        ' Turn error checking back on.


        ' Check to see which error occurred.
        Select Case errnum


            Case 0
               IsFileOpen = False
               'Open (Filename)
               ' Error number for "Permission Denied."
               ' File is already opened by another user.
               OutputStr = ("1587 - IsFileOpen - is NOT Open")       'added
               Call Txt_Append(MyFile, OutputStr)
           Case 70
               IsFileOpen = True

              ' Another error occurred.
           Case Else
               OutputStr = ("1587 - IsFileOpen - IS Open")       'added
               Call Txt_Append(MyFile, OutputStr)
               Error errnum
         End Select

    End Function

"LFin“是目标任务的完成日期,我从这个日期收集它的所有前置任务。我使用完成日期作为“最新完成日期”(LFIN)来绑定命令中的"ToDate“。

该错误与"ActiveSheet.OLEObjects.Add (fileName:=SaveFilename,Link:=True _)“命令一起出现,其中打开Link:=True并将其复制到指定的excel选项卡中,单元格"A3”是图像的粘贴点。

我没有关闭此代码片段中的PDF的任何代码,因此在尝试删除打开的文件时出现错误。我在不同的论坛上看到过很多讨论,如果一个文件被另一个应用程序打开,MS Project VBA不能删除它,因为它没有该文件的句柄(??)。如果我手动关闭PDF,关闭调试器中的错误通知,然后按“运行/继续”,PDF将被删除并循环回到主例程,就像我希望的那样,但我必须再次关闭新创建的PDF,清除对话框并选择运行/继续。

此代码中唯一不能按预期工作的部分(此代码中当前缺少的部分)是能够在将PDF复制到Excel后将其关闭,因为不再需要它。我只看到了非常复杂的代码,它获得了PDF的句柄,然后允许您关闭特定的文件,而不影响任何其他PDF文件,这些文件也可能是打开的,不是此过程的一部分。

有谁有什么想法吗?我最初开始使用CopyToClipboard,但此命令只能将MS Project时间表的16行复制到剪贴板。然后,我尝试了ExportAsFixedFormat,但FromDate和ToDate条目对显示的图像没有任何影响。

使用DocumentExport和Application.OLEObjects.Add,我可以将日程表的无限页面复制到剪贴板上,并粘贴到excel选项卡中,显示所需的日期,only.This是我所能获得的最接近输出效果的日期。我一直无法找到与Application.OLEObjects.Add命令相关联的命令,该命令可用于关闭由Application.OLEObjects.Add创建的PDF文件。您想要打开PDF文件以便将其复制到Excel选项卡中,这当然是有道理的,但令人惊讶的是,在PDF文件使用完毕后,没有一种简单的方法来关闭它。

EN

回答 1

Stack Overflow用户

发布于 2020-02-07 19:43:33

这个问题可以归结为:

使用"ActiveSheet.OLEObjects.Add (fileName:=SaveFilename,Link:=True,DisplayAsIcon:=False).Activate“命令打开Link:=True并将其复制到指定的excel选项卡中...

打开pdf文件的原因是代码告诉它。通过在刚刚添加的OLEObject上使用Activate方法,它激活了它--意思是在中打开pdf文件。

解决方案是将OLEObjects.Add方法简单地用于以下内容:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ActiveSheet.OLEObjects.Add FileName:=SaveFileName
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60104195

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文