mail mail

Макросы VBA Excel

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

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

Выборка случайных строк из двумерного массива

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

К примеру, исходный массив (таблица) имеет размер 1000*20 (1000 строк, и 20 столбцов)
Нам требуется выбрать из этой таблицы, случайным образом, 50 строк
(получив, таким образом, таблицу размерами 50*20)
Кроме того, необходимо, чтобы при каждом новом запуске макроса,
в выборку попадали новые строки
.

В прикреплённом к статье файле вы найдете пример такого макроса:

Sub ПримерИспользования_RandomRowsFromArray()
    ' считываем массив с листа
   arr = [a1:e20].Value
    ' считываем количество строк в выборке
   Количество = Val([NewCount])

    ' выбираем строки из массива случайным образом (получаем новый массив newarr)
   newarr = RandomRowsFromArray(arr, Количество)

    ' заносим результат на лист (справа от исходных данных)
   Range("g1").Resize(UBound(newarr, 1), UBound(newarr, 2)).Value = newarr
End Sub

Сохранение настроек почтового аккаунта в реестре

Форма редактирования настроек почты в Excel

Макрос предназначен для сохранения в реестре (и изменения через форму) настроек почтового аккаунта.

Эти настройки используются макросом рассылки почты Send_Mail
(для отправки почты из Excel без применения специализированных почтовых программ)

При запуске формы, она считывает из реестра Windows ранее сохранённые настройки.

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

После редактирования логина, пароля или адреса SMTP-сервера,
нажмите кнопку «Сохранить и проверить», чтобы сохранить в реестре изменённые данные.

После сохранения настроек, макрос попытается отправить тестовое письмо, используя сохранённые настройки.
(для этого, помимо формы, в книге Excel в стандартном модуде должен присутствовать макрос Send_Mail)

Если введённые настройки корректны, на компьютере есть доступ к интернету, и в системе установлена библиотека CDO for Windows,
будет выведено сообщение об успешной отправке тестового письма.

Данную форму можно использовать и для сохранения в реестре любых других настроек макроса.

Поиск в Google значений из ячеек листа Excel

Макрос для поиска текста выделенных ячеек в Google

Макрос предназначен для поиска текста из выделенных ячеек в поисковой системе Google.

Функция поиска доступна из контекстного меню ячеек:

добавление пункта поиска в контекстное меню ячеек Excel

Как вы можете видеть на скриншоте, есть возможность выбора браузера.
На выбор представлены наиболее популярные браузеры: Internet Explorer, Mozilla Firefox, Opera, и Google Chrome.

OCR в Excel: макрос распознавания текста с картинки

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

 

Для этих целей существуют специальные OCR-программы (например, ABBYY FineReader, CuneiForm и т.д.), а также онлайн-сервисы (платные и бесплатные)

Сортировка двумерного массива на VB (VBA)

Сортировка двумерного массива по нулевому столбцу

Public Function CoolSort(SourceArr As Variant) As Variant
    ' сортировка двумерного массива по нулевому столбцу
   Dim Check As Boolean, iCount As Integer, jCount As Integer, nCount As Integer
    ReDim tmpArr(UBound(SourceArr, 2)) As Variant
    Do Until Check
        Check = True
        For iCount = LBound(SourceArr, 1) To UBound(SourceArr, 1) - 1
            If Val(SourceArr(iCount, 0)) > Val(SourceArr(iCount + 1, 0)) Then
                For jCount = LBound(SourceArr, 2) To UBound(SourceArr, 2)

Поиск адресов электронной почты (email) на листе Excel

Данный макрос предназначен для поиска адресов электронной почты на листе Excel, с последующим выводом найденных адресов на отдельный лист.

В прикреплённом файле, на первом листе ("исходные данные"), ячейки заполнены неструктурированной информацией (смесь фамилий, адресов почты, прочей ненужной информации)

Макрос вычленяет из текста ячеек адреса электронной почты, и выводит все найденные адреса email в таблицу на втором листе ("результат")

Конечно, не помешало бы ещё проверить все найденные адреса почты на корректность (на соответствие стандартам RFC 5322 и RFC 5321),
но в данном макросе это не реализовано (но обычно это и не требуется)

Для поиска адресов email используются регулярные выражения (RegExp)

Замена запрещённых символов в имени файла или папки

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

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

Function Replace_symbols(ByVal txt As String) As String
    St$ = "~!@/\#$%^&*=|`"""
    For i% = 1 To Len(St$)
        txt = Replace(txt, Mid(St$, i, 1), "_")
    Next
    Replace_symbols = txt
End Function

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

' формируем путь к новому файлу

Автозапуск файла при открытии Excel

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

Способов добавить файл в автозагрузку Excel достаточно много, поэтому мы рассмотрим только самые основные:

  • открытие файлов из папки автозапуска
  • подключение файла как надстройки

Начнём с папки автозагрузки (точнее, с папок, поскольку их может быть несколько)

Автосохранение надстройки в папке Addins

В некоторых случаях, при запуске файла Excel с макросами (к примеру, надстройки Excel), для обеспечения работы макросов требуется, чтобы был полный доступ к файлу (а не "только чтение"), или же файл был сохранён в заданной папке.

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

В этом вам поможет макрос SaveAddinToPermanentPath, который проверяет, из какой папки запущен файл, и предлагает, в случае необходимости, переместить файл в постоянную папку

В качестве постоянной папки макрос использует папку «UserLibrary», путь к которой можно получить из свойства Application.UserLibraryPath

На моём компьютере, эта папка расположена по пути 
C:\Documents and Settings\<имя пользователя>\Application Data\Microsoft\AddIns\

Код макроса SaveAddinToPermanentPath:

RSS-материал