Работа с сетью и оборудованием

Определение IP адреса и страны по доменному имени

Макрос определения страны и IP адреса по доменному имени

Макрос предназначен для вывода IP адресов и названий стран, на основании столбца с доменными именами.

В прикреплённом файле - 2 способа реализации:

1) по доменному имени определяется IP адрес (посредством команды PING - выполнения ICMP запроса),
а затем определяется страна (по IP адресу), с использованием сервиса smart-ip.net

2) используется только сервис smart-ip.net
Отправляется запрос на указанный сервис, и из полученных данных вычленяются IP адрес и название страны.

 

Функция PING на VBA с изменяемым размером ICMP пакета

Public Function Ping(ByVal ComputerName As String) As Boolean
    ' возвращает TRUE, если пинг прошел
    Dim oPingResult As Variant
    For Each oPingResult In GetObject("winmgmts://./root/cimv2").ExecQuery _
        ("SELECT * FROM Win32_PingStatus WHERE Address = '" & ComputerName & "'")
        If IsObject(oPingResult) Then
            If oPingResult.StatusCode = 0 Then
                Ping = True        'Debug.Print "ResponseTime", oPingResult.ResponseTime
                Exit Function
            End If
        End If
    Next
End Function

Пример использования:

Sub TestPingFunction()
    If Ping("ComputerName") Then ПутьКПапке = "\\ComputerName\files"
    If Ping("ya.ru") Then MsgBox "Интернет доступен!"
    If Not Ping("192.168.0.2") Then MsgBox "Компьютер с IP адресом 192.168.0.2 недоступен в сети!"
End Sub

Функция VB (VBA) определения IP адреса по имени хоста

Самый простой способ получить IP-адрес машины, зная имя хоста, - применить функцию ResolveAddress:

Function ResolveAddress(ByVal ComputerName$) As String
    ' выполняет ICMP запрос (ping) до адреса ComputerName
    ' возвращает IP-адрес ComputerName$
    Dim oPingResult As Variant: On Error Resume Next
    For Each oPingResult In GetObject("winmgmts://./root/cimv2").ExecQuery _
        ("SELECT * FROM Win32_PingStatus WHERE Address = '" & ComputerName & "'")
        If IsObject(oPingResult) Then ResolveAddress = oPingResult.ProtocolAddress
    Next
End Function

Использовать функцию можно так:
Sub ПримерИспользованияResolveAddress()
    Debug.Print ResolveAddress("yandex.ru")    '  возвращает 87.250.250.11
    Debug.Print ResolveAddress("google.com")    '  возвращает 209.85.143.99
End Sub

Этот код (c функцией ResolveAddress) работает очень быстро (в отличие от приведённого ниже)

Работа из VBA Excel с оборудованием через Telnet

Программа содержит 4 модуля класса, позволяющие при помощи несложного кода подключаться к различному оборудованию по протоколу Telnet, и выполнять требуемый набор команд.

Команды могут включать в себя значения из диапазона ячеек листа Excel, или же загружаться из внешнего файла.

Примерно так можно задать настройки подключения к конкретному оборудованию:

Function UNIT() As Telnet_Equipment
    ' функция возвращает все необходимые настройки для подключения к оборудованию
    ' в ввиде объекта типа Telnet_Equipment
    Set UNIT = New Telnet_Equipment
    With UNIT
        .Name = "АТС UNIT-004"
        .IP = "192.168.64.122"
        .Port = 6701
        .Login = "user"
        .Password = "password"
        .ResponseBeforeLogin = "*004*"
        .ResponseLogonSucceed = "*Делайте ваш выбор*>*"
        .Prompt = "*" & vbNewLine & ">" & vbNewLine
        With .LogonCommands
            .AddCommand "ytermenter", "*Ваше имя >*", "", 2000
            .AddCommand .Equipment.Login, "*Ваш пароль >*", "", 200
            .AddCommand .Equipment.Password, "*Делайте ваш выбор*", "", 1000
        End With
    End With
End Function

Макрос отправки файла на файлообменник zalil.ru

Иногда требуется выложить некоторый файл в общий доступ, и поделиться ссылкой на него.

Для автоматизации этой задачи и предназначена функция UploadFile

Данная функция принимает в качестве параметра ссылку на файлообменник, и полный путь к загружаемому файлу.

Результатом работы функции является ссылка для скачивания загруженного файла.

(способ програмного формирования POST-запроса был выбран потому, что не удаётся средствами программы заполнить поле HTMLInputFileElement)

Получение списка доступных принтеров средствами VB (VBA)

Данный код выводит список всех установленных в системе принтеров:

Sub ПолучениеСпискаПринтеров()
    Set AllPrinters = GetObject("winmgmts://./root/CIMV2").ExecQuery("SELECT * FROM Win32_Printer", , 48)
    For Each printer In AllPrinters
       n = n + 1: Debug.Print "Принтер №" & n & ": " & printer.Name
    Next
    Debug.Print "Всего принтеров: " & n
End Sub

Результат работы макроса:

Принтер №1: PDFCreator
Принтер №2: Microsoft XPS Document Writer
Принтер №3: Microsoft Office Document Image Writer
Принтер №4: \\192.168.0.1\Samsung ML-2010 Series

Получение списка IP адресов средствами VBA

Фунцкия Get_All_IP_Addresses возвращает коллекцию, содержащую все IP-адреса всех сетевых интерфейсов.

Пример использования функции:

Sub ВыводРезультатов_Get_All_IP_Addresses()
    For Each IPaddr In Get_All_IP_Addresses
        txt = txt & IPaddr & vbNewLine
    Next
    MsgBox txt, vbInformation, "Список всех IP адресов"
End Sub