Меню

Ошибка предполагается наличие инструкции vbs

  • Remove From My Forums
  • Question

  • Доброго времени суток.
    В организации на 250+ машинах сетевые параметры адаптеров установлены статикой (sic), необходимо заставить брать их по DHCP. Нашел пару скриптов, наиболее подходящим показался VBS (с которым я совершенно не знаком), т.к.
    другой предполагает указание имени сетевого подключения (например, «Подключение по локальной сети»). Сам скрипт:
    WMIC Path Win32_NetworkAdapterConfiguration Where «IPEnabled = True» Call SetDNSServerSearchOrder 

    WMIC Path Win32_NetworkAdapterConfiguration Where «IPEnabled = True» Call EnableDHCP

    выдает: предполагается наличие окончания инструкции. строка1, символ 11.

    пробовал использовать bat такого вида: 

    netsh interface ip set address name=»Подключение по локальной сети» source=dhcp 

    netsh interface ip set dnsservers name=»Подключение по локальной сети» source=dhcp 

    ощутил проблемы с кодировкой, 1 раз он отработал, хотя отписал козябру, НО я не могу понять как, т.к. повторить я этого не могу, пробовал 1251, 866, 869 — без толку.

    Подскажите что-нибудь пожалуйста.

    • Edited by

      Friday, September 19, 2014 8:19 AM

Answers

  • Как я уже говорил с vbs не сталкивался, решение предложенное в той теме Aleksey.T

    выдает: строка 1, символ 1, несоответствие типа ‘Code’, код: 800A000D

    НО оказывается якобы vbs скрипт который я привел использует обычные команды wmic.exe, которые можно использовать в пакетном файле и это работает. Тема закрыта.

    • Marked as answer by
      Копылов Анатолий
      Friday, September 19, 2014 8:47 AM

Товарищи помогите кто знает советом решить следующую проблему.

Попытался в 1с использовать MSScriptControl, следующим образом:

Script=Новый COMОбъект(«MSScriptControl.ScriptControl»);

Script.Language=»vbscript»;

СтрокаСкрипта=»Private Declare Function URLDownloadToFile Lib «»urlmon.dll»» Alias «»URLDownloadToFileA»» (ByVal pCaller As Long, ByVal szURL As String, ByVal szFileName As String, ByVal dwReserved As Long, ByVal lpfnCB As Long) As Long

|Sub GetFile  

|Dim ret As Long  

|ret = URLDownloadToFile(0, «»http://www.mail.ru»», «»c:1.html»», 0, 0)  

|End Sub»;

Script.AddCode(СтрокаСкрипта);  

При выполнении последнего оператора выдается ошибка:

{Форма.Форма(93)}: Ошибка при вызове метода контекста (AddCode): Произошла исключительная ситуация (Ошибка компиляции Microsoft VBScript): Предполагается наличие окончания инструкции

Script.AddCode(СтрокаСкрипта);  

по причине:

Произошла исключительная ситуация (Ошибка компиляции Microsoft VBScript): Предполагается наличие окончания инструкции.

Этот же код написанный в екселе в качестве макроса прекрасно работает. Я так понимаю проблема в том, что я пытаюсь определить функцию URLDownloadToFile из библиотеки «urlmon.dll».

Не подскажите как правильно написать чтобы заработало?

 

eremeev23rus

Пользователь

Сообщений: 24
Регистрация: 07.09.2015

#1

15.09.2015 11:10:40

Добрый день.
Возникла потребность создать VBS файл.
Данныйц фал должен открывать одну книгу, затирить в ней данные в диапазоне [A2:Hn], затем открывать другой файл копировать данные в таком же диапазоне и заливать в первую книгу.
Затем выполнить 2 макроса.
Из VBS знаю только как открыть файл игнорируя ошибок и сохранить его. Подскажите каким способом это можно реализовать.

Код
Set ExcelApp = CreateObject("Excel.Application")
ExcelApp.Visible = false
ExcelApp.displayalerts = false
ExcelApp.Workbooks.Open "Путь к файлу"
ExcelApp.ActiveWorkbook.refreshall
ExcelApp.ActiveWorkbook.Save
ExcelApp.Workbooks.Close
Set ExcelAp = Nothing
 

JayBhagavan

Пользователь

Сообщений: 11833
Регистрация: 17.01.2014

ПОЛ: МУЖСКОЙ | Win10x64, MSO2019x64

eremeev23rus, здравия. Можно в ВБА написать этот макрос, отладить и после перенести в ВБС.

<#0>
Формула массива (ФМ) вводится Ctrl+Shift+Enter
Memento mori

 

JayBhagavan, Спасибо, а данный макрос необходимо преобразовывать?

 

JayBhagavan

Пользователь

Сообщений: 11833
Регистрация: 17.01.2014

ПОЛ: МУЖСКОЙ | Win10x64, MSO2019x64

eremeev23rus, а Вы попробуйте его так в ВБА запустить и узнаете. :)

