Vba 在Visual Basic中获取目录中最近的文件

Vba 在Visual Basic中获取目录中最近的文件,vba,file-io,powerpoint,Vba,File Io,Powerpoint,我经常制作窗口的截图并将其保存到文件夹中,然后将其添加到PowerPoint演示文稿中,并以某种方式进行裁剪、调整大小和对齐。为了保存鼠标单击并使过程可复制,我想使用PowerPoint中的Visual Basic宏自动执行此操作 目前我有以下几点: Sub Insert_Picture_3() Dim oPic As Shape Set oPic = ActiveWindow.View.Slide.Shapes.AddPicture("\\nlamvfs00065\homes\nlkpec\n

我经常制作窗口的截图并将其保存到文件夹中,然后将其添加到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
Dim myFile = DirectoryInfo.GetFiles("\\nlamvfs00065\homes\nlkpec").OrderByDescending(Function(f) f.LastWriteTime).First()
“AddPicture”的参数是一个名为“newpic.png”的固定文件。但是,我希望这是目录“\nlamvfs00065\homes\nlkpec”中最新的png文件,这样我就不必每次应用宏时都将屏幕截图重命名为“newpic.png”

我发现了一个类似于以下内容的示例:

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
Dim myFile = DirectoryInfo.GetFiles("\\nlamvfs00065\homes\nlkpec").OrderByDescending(Function(f) f.LastWriteTime).First()
但是,如果我在从PowerPoint 2007启动的Visual Basic编辑器中输入这一行,则会收到一条错误消息

“编译错误:应为:语句结束”

突出显示“=”符号


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

若要使用对象,您需要对其进行尺寸标注,然后进行设置,您的代码似乎试图同时执行这两项操作

我不熟悉DirectoryInfo对象,但使用文件系统对象,您可以找到使用以下命令修改的最后一个文件。示例子例程仅说明了如何调用FindLastModified函数

要使用该代码,您需要设置对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
函数FindLastModified()作为字符串
将fso设置为Scripting.FileSystemObject
将myFile设置为脚本.File
将myFiles设置为脚本.Files
标注日期
将sFilePathName设置为字符串
Set fso=新文件系统对象
设置myFiles=fso.GetFolder(“\\nlamvfs00065\homes\nlkpec”).Files
对于myFiles中的每个myFile
如果dteDate
一种方法是将文件名读入数组,然后比较FileDateTime(“path_to_file”)的结果;如果大于当前值,则将新的filedatetime设置为当前值。嗨,格雷厄姆,谢谢你的回答。但是,在PowerPoint Visual Basic编辑器中,我在第二行“Dim fso As Scripting.FileSystemObject”处遇到一个编译错误,该行的内容为“用户定义的类型未定义”。您确定脚本可以在PowerPoint宏中运行吗?(我见过其他答案的示例,这些答案在Visual Basic中有效,但在PowerPoint宏中无效)。嗨,khpeek,您收到的错误消息似乎是因为您没有microsoft脚本运行时的引用集。要设置引用,需要打开PowerPoint Visual Basic编辑器,请选择“工具”菜单,然后选择“引用”。这将显示项目可以使用的引用列表,向下滚动到microsoft脚本运行时,然后选中旁边的框并单击“确定”。代码应该可以运行。@khpeek可能应该在最后一条注释中包含@char,jsut出现在这里,以便您得到响应。再次感谢您的注释。确实,我没有仔细阅读您的答案,也没有设置对Microsoft脚本运行时的引用。设置引用后,该函数就像一个符咒一样工作。