VBS файл не печатается - PullRequest
0 голосов
/ 17 января 2020

Я новичок в VBS и пытаюсь создать сценарий, который сортирует некоторые файлы в папке и, если выполняются условия, должен вывести MsgBox, а также распечатать файл. Часть MsgBox работает, но функция печати не работает. Спасибо за любые рекомендации.

Option Explicit
Dim today_date, path
today_date = Date
path = "C:\Users\MyComputer\Desktop\FORMS"
Call GetRecentFile(path)


Function GetRecentFile(specify_path)
  Dim fso, file, my_counter
  my_counter = 0
  Set fso = CreateObject("scripting.FileSystemObject")
  For Each file In fso.GetFolder(specify_path).Files
      If CDate(FormatDateTime(file.DateLAstModified, vbShortDate)) = Date Then
         file.InvokeVerbEx ("Print")
         my_counter = my_counter + 1

      End If
  Next

  If my_counter = 1 Then
     MsgBox "There is a new  file in the folder: " & path, 0, "ATTENTION !"
  ElseIf my_counter > 1 Then
     MsgBox "There are " & my_counter & "file in the folder: " & path, 0, "ATTENTION !"
  Else: MsgBox "There are no new files as of " & Now, 0, "NOTIFICATION"
  End If    


End Function

Ответы [ 2 ]

1 голос
/ 17 января 2020

InvokeVerbEx - это метод объекта ShellFolderItem: https://docs.microsoft.com/en-us/windows/win32/shell/shellfolderitem-object

В вашем примере сценария переменная file представляет собой просто объект File (полученный через Scripting.FileSystemObject), а не ShellFolderItem объект.

Один из способов получения ShellFolderItem объекта - использовать Shell.Application, затем вызвать метод NameSpace с использованием текущей папки, а затем вызвать его ParseName метод с использованием имени файла.

Например, попробуйте заменить строку 14 file.InvokeVerbEx ("Print") на:

    With CreateObject("Shell.Application")
        With .NameSpace(specify_path)
            With .ParseName(file.Name)
                .InvokeVerbEx("Print")
            End With
        End With
    End With

Надеюсь, это поможет.

0 голосов
/ 17 января 2020

Я использовал файл wsShell.Run, чтобы открыть блокнот и позволить конечному пользователю распечатать; потому что файл должен был быть напечатан в альбомном режиме, и я уверен, что в Notepad была команда sendkeys.

Option Explicit
Dim today_date, path
today_date = Date
path = "C:\Users\MyComputer\Desktop\FORMS"
Call GetRecentFile(path)

Function GetRecentFile(specify_path)
  Dim fso, file, my_counter,wsShell
  my_counter = 0
  Set wsShell = Wscript.CreateObject("WScript.shell")
  Set fso = CreateObject("scripting.FileSystemObject")
  For Each file In fso.GetFolder(specify_path).Files
      If CDate(FormatDateTime(file.DateLAstModified, vbShortDate)) = Date Then
         my_counter = my_counter + 1
         wShell.Run File

      End If
  Next

  If my_counter = 1 Then
     MsgBox "There is a new  file in the folder: " & path, 0, "ATTENTION !"
  ElseIf my_counter > 1 Then

    MsgBox "There are " & my_counter & "file in the folder: " & path, 0, "ATTENTION !"

  Else: MsgBox "There are no new files as of " & Now, 0, "NOTIFICATION"

  End If    


End Function
...