2013-11-27 2 views
1

У меня есть VBS код, который я использую, чтобы применить Excel форматирования таблицы:применять VBS в файл в текущем каталоге

Set xlObj = CreateObject("Excel.Application") 
Set xlFile = xlObj.WorkBooks.Open("C:\Documents and Settings\user\forms.xlsx") 
xlObj.Application.DisplayAlerts = False 
For Each Worksheet In xlFile.Worksheets 
    dPriorWorkday = xlObj.Application.WorksheetFunction.WorkDay(Now, -1) 
    Worksheet.Name = "Forms received " & Year(dPriorWorkday) & "-" & Right("0" & Month(dPriorWorkday),2) & "-" & Right("0" & Day(dPriorWorkday),2) 
With Worksheet.Cells.Font 
    .Name = "Arial" 
    .Size = 8 
End With 
Next 
xlFile.Close True 
xlObj.Quit 

Я использую .bat файл для запуска этого VBS на .xlsx листе, с все 3 файла находятся в одном каталоге.

Что я пытаюсь сделать, это изменить VBS, чтобы применить форматирование к файлу .xlsx, который находится в том же каталоге, что и файл .bat и .vbs, поэтому я могу удалить прямой путь к файлу «C : \ Documents и Settings \ пользователь \»

Я попытался:

Workbooks.Open Filename:=ThisWorkbook.Path & "\forms.xlsx" 

, но он не работает, я предполагаю, потому что для .vbs вызывается из самой книги.

Есть ли что-то подобное, которое я могу использовать для применения .vbs к файлу в том же каталоге, что и .vbs, без использования полного пути к файлу?

ответ

4

Что я пытаюсь сделать, это изменить VBS, чтобы применить форматирование к файлу .xlsx, который находится в том же каталоге, что и файл .bat и .vbs, поэтому я могу удалить прямой путь к файлу " C: \ Documents и Settings \ пользователь \»

Если все файлы находятся в том же каталоге, а затем использовать этот

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

Set xlObj = CreateObject("Excel.Application") 
Set xlFile = xlObj.Workbooks.Open(strCurDir & "\forms.xlsx") 

Подробнее о CurrentDirectoyHERE

EDIT:

ответ Ekkehard.Horner является более подходящим и может справляться с ситуациями, когда УВА вызывается из другого каталога. В этом случае CurrentDirectoy, очевидно, не даст ожидаемого пути.

+0

Это прекрасно работает. Спасибо. – kmfdm

+1

@kmfdm: Возможно, вам захочется пересмотреть принятие более подходящего ответа :) –

2

Если вы хотите надежно выбрать «тот же каталог, что и файл .bat и .vbs» (независимо от того, какая папка вы вызываете из сценария или (accidential) в .CurrentDirectory), вы должны использовать WScript.ScriptFullName :

Option Explicit 
Dim goFS : Set goFS = CreateObject("Scripting.FileSystemObject") 
Dim goWS : Set goWS = CreateObject("WScript.Shell") 
Wscript.Echo "CD", goWS.CurrentDirectory 
Wscript.Echo "FS", goFS.GetAbsolutePathName(".") 
goWS.CurrentDirectory = "c:\temp" 
Wscript.Echo "CD", goWS.CurrentDirectory 
Wscript.Echo "FS", goFS.GetAbsolutePathName(".") 
Wscript.Echo "SD", goFS.GetParentFolderName(WScript.ScriptFullName) 

выход:

DNV35 C:\Documents and Settings\eh 
cscript 31.vbs 
CD C:\Documents and Settings\eh 
FS C:\Documents and Settings\eh 
CD c:\temp 
FS C:\Temp 
SD C:\Documents and Settings\eh 

DNV35 C:\Documents and Settings\eh 
cd .. 

DNV35 C:\Documents and Settings 
cscript eh\31.vbs 
CD C:\Documents and Settings 
FS C:\Documents and Settings 
CD c:\temp 
FS C:\Temp 
SD C:\Documents and Settings\eh 
+0

+1 для a) понимания того, что OP заявляет, что он хочет, и b) для выкапывания вызовов FSO, необходимых для получения правильных путей. Хотя я ненавижу + 1ing 14k'ers;) – TheBlastOne

+0

+ 1 Для лучшего решения :) –

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