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

Вставка картинки в центр диапазона ячеек

Макрос вставляет изображение из файла PicturePath$
в центр диапазона ячеек ra, соблюдая пропорции картинки

Код надо разместить в модуле листа
(или заменить Me на Worksheets("ИмяЛиста")

Sub InsertImageIntoRange(ByVal PicturePath$, ByVal ra As Range)
    On Error Resume Next
    Dim sha As Shape
    With LoadPicture(PicturePath$)
        w! = .Width
        h! = .Height
    End With
 
    Const PADDING = 2 ' отступ от краёв ячейки
    MaxPicHeight! = ra.Height - 2 * PADDING
    MaxPicWidth! = ra.Width - 2 * PADDING
 
    wh_picture! = w / h

Преобразование списка номеров и названий столбцов в массив значений

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

Назначение функции: исключить ошибки пользовательского ввода, преобразовать буквенные названия столбцов в числовые значения.

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

Private Sub ПримерИспользования_ParseColumnsStringEx()
    Dim txt$, txt1$, txt2$
    ' исходная строка с номерами столбцов (c ошибками ввода)
    txt$ = "4-4 , -a- C;8,Я-7,-11-9-F, Е --К; 4,21-,6-F"
 
    ' получаем массив столбцов
    arr = ParseColumnsStringEx(txt)
 
    ' выводим список столбцов:  4,1,2,3,8,7,11,10,9,8,7,6,5,6,7,8,9,10,11,4,21,6,
    For i = LBound(arr) To UBound(arr): Debug.Print arr(i) & ",";: Next i: Debug.Print
 
    ' ======================================
    ' или, например, такая строка
    txt$ = "4-5,8 -k, 6-5;a,e,3,4, 46-BA"
 
    ' получаем массив столбцов (c «промежуточными» значениями)
    arr2 = ParseColumnsStringEx(txt, txt1, txt2)
 
    Debug.Print txt1    ' выводит  4-5;8-K;6-5;A;E;3;4;46-BA
    Debug.Print txt2    ' выводит  4-5,8-11,6-5,1,5,3,4,46-53
    columnsList$ = Join(arr2, ",")
    Debug.Print columnsList$    ' выводит 4,5,8,9,10,11,6,5,1,5,3,4,46,47,48,49,50,51,52,53
End Sub

Функция для добавления GET-параметра в ссылку (URL)

Если требуется добавить в URL новый GET-параметр, или заменить значение имеющегося, - можно воспользоваться этой функцией.

Sub ПримерИспользования()
    URL$ = "http://market.yandex.ru/model.xml?modelid=968028&np=0"
 
    URL$ = URL_SetParameter(URL$, "how", "aprice") ' такого параметра нет - он добавляется
    URL$ = URL_SetParameter(URL$, "np", "1") ' такой параметр есть - он заменяется
    
    Debug.Print URL$
    ' на выходе получаем ссылку
    ' <a href="http://market.yandex.ru/model.xml?modelid=968028&hid=512743&how=aprice&np=1
End" title="http://market.yandex.ru/model.xml?modelid=968028&hid=512743&how=aprice&np=1
End">http://market.yandex.ru/model.xml?modelid=968028&hid=512743&how=aprice&n...</a> Sub

Код функции:

Сохранение двумерного массива в файл

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

Sub SaveArray(ByVal Arr, ByVal ColumnNames, ByVal DocName$)
    ' Получает двумерный массив Arr с данными, и массив заголовков столбцов ColumnNames.
    ' Создаёт новый файл в подпапке СФОРМИРОВАННЫЕ ДОКУМЕНТЫ с именем DocName$
    On Error Resume Next
 
    ' создаём подпапку (там же, где текущий файл Excel)
    folder$ = ThisWorkbook.Path & "\СФОРМИРОВАННЫЕ ДОКУМЕНТЫ\": MkDir folder$
 
    Application.ScreenUpdating = False
    Dim sh As Worksheet, wb As Workbook

Вывод информации о надстройках, установленных в Excel

Макрос ShowAddinsList выводит список надстроек, подключенных в Microsoft Excel:

Sub ShowAddinsList()
    Dim count As Integer, item As AddIn, msg As String, txt1$, txt2$
    For Each item In Application.AddIns
        If item.Installed Then
            txt1$ = txt1$ & vbTab & item.Name & vbNewLine
            count = count + 1
        Else
            txt2$ = txt2$ & vbTab & item.Name & vbNewLine
        End If
    Next item
    msg = "Всего надстроек: " & AddIns.count & vbNewLine & vbNewLine
    msg = msg & "Из них установлено (подключено) - " & count & ":" & vbNewLine & txt1$ & vbNewLine
    msg = msg & "Не подключено надстроек - " & AddIns.count - count & ":" & vbNewLine & txt2$
 
    MsgBox msg, vbInformation, "Информация о подключенных надстройках Excel"
End Sub

Скриншот выводимого сообщения: