我有一个Microsoft project vba应用程序,我想在其中使用“标记”字段复制选定的任务,以标识目标任务的所有前置任务,下面将其标识为“目标”。当我追踪到网络只包含未完成的任务时,控制传递给一个例程,该例程使用DocumentExport创建一个复制的文件并将其保存到pdf。然后,使用ActiveSheet.OLEObjects.add,将此文件复制到特定的excel选项卡中,其中"A3“单元格是要放置的文件的左上角。
我当前代码的摘录:
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
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文件使用完毕后,没有一种简单的方法来关闭它。
发布于 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
方法简单地用于以下内容:
ActiveSheet.OLEObjects.Add FileName:=SaveFileName
https://stackoverflow.com/questions/60104195
复制相似问题