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

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

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

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

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

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

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

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

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

Чтение и запись 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=Название товара

Запуск макроса VBA по таймеру

В Excel есть инструментарий для запуска макроса по расписанию, - Application.Ontime
При помощи этого метода можно запускать макрос с заданным интервалом (например, раз в секунду)

Но есть и другой вариант, - использование объекта htmlfile:
(код надо поместить в модуль ЭтаКнига - ThisWorkbook)

Private m_TimerId As Variant
Private m_doc As Object
Const ATTRNAME = "VBATimerHandler"
 
Private Sub StartTimer()
    Const Script = "document.documentElement.getAttribute('" & ATTRNAME & "').TimerProc()"
    EndTimer
    Set m_doc = CreateObject("htmlfile")

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