<#0>
Формула массива (ФМ) вводится Ctrl+Shift+Enter
Memento mori

 

eremeev23rus

Пользователь

Сообщений: 24
Регистрация: 07.09.2015

#5

15.09.2015 11:29:20

JayBhagavan,

Код
Set ExcelApp = CreateObject("Excel.Application")
ExcelApp.Visible = false
ExcelApp.displayalerts = false
ExcelApp.Workbooks.Open "K:Исходник.xls"

iLastRow = Sheets("Консолидации общий").Cells(Rows.Count, 8).End(xlUp).Row
For i = 2 To iLastRow - 1
    a = LCase(Sheets("Консолидации общий").Cells(i, 1).Value)
    b = LCase(Sheets("Консолидации общий").Cells(i, 2).Value)
    c = LCase(Sheets("Консолидации общий").Cells(i, 3).Value)
    d = LCase(Sheets("Консолидации общий").Cells(i, 4).Value)
    e = LCase(Sheets("Консолидации общий").Cells(i, 5).Value)
    f = LCase(Sheets("Консолидации общий").Cells(i, 6).Value)
    g = LCase(Sheets("Консолидации общий").Cells(i, 7).Value)
    h = LCase(Sheets("Консолидации общий").Cells(i, 8).Value)
    For j = i + 1 To iLastRow
        a1 = LCase(Sheets("Консолидации общий").Cells(j, 1).Value)
        b1 = LCase(Sheets("Консолидации общий").Cells(j, 2).Value)
        c1 = LCase(Sheets("Консолидации общий").Cells(j, 3).Value)
        d1 = LCase(Sheets("Консолидации общий").Cells(j, 4).Value)
        e1 = LCase(Sheets("Консолидации общий").Cells(j, 5).Value)
        f1 = LCase(Sheets("Консолидации общий").Cells(j, 6).Value)
        g1 = LCase(Sheets("Консолидации общий").Cells(j, 7).Value)
        h1 = LCase(Sheets("Консолидации общий").Cells(j, 8).Value)
    If a = e1 And b = f1 And c = g1 And d = h1 And e = a1 And f = b1 And g = c1 And h = d1 Then
    Cells(j, 1) = a
    Cells(j, 2) = b
    Cells(j, 3) = c
    Cells(j, 4) = d
    Cells(j, 5) = e
    Cells(j, 6) = f
    Cells(j, 7) = g
    Cells(j, 8) = h
    End If
    Next j
Next i

ExcelApp.ActiveWorkbook.Save
ExcelApp.Workbooks.Close
Set ExcelAp = Nothing

Подскажите, пожалуйста, что не так я сформировал?

 

JayBhagavan

Пользователь

Сообщений: 11833
Регистрация: 17.01.2014

ПОЛ: МУЖСКОЙ | Win10x64, MSO2019x64

eremeev23rus, что не так я сходу не скажу. (у меня нет Вашего файла, с которым работает макрос) А что Вас не устраивает или на чём ошибка возникает, если она есть?
ПС Чтобы сократить текст кода используйте конструкцию With … End With для Sheets(«Консолидации общий»). И сравнение можно упростить, например:
1) через массивы, чтобы не создавать для каждой яч. переменную (это же брррррррр)
2) или формировать две строки с разделителем через Join и их сравнивать
Всё вышесказанное — имхо, которое может быть ошибочным, но это я бы попытался реализовать будь у меня такая потребность.

<#0>
Формула массива (ФМ) вводится Ctrl+Shift+Enter
Memento mori

 

JayBhagavan, при выполнении отображается ошибка: Предполагается наличие окончания инструкции, Код: 800A0401, ошибка компиляции.
Я предполагаю, что VBA код я неверно перенес.

 

Влад

Пользователь

Сообщений: 1189
Регистрация: 24.12.2012

Нет в ВБС такие понятий как «Sheets» и «Cells» — это объекты книги/листа, поэтому должна быть указана полная ссылка на них.

 

Влад, а можно пример? Для лучшего понимания.

 

Влад

Пользователь

Сообщений: 1189
Регистрация: 24.12.2012

#10

15.09.2015 12:04:12

Пример:

Код
....
Set wb = ExcelApp.Workbooks.Open("K:Исходник.xls")
....
iLastRow = wb.Sheets("Консолидации общий").Cells(Rows.Count, 8).End(xlUp).Row
 

Не удается сделать описаным методом. Может можно сделать, чтобы нажималась кнопка на листе в Excel?

 

Hugo

Пользователь

Сообщений: 23101
Регистрация: 22.12.2012

Rows.Count возможно тоже непонятно для vbs.
Я всегда указывал чьи это rows.

Изменено: Hugo15.09.2015 13:38:29

 

JayBhagavan

Пользователь

Сообщений: 11833
Регистрация: 17.01.2014

