2013-09-01 2 views
2

Я часто делаю скриншоты окна и сохраняю их в папку, а затем добавляю их в презентации PowerPoint, обрезанные, измененные и выровненные определенным образом. Чтобы сохранить щелчки мыши и сделать процесс воспроизводимым, я хотел бы автоматизировать его с помощью макроса Visual Basic в PowerPoint.Gettign самый последний файл в каталоге в 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". Тем не менее, мне бы хотелось, чтобы это был самый последний png-файл в каталоге «\ nlamvfs00065 \ homes \ nlkpec», так что мне не нужно переименовывать свои скриншоты в «newpic.png» каждый раз, когда я применяю макрос ,

Я нашел пример, который читает подобное следующему:

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

Однако, если я введу эту строку в моем Visual Basic редактор запускается из PowerPoint 2007, я получаю сообщение об ошибке

"Compile error: Expected: end of statement"

с обозначением "=".

Есть ли у кого-нибудь предложения, как я могу сгенерировать «myFile» для передачи в «AddPicture» как самый последний png-файл в указанном каталоге? Заранее спасибо.

+0

Один из подходов - прочитать имена файлов в массиве, а затем сравнить результат с FileDateTime ("path_to_file"); если он больше текущего, сделайте новое filedatetime текущим. –

ответ

3

Чтобы использовать объект, который необходимо измерить, а затем установите его, ваш код, похоже, пытается сделать это одновременно.

Я не знаком с объектом DirectoryInfo, но используя объект файловой системы, вы можете найти последний файл, модифицированный с использованием следующего. Примерная подпрограмма просто иллюстрирует, как вызвать функцию FindLastModifed.

Для использования кода вам необходимо установить ссылку на runtime.

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 
+0

Привет, Грэм, спасибо за ваш ответ. Однако в редакторе PowerPoint Visual Basic я получаю ошибку компиляции во второй строке «Dim fso As Scripting.FileSystemObject», которая гласит «Определенный пользователем тип не определен». Вы уверены, что скрипт будет работать в макросе PowerPoint? (Я видел примеры других ответов, которые работают в Visual Basic, но не в макросе PowerPoint). –

+1

Привет, khpeek, сообщение об ошибке, которое вы получаете, похоже, связано с тем, что у вас нет набора ссылок для среды выполнения сценариев microsoft. Чтобы установить ссылку, вам нужно открыть редактор основных средств PowerPoint Visual Basic, выберите меню инструментов и выберите ссылки. Это вызовет список ссылок, которые может использовать проект, прокрутите вниз до среды выполнения сценариев microsoft, а затем установите флажок рядом с ним и нажмите «ОК». Затем код должен работать. –

+0

@khpeek Должно быть, в последнем комментарии, возможно, включен символ @, jsut, который стоит здесь, чтобы вы получили ответ. –

Смежные вопросы