1795

Пингуем из Excel

Excel - это не только ВПР и дашборды, но и забавно, а иногда - бессмысленно и беспощадно.

На Youtube есть канал, где его автор творит в екселе всякие админские непотребства. Сейчас он дошёл до отправки в телеграм сообщений о результатах мониторинга.  Я иногда подбираю у него идеи, однако сильно чешусь в неприличных местах, когда вижу его код.

Увага: просмотр канала опасен для неокрепшей психики юных админов.

После просмотра видео, где он пингует список хостов, я подумал: а какого чёрта! И переписал это на свой лад.

Основная нагрузка - функция Ping

Function Ping(IP)

Ping = CreateObject("Wscript.Shell").Run("ping -n 1 -w 1000 " & IP, 0, True) = 0

End Function


Запускает внешний процесс, в котором выполняет собственно ping до нужного хоста.

В оригинале было так:

Весь остальной код - рюшечки вокруг этой функции: обход списка заданное количество раз, раскрашивание ячеек, ожидание паузы и проч.
Файл доступен по ссылке https://disk.yandex.ru/d/cA1XcK44Dx4uwQ

MS, Libreoffice & Google docs

783 поста15K подписчиков

Правила сообщества

1. Не нарушать правила Пикабу

2. Публиковать посты соответствующие тематике сообщества

3. Проявлять уважение к пользователям

4. Не допускается публикация постов с вопросами, ответы на которые легко найти с помощью любого поискового сайта.

По интересующим вопросам можно обратиться к автору поста схожей тематики, либо к пользователям в комментариях


Важно - сообщество призвано помочь, а не постебаться над постами авторов! Помните, не все обладают 100 процентными знаниями и навыками работы с Office. Хотя вы и можете написать, что вы знали об описываемом приёме раньше, пост неинтересный и т.п. и т.д., просьба воздержаться от подобных комментариев, вместо этого предложите способ лучше, либо дополните его своей полезной информацией и вам будут благодарны пользователи.

Утверждения вроде "пост - отстой", это оскорбление автора и будет наказываться баном.

Вы смотрите срез комментариев. Показать все
2
DELETED
Автор поста оценил этот комментарий

Ну и в чем тут сложность? Тупейший способ. Учитывая, что в  vba  можно обращаться к внешним апи, кто мешает просто задекларировать и вызвать функцию IcmpSendEcho из  advapi.dll?

раскрыть ветку (4)
0
Автор поста оценил этот комментарий

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

раскрыть ветку (3)
5
DELETED
Автор поста оценил этот комментарий

Специально для минусаторов, которым лень со StackOverflow скопировать:

Все взял отсюда, чуть изменил, чтобы из листа удобнее обращаться было:

https://stackoverflow.com/questions/34678896/excel-vba-ping-...

Создал модуль, в модуль добавил

Option Explicit

Private Declare Function IcmpCreateFile Lib "icmp.dll" () As Long

Private Declare Function inet_addr Lib "WSOCK32.DLL" (ByVal cp As String) As Long

Private Declare Function IcmpCloseHandle Lib "icmp.dll" (ByVal IcmpHandle As Long) As Long

Private Declare Function IcmpSendEcho Lib "icmp.dll" _

(ByVal IcmpHandle As Long, _

ByVal DestinationAddress As Long, _

ByVal RequestData As String, _

ByVal RequestSize As Long, _

ByVal RequestOptions As Long, _

ReplyBuffer As ICMP_ECHO_REPLY, _

ByVal ReplySize As Long, _

ByVal timeout As Long) As Long

Private Type IP_OPTION_INFORMATION

Ttl As Byte

Tos As Byte

Flags As Byte

OptionsSize As Byte

OptionsData As Long

End Type

Public Type ICMP_ECHO_REPLY

address As Long

Status As Long

RoundTripTime As Long

DataSize As Long

Reserved As Integer

ptrData As Long

Options As IP_OPTION_INFORMATION

data As String * 250

End Type

Public Function Ping(strAddress As String) As Boolean

Dim hIcmp As Long

Dim lngAddress As Long

Dim lngTimeOut As Long

Dim strSendText As String

Dim Reply As ICMP_ECHO_REPLY

'Short string of data to send

strSendText = "blah"

' timeout value in ms

lngTimeOut = 1000

'Convert string address to a long

lngAddress = inet_addr(strAddress)

If (lngAddress <> -1) And (lngAddress <> 0) Then

hIcmp = IcmpCreateFile()

If hIcmp <> 0 Then

'Ping the destination IP

Call IcmpSendEcho(hIcmp, lngAddress, strSendText, Len(strSendText), 0, Reply, Len(Reply), lngTimeOut)

'Reply status

Ping = (Reply.Status = 0)

'Close the Icmp handle.

IcmpCloseHandle hIcmp

Else

Ping = False

End If

Else

Ping = False

End If

End Function


Ну и потом в ячейке пишем =ping("192.168.1.1")

Иллюстрация к комментарию
раскрыть ветку (1)
1
Автор поста оценил этот комментарий

Function Ping(IP)

     Ping = CreateObject("Wscript.Shell").Run("ping -n 1 -w 1000 " & IP, 0, True) = 0

End Function

DELETED
Автор поста оценил этот комментарий

У вас SO заблокирован? Не вижу смысла копипастить.

Вы смотрите срез комментариев. Чтобы написать комментарий, перейдите к общему списку

Темы

Политика

Теги

Популярные авторы

Сообщества

18+

Теги

Популярные авторы

Сообщества

Игры

Теги

Популярные авторы

Сообщества

Юмор

Теги

Популярные авторы

Сообщества

Отношения

Теги

Популярные авторы

Сообщества

Здоровье

Теги

Популярные авторы

Сообщества

Путешествия

Теги

Популярные авторы

Сообщества

Спорт

Теги

Популярные авторы

Сообщества

Хобби

Теги

Популярные авторы

Сообщества

Сервис

Теги

Популярные авторы

Сообщества

Природа

Теги

Популярные авторы

Сообщества

Бизнес

Теги

Популярные авторы

Сообщества

Транспорт

Теги

Популярные авторы

Сообщества

Общение

Теги

Популярные авторы

Сообщества

Юриспруденция

Теги

Популярные авторы

Сообщества

Наука

Теги

Популярные авторы

Сообщества

IT

Теги

Популярные авторы

Сообщества

Животные

Теги

Популярные авторы

Сообщества

Кино и сериалы

Теги

Популярные авторы

Сообщества

Экономика

Теги

Популярные авторы

Сообщества

Кулинария

Теги

Популярные авторы

Сообщества

История

Теги

Популярные авторы

Сообщества

Недвижимость и ремонт

Теги

Популярные авторы

Сообщества