2017-02-12 2 views
1

Я пытаюсь запустить следующий код в VBScript, но он не компилирует последнее утверждение. Это потому, что VBScript не разрешает именованные аргументы?Поддерживает ли VBScript именованные аргументы в вызовах функций?

Filename_Argument = WScript.Arguments(0) 
Set objExcel = CreateObject("Excel.Application") 
objExcel.Visible = True 
Set objWorkbook = objExcel.Workbooks.Add() 
Workbooks.OpenText Filename:=Filename_Argument, Origin _ 
     :=xlMSDOS, StartRow:=1, DataType:=xlDelimited, TextQualifier:= _ 
     xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=False, Semicolon:=False _ 
     , Comma:=False, Space:=False, Other:=True, OtherChar:="|", FieldInfo _ 
     :=Array(Array(1, 1), Array(2, 1), Array(3, 1), Array(4, 1), Array(5, 1), Array(6, 1), _ 
     Array(7, 1), Array(8, 1)), TrailingMinusNumbers:=True 

ответ

5

VBScript не поддерживает именованные аргументы процедур и функций. Вы должны изменить список аргументов для позиционного:

Workbooks.OpenText Filename_Argument, xlMSDOS, ... 

VBScript также не признает констант Excel (как xlMSDOS), так что вы должны искать их и заменить их с числовыми значениями:

Workbooks.OpenText Filename_Argument, 3, ... 

И вы должны использовать ссылки явного объекта:

objExcel.Workbooks.OpenText Filename_Argument, 3, ... 

запись макросов Excel помещает именованные аргументы в позиционный порядок, так что вы можете просто удалить параметр п Эймс. Необязательные параметры, которые вы не хотите указывать, могут быть опущены, например:

x = Function(Var1, , Var3) 
'    ^
'     `- omitted optional 2nd parameter 
+0

В случае с downvoter, если вы считаете, что это плохой ответ, то почему бы вам не добавить ответ самостоятельно? – CJ7

+0

... или, по крайней мере, объясните, что вы считаете неправильным в отношении существенно правильного ответа. –

+2

Я предпочитаю сохранять именованные константы и объявлять их с помощью 'Const', так что это будет' Const xlMSDOS = 3', а не использовать литеральные числовые значения. – Lankymart

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