Страницы: 1
RSS
Вызов telnet через макрос VBA
 
Добрый день, специалисты VBA
Есть вопрос, который хочется автоматизировать через VBA.
Ниже скрипт VBS, который открывает telnet, заходит на коммутатор по IP и сбрасывает ошибки, данные по IP берет построчно из текстового файла DATA.txt (который должен находится в директории с исходным файлом VBS)

Код VBS
Код
Dim strSourceFile
Dim oShell
Dim objFSO
Dim strLine
Dim TimeSleep
Set oShell = wscript.CreateObject("WScript.Shell")
oShell.Run "telnet.exe"
TimeSleep = 500
wscript.Sleep 2000
strSourceFile = "DATA.txt"
With wscript.CreateObject("Scripting.FileSystemObject")
If .FileExists(strSourceFile) Then
    With .OpenTextFile(strSourceFile)
        Do Until .AtEndOfStream
            strLine = .ReadLine()

oShell.SendKeys "o " & strLine
oShell.SendKeys "{Enter}"
wscript.Sleep TimeSleep

oShell.SendKeys "admin"
oShell.SendKeys "{Enter}"
wscript.Sleep TimeSleep

oShell.SendKeys "admin"
oShell.SendKeys "{Enter}"
wscript.Sleep TimeSleep

oShell.SendKeys "^(S)"
wscript.Sleep TimeSleep

****

oShell.SendKeys "{F}"
oShell.SendKeys "{Enter}"
wscript.Sleep TimeSleep

            Loop
        .Close
    End With
Else
    wscript.echo "Can't find [" & strSourceFile & "]."
    wscript.Quit 1
End If
oShell.SendKeys "{Q}"
oShell.SendKeys "{Enter}"
End With
wscript.echo "Выполнено"
Хочется, чтобы этот код вызывался из EXCEL, а данные брал из таблицы, типо:
Код
Application.InputBox(Prompt:="Укажите диапазон IP адресов для Сброса Alarms:", Type:=8)
Изменено: slesarok - 11.09.2018 09:43:03
 
Можно и без SendKeys, работать будет стабильнее
https://excelvba.ru/code/tools/Telnet

Цитата
Хочется, чтобы этот код вызывался из EXCEL
что конкретно не получается?
 
используйте если в тел нет можна послать несколько через ";"''
Код
'Вариант 1
Dim rng as Range
Dim r as Range
Dim str$

   set rng=Application.InputBox(Prompt:="Укажите диапазон IP адресов для Сброса Alarms:", Type:=8)
   for each r in rng
      if r.value<>"" then str$=str$ & ";" & r.value
   next
'.....
'ваш код
'.....
oShell.SendKeys str$
wscript.Sleep TimeSleep

'Вариант 2
Dim rng as Range
Dim r as Range
Dim str$

   set rng=Application.InputBox(Prompt:="Укажите диапазон IP адресов для Сброса Alarms:", Type:=8)
   for each r in rng
      if r.value<>"" then 
         oShell.SendKeys r.value
         wscript.Sleep TimeSleep
      end if
   next
'.....
'ваш код
'.....

 
Я может немного не полностью выразил вопрос)
То есть, сам скрипт VBS, он как отдельный файл у меня (Rug_ClearAlarms.vbs). А вызывать этот скирпт есть ли возможность из самого EXCELя (то есть сам код прописать в Модуле или где-то еще, как функцию и тд - я не силен), а не вызывать его типо:
Call Shell('Wscript.exe C:Rug_ClearAlarms.vbs', vbNormalFocus), чтобы не было привязки к месту расположения файла. Чтобы весь код, что VBA  и VBS.
Как правильно записать VBS
Function или Sub
Как его в коде вызвать?

Вот я навоял, ругается cnhjre 13 на объект
Код
Set oShell = wscript.CreateObject("WScript.Shell")
Eror 404
Код
Sub Clear_Alarms()
Dim rng As Range
Dim r As Range
Dim str$
Dim strSourceFile
Set rng = Application.InputBox(Prompt:="Укажите диапазон IP адресов для Сброса Alarms:", Type:=8)
    If rng Is Nothing Then Exit Sub
   For Each r In rng
      If r.Value <> "" Then
        strSourceFile = r
Dim oShell As Object
Dim TimeSleep
Set oShell = wscript.CreateObject("WScript.Shell")
oShell.Run "telnet.exe"
TimeSleep = 500
wscript.Sleep 2000

oShell.SendKeys "o " & strSourceFile
oShell.SendKeys "{Enter}"
wscript.Sleep TimeSleep

oShell.SendKeys "admin"
oShell.SendKeys "{Enter}"
wscript.Sleep TimeSleep

oShell.SendKeys "admin"
oShell.SendKeys "{Enter}"
wscript.Sleep TimeSleep

oShell.SendKeys "clearalarms"
oShell.SendKeys "{Enter}"
wscript.Sleep TimeSleep

oShell.SendKeys "exit"
oShell.SendKeys "{Enter}"
      End If
   Next
End Sub

Как-то так
Изменено: slesarok - 11.09.2018 12:01:23
 
slesarok, навояли конечно кашу, но пробуйте так:
Код
Set oShell = CreateObject("WScript.Shell")
Изменено: ivanok_v2 - 11.09.2018 12:15:51
 
Пробовал, после этого ругаться начинает на запуск telneta
oShell.Run "telnet.exe"

Может принцип или подход совершенно неправильный у меня?
 
чтобы telnet.exe таким способом запустился,
он должен запускаться и через Пуск - Выполнить (вводим telnet.exe и нажимаем ок)

попробуйте вручную запустить, - на новых системах он вроде так не запускается
(на win XP это работало. сейчас либо этого файла нет в системе, либо надо путь указывать к папке)
 
Игорь,  Просто по умолчанию Telnet не ставится, но доступен для установки, просто галочку поставить.

slesarok, Нет ничего , чтоб можно было сделать через VBS и не возможно через VBA, то еcть можно  просто весь код перенести в Excel, при этом то что #2 советует - очень полезно. ох как не люблю я SENDKEY  в консоль управления чем либо. Результат предсказуем до поры до времени,  Можно по иному, чтоб VBS читал XLS файл и использовал данные в коде. Ну и совсем бред, перебор оставить в Excel, а VBS подправить и вызывать из Excel, но с аргументами.
По вопросам из тем форума, личку не читаю.
 
Господа, про вариант 2, не спорю, надо в нём разобраться, он может оказаться гораздо эффективнее (но на это мне надо время, которого сейчас нет).
БВМ - telnet в Винде у меня включен, сам VBS макрос работает, я его уже тестировал на оборудовании. Просто хотел его внести в файл Excel, где ещё одна наработка есть (ping оборудования), так сказать объединить рутинные операции.
Может кто проверит сам файл, что неправильно работает с SENDKEY? (module Clear_Alarms)
 
Цитата
slesarok написал:
БВМ - telnet в Винде у меня включен,
Эх как медведю имя исковеркали :-) , но не суть про Telnet я  писал для Игорь  . А вот касаемо запуска и правда через шелл не запускается.
По вопросам из тем форума, личку не читаю.
Страницы: 1
Наверх