ПОЛ: МУЖСКОЙ | Win10x64, MSO2019x64

#13

15.09.2015 13:43:25

Скрытый текст

Изменено: JayBhagavan15.09.2015 14:09:42

<#0>
Формула массива (ФМ) вводится Ctrl+Shift+Enter
Memento mori

 

Hugo

Пользователь

Сообщений: 23101
Регистрация: 22.12.2012

Ну и для vbs первой строкой нужно написать
jjj_vbs

 

Hugo

Пользователь

Сообщений: 23101
Регистрация: 22.12.2012

Нашёл ещё нестыковку — в vbs нельзя писать
next переменная

 

JayBhagavan

Пользователь

Сообщений: 11833
Регистрация: 17.01.2014

ПОЛ: МУЖСКОЙ | Win10x64, MSO2019x64

#16

15.09.2015 13:55:51

Цитата
Hugo написал: в vbs нельзя писать next переменная

Исправил.

Цитата
Hugo написал: Ну и для vbs первой строкой нужно написать
jjj_vbs

То есть нужно убрать Sub, () и End Sub?

<#0>
Формула массива (ФМ) вводится Ctrl+Shift+Enter
Memento mori

 

Hugo

Пользователь

Сообщений: 23101
Регистрация: 22.12.2012

Ещё — xlUp нужно заменить на -4162

 

Hugo

Пользователь

Сообщений: 23101
Регистрация: 22.12.2012

#18

15.09.2015 14:00:43

Цитата
JayBhagavan написал:
То есть нужно убрать Sub, () и End Sub?

Да, или первой строкой вызывать этот sub

 

JayBhagavan

Пользователь

Сообщений: 11833
Регистрация: 17.01.2014

ПОЛ: МУЖСКОЙ | Win10x64, MSO2019x64

#19

15.09.2015 14:10:23

Hugo, благодарю за Ваши замечая. Вроде все учёл.

<#0>
Формула массива (ФМ) вводится Ctrl+Shift+Enter
Memento mori

Перейти к содержимому раздела

TechnologiCS

Форумы TechnologiCS

Вы не вошли. Пожалуйста, войдите или зарегистрируйтесь.

Дерево сообщений Активные темы Темы без ответов

Можно ли определить массив неявно

Страницы 1

Чтобы отправить ответ, вы должны войти или зарегистрироваться

#1 20 февраля 2012 15:50:35

  • snake
  • Участник
  • Неактивен
  • Откуда: Чебоксары Версия TCS 6.3.0.0
  • На форуме с 24 марта 2010
  • Сообщений: 103

Тема: Можно ли определить массив неявно

Добрый день!
Помогите, пожалуйста, разобраться в VBScript.
При объявлении массива (Dim/Redim)  было бы желательно использовать не явное число Dim Arr(8), а константу (жаль,переменную нельзя)
const kol=8
Dim Arr(kol)
Выдаётся ошибка «Предполагается наличие константы целого типа».
Попытка объявить Dim kol As Integer выдаёт сообщение «Предполагается наличие окончания инструкции».
Перепробовала много комбинаций.
В результате пока приходится объявлять массив, явно указывая число элементов.
Можно ли объявить массив и задать его размерность,  не указывая  явно число элементов.

#2 Ответ от Дмитрий Гамий 20 февраля 2012 16:32:52

  • Дмитрий Гамий
  • Дмитрий Гамий
  • Техподдержка
  • Неактивен
  • Откуда: г.Днипро, CSoft Украина
  • На форуме с 10 декабря 2008
  • Сообщений: 748

Re: Можно ли определить массив неявно

При объявлении массива (Dim/Redim)  было бы желательно использовать не явное число Dim Arr(8), а константу (жаль,переменную нельзя)

А почему бы не использовать динамический массив? Тогда бы ваш код выглядел бы так:

const kol=8
Dim Arr()

...
Redim Arr(kol)

Попытка объявить Dim kol As Integer выдаёт сообщение «Предполагается наличие окончания инструкции»

В VBScript определение типа не имеет смысла, так как здесь есть только один тип — вариантный (объектный) .

#3 Ответ от snake 20 февраля 2012 16:46:03

  • snake
  • Участник
  • Неактивен
  • Откуда: Чебоксары Версия TCS 6.3.0.0
  • На форуме с 24 марта 2010
  • Сообщений: 103

Re: Можно ли определить массив неявно

Спасибо! Работает.

Сообщения 3

Тему читают: 1 гость

Страницы 1

Чтобы отправить ответ, вы должны войти или зарегистрироваться

0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии

А вот еще интересные материалы:

  • Яшка сломя голову остановился исправьте ошибки
  • Ясность цели позволяет целеустремленно добиваться намеченного исправьте ошибки
  • Ясность цели позволяет целеустремленно добиваться намеченного где ошибка
  • Ошибка при активации windows 0x8007267c
  • Ошибка предполагается наличие идентификатора строки или числа