Добрый день, специалисты 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)
используйте если в тел нет можна послать несколько через ";"''
Код
'Вариант 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
чтобы 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)