2012-02-20 3 views
0

Я новичок в vbscript. Я получаю ошибку«Декларация ожидается» в vbscript

декларации ожидается в get_html

В нижней части моего кода. Я действительно пытаюсь объявить значение (которое является URL-адресом) для переменной get_html. Как я могу это решить?

Module Module1 

Sub Main() 

End Sub 
Sub get_html(ByVal up_http, ByVal down_http) 
    Dim xmlhttp : xmlhttp = CreateObject("msxml2.xmlhttp.3.0") 
    xmlhttp.open("get", up_http, False) 
    xmlhttp.send() 

    Dim fso : fso = CreateObject("scripting.filesystemobject") 

    Dim newfile : newfile = fso.createtextfile(down_http, True) 
    newfile.write(xmlhttp.responseText) 

    newfile.close() 

    newfile = Nothing 
    xmlhttp = Nothing 

End Sub 
get_html _"http://www.somwwebsite.com", _"c:\downloads\website.html" 

End Module 

ответ

4

Существуют некоторые синтаксические ошибки.

  • Утверждение модуля не является частью VBScript.
  • Подчеркивания могут привести к неожиданным результатам. См http://technet.microsoft.com/en-us/library/ee198844.aspx (поиск слова underscore на странице)
  • Вы не можете использовать круглые скобки при вызове Sub (например xmlhttp.open является суб, ничего не возвращает). У вас есть два основных варианта вызова подпрограммы. sub_proc param1, param2 или Call sub_proc(param1, param2)
  • Операции присваивания '=' недостаточны для объектов. Вы должны использовать Set заявление. Он присваивает объектные ссылки переменным .

Ответ может быть возвращен как закодированный utf-8. Но, однако, FSO не находится в мире с utf-8. Другой вариант - написать ответ как unicode (передавая True в качестве третьего параметра в CreateTextFile) , но размер вывода будет больше, чем должно быть. Поэтому я бы предпочел использовать объект Stream.
Я пересмотрел ваш код. Пожалуйста примите к сведению.

'Requeired Constants 
Const adSaveCreateNotExist = 1 'only creates if not exists 
Const adSaveCreateOverWrite = 2 'overwrites or creates if not exists 
Const adTypeBinary = 1 

Sub get_html(ByVal up_http, ByVal down_http) 
    Dim xmlhttp, varBody 
    Set xmlhttp = CreateObject("msxml2.xmlhttp.3.0") 
     xmlhttp.open "GET", up_http, False 
     xmlhttp.send 
     varBody = xmlhttp.responseBody 
    Set xmlhttp = Nothing 
    Dim str 
    Set str = CreateObject("Adodb.Stream") 
     str.Type = adTypeBinary 
     str.Open 
     str.Write varBody 
     str.SaveToFile down_http, adSaveCreateOverWrite 
     str.Close 
    Set str = Nothing 
End Sub 

get_html "http://stackoverflow.com", "c:\downloads\website.html" 
+0

Я получаю эту ошибку, не могу использовать круглые скобки при вызове Sub, что я делаю, чтобы исправить это, PLS help i am a beginner – user1086978

+0

'code' Sub_proc get_html (ByVal up_http, ByVal down_http) это так ? – user1086978

+0

Это просто «вызов вспомогательного» синтаксического образца, а 'sub_proc' - только примерное суб-имя. –

1

Вы, вероятно, хотите, чтобы переместить вызов get_html быть вызов из вашего Main подпрограммы (Sub Main()). Например:

Sub Main() 
    get_html _"http://www.somwwebsite.com", _"c:\downloads\website.html" 
End Sub 

AFAIK, вы не можете совершать вызовы функций непосредственно внутри модуля.

+0

я получаю эту ошибку: Аргумент не определен для параметра 'down_htttp общественной Sub get_html (up_http As Object, down_http As Object). после изменения кода, как вы сказали. Спасибо за вашу помощь – user1086978

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