【问题标题】:Gettign most recent file in a directory in Visual Basic在 Visual Basic 中获取目录中的最新文件
【发布时间】:2015-10-26 18:09:26
【问题描述】:

我经常制作窗口的屏幕截图并将它们保存到文件夹中,然后将它们添加到以某种方式裁剪、调整大小和对齐的 PowerPoint 演示文稿中。为了节省鼠标点击并使该过程可重现,我想在 PowerPoint 中使用 Visual Basic 宏自动执行此操作。

目前我有以下:

Sub Insert_Picture_3()
Dim oPic As Shape
Set oPic = ActiveWindow.View.Slide.Shapes.AddPicture("\\nlamvfs00065\homes\nlkpec\newpic.png", False, True, 0, 0, -1, -1)
    oPic.PictureFormat.CropLeft = 115
    oPic.PictureFormat.CropTop = 85
    oPic.PictureFormat.CropRight = 16
    oPic.PictureFormat.CropBottom = 55
    oPic.Height = 7.5 * 72
    oPic.Left = 0 * 72
    oPic.Top = 0 * 72
    oPic.ZOrder msoSendToBack
End Sub

“AddPicture”的参数是一个名为“newpic.png”的固定文件。但是,我希望这是目录“\nlamvfs00065\homes\nlkpec”中最新的 png 文件,这样我就不必每次应用宏时都将屏幕截图重命名为“newpic.png” .

我找到了一个类似于以下内容的示例:

Dim myFile = DirectoryInfo.GetFiles("\\nlamvfs00065\homes\nlkpec").OrderByDescending(Function(f) f.LastWriteTime).First()

但是,如果我在从 PowerPoint 2007 启动的 Visual Basic 编辑器中输入这一行,我会收到一条错误消息

“编译错误:预期:语句结束”

突出显示“=”符号。

有人对我如何生成“myFile”作为指定目录中最新的 png 文件传递​​给“AddPicture”有任何建议吗?提前致谢。

【问题讨论】:

  • 一种方法是将文件名读入一个数组,然后比较 FileDateTime("path_to_file"); 的结果。如果它大于当前值,则将新的 filedatetime 设为当前值。

标签: vba file-io powerpoint


【解决方案1】:

要使用一个对象,您需要对其进行标注然后设置它,您的代码似乎试图同时进行这两项操作。

我不熟悉 DirectoryInfo 对象,但使用文件系统对象,您可以使用以下内容找到最后修改的文件。示例子例程只是说明了如何调用 FindLastModifed 函数。

要使用代码,您需要设置对 microsoft 脚本运行时的引用。

Function FindLastModified() As String
Dim fso As Scripting.FileSystemObject
Dim myFile As Scripting.File
Dim myFiles As Scripting.Files
Dim dteDate As Date
Dim sFilePathName As String

    Set fso = New FileSystemObject
    Set myFiles = fso.GetFolder("\\nlamvfs00065\homes\nlkpec").Files

    For Each myFile In myFiles
        If dteDate < myFile.DateLastModified Then
            dteDate = myFile.DateLastModified
            sFilePathName = myFile.Path
        End If
    Next myFile

FindLastModified = sFilePathName

End Function

Sub Example()
Dim sFileNamePath As String

sFileNamePath = FindLastModified

End Sub

【讨论】:

  • 嗨,格雷厄姆,感谢您的回答。但是,在 PowerPoint Visual Basic 编辑器中,我在第二行“Dim fso As Scripting.FileSystemObject”出现编译错误,显示为“未定义用户定义的类型”。您确定该脚本可以在 PowerPoint 宏中运行吗? (我已经看到了在 Visual Basic 中有效但在 PowerPoint 宏中无效的其他答案示例)。
  • 您好 khpeek,您收到的错误消息似乎是因为您没有为 microsoft 脚本运行时设置参考。要设置参考,您需要打开 PowerPoint Visual basics 编辑器,选择工具菜单并选择参考。这将显示项目可以使用的引用列表,向下滚动到 Microsoft 脚本运行时,然后选中它旁边的框并单击确定。然后代码应该可以工作了。
  • @khpeek 可能应该在最后一条评论中包含 @ 字符,只需要在此处评论以便您得到回复。
  • 再次感谢您的评论。 Indeed 没有仔细阅读您的答案,也没有设置对 Microsoft Scripting Runtime 的引用。设置参考后,该功能就像一个魅力。
猜你喜欢
  • 2019-03-22
  • 1970-01-01
  • 1970-01-01
  • 2010-11-04
  • 2013-02-09
  • 1970-01-01
  • 2012-07-20
  • 1970-01-01
  • 2021-10-30
相关资源
最近更新 更多