Макросы VBA Excel — Страница 14

Ключи лицензии для элементов управления OCX и ActiveX

Если при запуске вашей программы появляется сообщение об ошибке
The control could not be created because it is not properly licensed

Функции для определения нажатых клавиш

Порой требуется определить, нажата ли на клавиатуре определённая клавиша.
К примеру, на одну кнопку на панели инструментов можно "повесить" 2 и более макросов, если есть возможность проверить, удерживались ли клавиши Ctrl и Shift в момент нажатия кнопки запуска макроса.

Для этого можно применить функцию KeyPressed:

Public Function KeyPressed(ByVal VKey As VirtualKeys) As Boolean
    KeyPressed = IIf(GetKeyState(VKey) < 0, True, False)
End Function

Теперь вы можете назначить одной кнопке 2 макроса:

Sub ПроцедураДляЗапускаСПанелиИнструментов()
    If KeyPressed(VK_CONTROL) Then Call Макрос1 Else Call Макрос2
End Sub

Работа из 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

Создание копии листа шаблона, и сохранение в виде нового файла

Данная функция формирует (создаёт) новую книгу Excel с одним листом (на основании шаблона - листа sh_template), после чего сохраняет новый файл по пути NewFilename$

Перестановка столбцов в двумерном массиве (функция на VBA)

Функция ArraySwapColumns позволяет переставить в нужном порядке столбцы двумерного массива.

Чтение и запись INI файлов

Функции WIF и RIF являются обёртками для WinAPI функций WritePrivateProfileString и GetPrivateProfileString, и предназначены для записи и чтения параметров из файлов конфигурации INI.

INI-файлы - это обычные текстовые файлы, предназначенные для хранения настроек программ.

Примерный вид структуры INI -файла:

; комментарий

[Section1]
var1 = значение_1
var2 = значение_2

[access]
changed=02.06.2009 08:15
[client]
name=ООО «Рога и копыта»
[files]
good=Название товара

Дробное число прописью в Excel (вывод целых, десятых, сотых, тысячных)

Не мой макрос, - нашел в интернете
Вроде работает как надо
Используется на листе Excel как формула =ДробноеЧислоПрописью(A1)

Function ДробноеЧислоПрописью(chislo)

Функция 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) работает очень быстро (в отличие от приведённого ниже)

Звонок с мобильного телефона или SIP софтфона EyeBeam из Excel

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

Обычно этот процесс не автоматизирован - пользователь, глядя в таблицу Excel, набирает на своём мобильном телефоне номер из очередной ячейки.

Чем это чревато - вы и сами понимаете: мало того, что пользователь теряет время, набирая номер на телефоне, так и при наборе номера возможно ошибиться, в результате чего вы потратите лишнее время и деньги.

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

Sub ПримерКодаДляЗвонкаИзExcel()
    ' макрос запустит программу EyeBeam, и наберёт указанный номер
    CallWithEyeBeam "8-912-3456789"
End Sub