Vbs ошибка 800a0414

To complete what’s been said before:

When Call keyword is used to call a procedure (i.e. sub or function) the arguments must be enclosed in parentheses, except when the procedure has no arguments in which case the parentheses are optional. For example all the statements:

Call test()
Call test
Call test(1,2)

are valid, but not this one:

Call test 1

When calling a procedure without using the Call keyword, the parentheses can only be used when either the procedure has zero or one argument or the procedure has a return value (i.e. is a function) and its value is used in the same statement. For example all the statements:

test()
test(1)
test(1,2)
a = test
a = test(1,2)
a = test(test(1,2),2)

are valid, except the third one which has more than one argument. In case it’s not clear, the inner call of «test» in the last statement is valid because its return value is used as an argument to another call.

Note that whenever parentheses is used in this text, it is meant to imply the possible comma-separated values as well.

I am fairly new to vbs and i am writing a script that checks what version of a program is installed and update it if necessary. I have the updates in a folder and it checks (or should) the kbnumber and the title to make sure its the correct update.

I keep getting error code 800a0414 on the following line, and i have looked everywhere and tried many ways of placing the parentheses, taking them away or using call.

Else InStr(1, update.title, "Internet Explorer 8", vbtextcompare) > 0 Then
        Installed = installHotFix(ie9RegExp)

Also here if you could look at this and help me with it, I can’t tell if it will work since the compiler gets stuck on the above issue. I dont want to flood the site with another question once the 800a0414 is resolved. I thank you in advance.

Set ie7RegExp = "^IE7.*strKBNumber.*"
Set ie8RegExp = "^IE8.*strKBNumber.*"
Set ie9RegExp = "^IE9.*strKBNumber.*"

If InStr(1, update.title, "Internet Explorer", vbtextcompare) > 0 Then
    If InStr(1, update.title, "Internet Explorer 6", vbtextcompare) > 0 Then
            Installed = installHotFix(ie7RegExp)
            myRegExp = ie7RegExp

    ElseIf InStr(1, update.title, "Internet Explorer 7", vbtextcompare) > 0 Then
            Installed = installHotFix(ie8RegExp)
            myRegExp = ie8RegExp

    Else InStr(1, update.title, "Internet Explorer 8", vbtextcompare) > 0 Then
            Installed = installHotFix(ie9RegExp)
            myRegExp = ie9RegExp

Function installKB(strKBNumber)

Dim myRegExp

myRegExp.IgnoreCase = True
myRegExp.Pattern = strKBNumber
installHotFix(myRegExp)

End Function

Function installHotFix(objRegExp)

Dim result
Dim hotfixDir

installKB = false

For each hotfixdir in arrHotfixlocations
    if objFSO.FolderExists(hotfixDir) Then
        result = SearchForHotfixes(objRegExp, hotfixDir)
        if result = True Then
            installKB = True
        End If
    End If
Next
End Function

Function SearchForHotfixes(objRegExp, strFolderName)
Dim file
Dim subFolder
dim result

SearchForHotfixes = false

For Each file in objFSO.GetFolder(strFolderName).Files
   If objRegExp.Test(file.name) Then
        installUpdate(file)
        SearchForHotfixes = true
   End If
Next

For Each subFolder in objFSO.GetFolder(strFolderName).subFolders
    result = SearchForHotfixes(objRegExp, subFolder)
    If result = true then
        SearchForHotfixes = true
    End If
Next

End Function

This is just the parts i have changed, before i added the above the old script worked. So if you require more code or a better explanation to help me please ask, but i believe this is all.

Jeremy

1

06.09.2007, 13:31. Показов 7707. Ответов 8

Метки нет (Все метки)


Студворк — интернет-сервис помощи студентам

Есть процедура:

Visual Basic
1
2
3
Sub Show(sWS, sVend)
...
End Sub

Так вот, когда я ее вызываю

Visual Basic
1
Show(sW,sV)

вылетает сообщение об ошибке:
>Cannot use parentheses when calling a Sub

В чем ошибка?

0 / 0 / 0

Регистрация: 22.06.2007

Сообщений: 176

06.09.2007, 14:00

2

А где вызываешь … в форме?
А Show формы не перебывает ?



0



0 / 0 / 0

Регистрация: 22.06.2007

Сообщений: 176

06.09.2007, 14:04

3

Sorry!!!
БЛИН!
Ты шо с Делфи свалился? Убери круглые скобки!



0



Jeremy

06.09.2007, 17:33

4

я свалился не только с Delphi, но еще и с C++ ;-)
VB я почти не знаю, вот и тыкаюсь как слепой котенок

я попробовал вызвать эту процедуру используя Call и все встало на свои места…

Вот ты говоришь:’Убери круглые скобки’…А как процедура поймет, что перечисленные переменные к ней прилагаются или я чего-то не понимаю?

