VBA Access SQL
Периодически я вижу, как пытаются найти информацию: а как можно сделать запрос через SQL и макросов VBA? Сегодня я постараюсь осветить данную область и рассказать про связь VBA Access SQL.
VBA и различные разработки под MS Office
Периодически я вижу, как пытаются найти информацию: а как можно сделать запрос через SQL и макросов VBA? Сегодня я постараюсь осветить данную область и рассказать про связь VBA Access SQL.
По долгу службы частенько приходиться использовать дополнительные библиотеки в VBA. А так как потом файлы расходятся по разным компьютерам и не факт, что подключение object library будет сохранено, то пришлось использовать проверку на подключение и само подключение.
Поиск по интернету конечно же не дал окончательного решения и, как всегда, мне пришлось собирать все по крупицам. Первым делом я нашел куски кода на проверку и само подключение библиотек (VBA load object library):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
Sub LoadLibrary() Dim ref As Reference CheckExcel = False For Each ref In References If ref.Name = "Excel" Then CheckExcel = True Next If Not CheckExcel Then On Error Resume Next References.AddFromGuid "{00020813-0000-0000-C000-000000000046}", 1, 7 ' Microsoft Excel 14.0 Object Library References.AddFromGuid "{00020813-0000-0000-C000-000000000046}", 1, 5 ' Microsoft Excel 11.0 Object Library References.AddFromGuid "{00020813-0000-0000-C000-000000000046}", 1, 4 ' Microsoft Excel 10.0 Object Library End If End Sub |
Как видно из кода, для определенной библиотеки object library есть некий уникальный идентификатор, который непонятно где взять…
Читать далее Подключение библиотек в VBA — VBA load object library
Я уже писал о моем отношении к конструкции в VBA On Error, но к сожалению, по работе частенько с ней встречаюсь. Поэтому сегодня я расскажу об ее одной особенности.
У меня есть макрос в Microsoft Outlook для генерации письма с поиском конкретных вложений. Раньше использовался весь потенциал конструкции VBA On Error, где первоначально шла проверка наличия самих вложений, и как следствие создания письма, и проверка одного отдельного отчета, который мог присутствовать, а мог и отсутствовать…
Позднее мне понадобилось добавить еще одну проверку нового отчета, наличие которого происходило по новой методике условий. Я решил отделаться легким испугом и дописать вторую проверку наличия вложения через VBA On Error GoTo, заметил, что если первый On Error GoTo срабатывал, то второй всегда завершился ошибкой, как-будто он не обрабатывался…
Внимательно почитав документацию и поискав в Google, я понял, что данная конструкция работает один раз в рамках процедуры или функции и решения данной проблемы нет. Именно по этому мне пришлось найти новое решение проверки вложений, о котором я писал ранее, и отказаться от всех конструкций VBA On Error!
Помните, использование конструкции в VBA On Error — это не выход из ситуации, а просто временный костыль, который в будущем может только усложнить доработку программы, старайтесь не пользоваться данной обработкой ошибок!
Все больше замечаю, что многие люди в VBA пользуются конструкцией On Error для проверки ошибок, в частности с оператором GoTo. Я очень не люблю данный оператор, т.к. он затрудняет чтение кода и отладку, да и прыжки в программе не благодарное дело… Поэтому я расскажу, как проверить существование файла (vba check file) более цивилизованными методами.
Функция Dir$(<путь>, <параметры>) — где в качестве первого параметра передаем путь директории или файла, а второго — параметры поиска файлов.
Пример:
1 |
Dir$("C:\Test\test.txt") |
Данная функция вернет либо пустую строку, если файла или директории не существует, либо имя файла «test.txt». Для того, чтобы проверить, существует ли файл в директории (vba check file), достаточно длину данной строки проверить с нулем:
1 2 3 4 5 |
If Len(Dir$("C:\Test\test.txt")) > 0 Then MsgBox("Файл существует!") Else MsgBox("Файл не найден...") End If |
Вот таким простым способом можно организовать проверку.
Как-то по работе мне понадобилось средствами VBA отслеживать изменение Excel-файла (vba crc32 check sum). Первое что пришло на ум, это подсчет CRC32 check sum. Спустя пару часов брожения по интернету, я смог найти и собрать необходимые функции в модуль.
Читать далее Использование CRC32 в VBA — vba crc32 check sum