VBS для открытия файла по части имени запускается на сетевом диске, но не локально - PullRequest
0 голосов
/ 27 марта 2020

Как дела?

У меня есть VBS, как показано ниже, который обычно работает с файлами, которые находятся на сетевых дисках, но не работает, когда файл находится на моем p c.

Set WshShell = CreateObject("WScript.Shell")
strCurDir = WshShell.CurrentDirectory

Set objExcel = CreateObject("Excel.Application")

with objExcel
    .AskToUpdateLinks = False
    .DisplayAlerts = False
    .visible = True
end with

Set objWorkbook = objExcel.Workbooks.Open(strCurDir & "\4_?????.xlsb")

'Save the workbook
objWorkbook.Save

'close the workbook
objWorkbook.Close

with objExcel
    .AskToUpdateLinks = True
    .DisplayAlerts = True
    .visible = True
end with

'exit the excel program
objExcel.Quit

'release objects
Set objExcel = Nothing
Set objWorkbook = Nothing

Где "?????" это отметка времени. В этом случае я знаю, что файл начинается с «4_» и имеет расширение «.xlsb», а моя метка времени имеет длину 5 символов. Вскоре "?????" Я имел обыкновение «избегать» эту отметку времени, которая постоянно меняется.

Примечание: я сделал тест, удалив «?????» и поставить метку времени, которая сегодня, и она работает на моей машине. Так что по какой-то причине мой компьютер не распознает "?????" pattern.

Может кто-нибудь помочь мне выяснить, почему этот скрипт не работает для локальных файлов?

Спасибо !!!

1 Ответ

1 голос
/ 30 марта 2020

(Excel) Workbooks.Open ожидает путь к файлу, а не шаблон. Самый простой способ получить то, что вы хотите, это получить список файлов в папке и проверить каждое имя, если оно соответствует вашему шаблону, например:

Set fs = CreateObject("Scripting.FileSystemObject")
Set dir = fs.GetFolder(strCurDir)
Set ff = dir.Files
For Each f in ff
    if left(f.Name,2)="4_" and right(f.Name,5)=".xlsb" then
           Set objWorkbook = objExcel.Workbooks.Open(f.Path) 
           ...
    end if 
Next

В качестве альтернативы, вы можете использовать regex .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...