2 / 2 / 1

Регистрация: 19.07.2007

Сообщений: 737

06.09.2007, 18:32

5

show param1, param2
Это стандарт вызова для VB процедур.

Если Show — функция, то:
call show(param1,param2)
но можно и так:
show param1, param2
или обычно так:
ret=show(param1,param2)

Для передачи указателей или значений нужно объявлять так, например:
sub Show(byref param1 as object, byval param1 as string)

end sub



0



ex

06.09.2007, 19:19

6

+ ко всему сказанному — текст ошибки сам за себя говорит )
В крайнем случае с помощью словаря…

Славик

07.09.2007, 16:11

7

Для подобного случая рекомендую иметь переводчика,
например:WebTranSite (или другой).
В сообщении говорится (буквально) о недопустимости круглых скобок)

Jeremy

09.09.2007, 10:09

8

Спасибо всем за помощь
С английским у меня все в порядке, но я никак не думал, что передача параметров может происходить таким образом %)

0 / 0 / 0

Регистрация: 26.03.2007

Сообщений: 238

09.09.2007, 11:41

9

Использовать скобки можно, только перед вызовом надо указать команду СALL. Типа:
CALL subname(param1,param2,…)



0



Вопрос:

Я получаю ошибку 800A0414 в строках 7 и 12 этого script:

Module Module1

Dim p

Sub Main()
CreateObject("Wscript.Shell").Run("program.bat", 0, True)

p = Process.GetProcessesByName("program")
If p.Count > 0 Then
WScript.Sleep(300000)
Else
CreateObject("Wscript.Shell").Run("program clean up.bat", 0, True)
End If

End Sub

Private Function WScript() As Object
Throw New NotImplementedException
End Function

End Module

Я пытаюсь запустить пакетный пакет script, который запускает процесс, а затем дождитесь завершения процесса, затем запустим еще одну партию script. Я также не хочу показывать какие-либо командные поля. Если их проще, пожалуйста, дайте мне знать.

Спасибо за помощь

Лучший ответ:

Когда вы вставляете список аргументов процедуры в круглые скобки, вы должны использовать ключевое слово Call:

Call CreateObject("WScript.Shell").Run("program.bat", 0, True)

Если вы опускаете ключевое слово Call, вы также должны отбрасывать круглые скобки:

CreateObject("WScript.Shell").Run "program.bat", 0, True

Ответ №1

Чтобы завершить сказанное ранее:

При использовании Call ключевого слова для вызова процедуры (то есть суб или функции) аргументы должны быть заключены в круглые скобки, за исключением случаев, когда процедура не имеет аргументов, и в этом случае скобки являются необязательными. Например, все утверждения:

Call test()
Call test
Call test(1,2)

действительны, но не следующие:

Call test 1

При вызове процедуры без использования ключевого слова Call круглые скобки могут использоваться только в том случае, если процедура имеет нулевой или один аргумент, или процедура имеет возвращаемое значение (т.е. является функцией) и ее значение используется в одном выражении. Например, все утверждения:

test()
test(1)
test(1,2)
a = test
a = test(1,2)
a = test(test(1,2),2)

действительны, кроме третьего, который имеет более одного аргумента. Если это не ясно, внутренний вызов “теста” в последнем утверждении действителен, потому что его возвращаемое значение используется в качестве аргумента для другого вызова.

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

Ответ №2

Мне кажется, что это VB.NET, а не код VBScript.
У вас Функция оболочки в VB.NET(и другие методы).

В любом случае Run возвращает код ошибки, возвращаемый программой, и если вы
хранилище, которое приводит к переменной, вы можете использовать круглые скобки в этом случае.

Dim lResult As Long
lResult = CreateObject("Wscript.Shell").Run("program.bat", 0, True)

На остальное ответил @Helen.

vbscript

I am getting the 800A0414 error in lines 7 and 12 of this script:

Module Module1

  Dim p

    Sub Main()
        CreateObject("Wscript.Shell").Run("program.bat", 0, True)

        p = Process.GetProcessesByName("program")
        If p.Count > 0 Then
            WScript.Sleep(300000)
        Else
            CreateObject("Wscript.Shell").Run("program clean up.bat", 0, True)
        End If

    End Sub

    Private Function WScript() As Object
        Throw New NotImplementedException
    End Function

End Module

I am trying to run a batch script, that starts a process, then wait until the process terminates, then run another batch script. I also do not want any command boxes being shown. If their is a easier way please let me know.

Thanks for your help

Related Question

    Понравилась статья? Поделить с друзьями:
  • Vbs ошибка 800a0408
  • Vba ошибка 450
  • Vampire the masquerade bloodlines ошибка engine error
  • Valheim не запускается ошибка unity
  • Val57 код ошибки