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

Поиск самого нового файла в папке (с просмотром подпапок)

Функция LastFile предназначена для поиска самого свежего файла в заданной папке

(производится поиск файлов по маске, и из найденных файлов выбирается тот, дата последнего изменения которого максимальна)

 

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

Sub ПримерИспользованияФункции_LastFile()
    ' Ищем на рабочем столе все файлы TXT, и выводим имя самого нового файла.
    ' Просматриваются папки с глубиной вложения не более трёх.

    Dim ПутьКПапке$, СамыйПоследнийФайл$
    ' получаем путь к папке РАБОЧИЙ СТОЛ
    ПутьКПапке = CreateObject("WScript.Shell").SpecialFolders("Desktop")
    ' получаем путь к самому новому файлу (проверяется дата последнего сохранения)
    СамыйПоследнийФайл$ = LastFile$(ПутьКПапке, ".txt", 3)
 
    If СамыйПоследнийФайл$ = "" Then MsgBox "Не найдено ни одного файла", vbExclamation: Exit Sub
    MsgBox СамыйПоследнийФайл$, vbInformation, "Самый свежий файл"
End Sub

Разное - всего понемногу

В этой статье опубликованы различные вспомогательные функции на VBA, которые порой помогают в работе.

Скачивание файла с сайта с авторизацией

Пример макроса для скачивания файла с авторизацией.

Для его работы, надо подключить библиотеку Microsoft WinHTTP Services (version 5.1.) в меню Tools - References

Сначала выполняется POST-запрос для авторизации,
потом GET-запрос для скачивания файла

Преобразование строки со значениями в массив

Ситуация: дана строка, в которой через запятую перечислены значения (или диапазоны значений)

Требуется подсчитать, сколько значений содержится в строке, или же разбить строку на массив, содержащий все значения из исходной строки.

И, если при исходных строках вида "5,6,8,18,2,21" всё просто (достаточно применить VB-функцию Split), то при наличии в строке диапазонов значений вида Число1-Число2 (например, строка "9-15,18,2,11-9") задача заметно усложняется.

В этих случаях на помощь придёт функция ArrayOfValues

Function ArrayOfValues(ByVal txt$) As Variant
 
' Принимает в качестве параметра строку типа ",,5,6,8,,9-15,18,2,11-9,,1,4,,21,"
    ' Возвращает одномерный (горизонтальный) массив в формате
    ' array(5,6,8,9,10,11,12,13,14,15,18,2,11,10,9,1,4,21)
    ' (пустые значения удаляются; диапазоны типа 9-15 и 17-13 раскрываются)

Замена гиперссылок с формулой =ГИПЕРССЫЛКА() на обычные

Иногда требуется заменить на листе все гиперссылки, созданные при помощи функции листа =ГИПЕРССЫЛКА(), на обычные гиперссылки.

В этом поможет VBA-функция FormulaHyperlink, и основанный на ней макрос:

Function FormulaHyperlink(ByRef cell As Range) As String
    If cell.HasFormula And (cell.Hyperlinks.Count = 0) Then
        If cell.Formula Like "=HYPERLINK*" Then
            FormulaHyperlink = Evaluate(Mid$(Split(cell.Formula, ",")(0), 12))
        End If
    End If
End Function

Получение кода региона (города) для работы с сервисами Яндекса

Иногда для программного формирования ссылки требуется получить код региона или города, зная его название.
(например, для поиска цен на товары в Яндекс.Маркете в заданном регионе)

К примеру, нужно найти некий товар в Москве, программно сформировав ссылку вида
httр://yandex.ru/yandsearch?text=НазваниеТовара&lr=213,
где 213 - это код города Москвы.

Функция GetYandexRegionCode позволяет быстро получить такой код, зная название города:

Sub ПримерПолученияКодаРегиона()
    КодРегиона1 = GetYandexRegionCode("Москва")    '  КодРегиона1 = 213
    КодРегиона2 = GetYandexRegionCode("Иркутская область")    '  КодРегиона2 = 11266
    КодРегиона3 = GetYandexRegionCode("Европа")    '  КодРегиона3 = 111
    КодРегиона4 = GetYandexRegionCode("Чукотский автономный округ")    '  КодРегиона4 = 10251
    КодРегиона5 = GetYandexRegionCode("Первоуральск")    '  КодРегиона5 = 11171
    
    Debug.Print КодРегиона1, КодРегиона2, КодРегиона3, КодРегиона4, КодРегиона5
End Sub

Объединение двумерных массивов

Функция CombineArrays объединяет 2 двумерных массива ОДИНАКОВОЙ ШИРИНЫ в один массив

(второй массив "дописывается" ниже первого, путем добавления строк из второго массива в первый)

Функция возвращает массив той же ширины, что и исходные, а вертикальная размерность возвращаемого массива равна сумме количества строк исходных массивов.

 

В случае, если один из массивов не задан, функция возвращает другой заданный массив (без изменений)

ВНИМАНИЕ: все размерности массивов 1 и 2 должны совпадать (кроме первой размерности - по высоте)

Подразумевается, что индексы массивов начинаются с 1 (директива Option Base 1)

Sub ПримерОбъединенияМассивов()
    Arr1 = [a5:c10].Value    ' массив размерами 6 * 3
    Arr2 = [a24:c26].Value    ' массив размерами 3 * 3
    Arr3 = [a55:c62].Value    ' массив размерами 8 * 3

    ОбъединённыйМассив12 = CombineArrays(Arr1, Arr2)
    Debug.Print "Количество строк после объединения массивов 1 и 2:   " & _
                UBound(ОбъединённыйМассив12) ' результат: 9 (6+3)

 
    ОбъединённыйМассив123 = CombineArrays(Arr1, CombineArrays(Arr2, Arr3))
    Debug.Print "Количество строк после объединения массивов 1, 2 и 3:   " & _
                UBound(ОбъединённыйМассив123) ' результат: 17 (6+3+8)

End Sub

Надстройка для работы с ячейками и листами


Клавиша:

Установка значения в выпадающем списке на веб-странице

Функция предназначена для работы с объектной моделью web-документа (DOM) средствами VB (VBA)

Иногда, при программном заполнении (макросом) полей на веб-странице, требуется внести некоторое значение в выпадающий список, в который позволяется заносить только заранее определённые значения.
Поскольку в качестве исходных данных может выступать любой текст, - требуется отлавливать возникающие ошибки, и выводить пояснения (какая ошибка при заполнении какого списка произошла)

Function SetSelectElementValue(ByRef IEdoc As Object, _
                               ByVal SelectElementName$, ByVal NewValue$) As Boolean
    ' функция ищет в документе IEdoc (типа HTMLDocument) выпадающий список с именем SelectElementName$,
    ' и пытается установить его значение в NewValue$
    ' в случае ошибки выводит сообщение о невозможности установки нового значения
    ' Возвращает результат операции (TRUE, если всё прошло успешно)

Создание меню для просмотра встроенных в Excel значков панелей инструментов

Меню "Значки" - отображение иконок Excel, и их значений FaceID

Данный код формирует выпадающее меню "Значки" на стандартной панели инструментов:

Данное меню можно использовать для подбора нужной иконки для собственных меню
(чтобы узнать значение FaceID для выбранного значка)