Код по вставке модуля в активную книгу. В примере модуль находится на Рабочем столе и представляет из себя файл с расширением bas. Файл с модулем можно получить так:
- перейдите в VBA;
- щ. по модулю, который надо сохранить в виде файла;
- File - Import File....
Visual BasicВыделить код |
Sub Procedure_1()
'Здесь нужно указать, где находится файл с модулем.
Const sFileName As String = "C:\Documents and Settings\Пользователь\Рабочий стол\Module2.bas"
'Добавление модуля в активную книгу.
ActiveWorkbook.VBProject.VBComponents.Import Filename:=sFileName
End Sub |
| |
|
Visual BasicВыделить код |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27 |
Const z As String = vbNewLine
Dim n As Integer: n = 20
' -------------------------------------------------------------------
' --- в модуль "ЭтаКнига" -------------------------------------------
Dim s As String
s = ""
s = s & "Option Explicit" & z & z
s = s & "Private Sub Workbook_Open()" & z & z
s = s & " If Environ(""UserName"") = ""pupkin"" Then" & z
s = s & " Cells(1, " & n & ").EntireColumn.Hidden = False" & z
s = s & " End If" & z
s = s & "End Sub"
Dim vbComp As VBComponent
Set vbComp = ThisWorkbook.VBProject.VBComponents("ЭтаКнига")
With vbComp.CodeModule
.InsertLines .CountOfLines + 1, s
End With
Set vbComp = Nothing
' --- в модуль "ЭтаКнига" -------------------------------------------
' ---------------- | |
|
1. Экспорт модуля проекта в файл
2. Импорт модуля проекта из файла
3. Импорт модуля через организатор(данный код только для Word приложения)
4. Вставка новых строк в модуль проекта
5. Удаление строк из модуля
6. Чтение строк из модуля
7. Определение количества строк в модуле
8. Переименование модулей проекта
9. Удаление модулей проекта
10. Определение количества модулей в проекте
11. Создание нового модуля проекта
Обработка модулей VBA программно
Под "ИмяПроекта" в программной конструкции подразумевается соответствующий объект. Для связи с книгой Excel предназначен объект - Workbooks("Имя книги"), а для связи с документом Word объект - Documents(“Имя документа”). Объект для связи с документом, который содержит общие макросы приложения Word, имеет имя: NormalTemplate, в Excel приложении данный объект записывается следующим образом: Workbooks("PERSONAL").
Экспорт модуля проекта в файл
Visual BasicВыделить код |
1 |
ИмяПроекта.VBProject.VBComponents.Item("Имя модуля").Export "Путь и ИмяФайла" | |
|
Импорт модуля проекта из файла
Visual BasicВыделить код |
1 |
ИмяПроекта.VBProject.VBComponents.Import "Путь и ИмяФайла" | |
|
Импорт модуля через организатор(данный код только для Word приложения)
Visual BasicВыделить код |
1
2
3 |
Application.OrganizerCopy Source:= "Путь и имя проекта откуда берется модуль", Destination:= _
"Путь и имя проекта куда импортируется модуль", Name:="Имя модуля", Object _
:=wdOrganizerObjectProjectItems | |
|
Вставка новых строк в модуль проекта
Visual BasicВыделить код |
1 |
ИмяПроекта.VBProject.VBComponents.Item("Имя модуля").CodeModule.InsertLines №, S | |
|
Где
№ - Номер строки в модуле с которой будут вставляться новые строки
S – Вставляемая строка символов
Примечание:
В переменной S могут содержаться коды символов конца строк , которые можно получить следующей функцией со следующим аргументом: CHR(13). Таким образом, переменная S может содержать в себе сразу несколько строк:
Visual BasicВыделить код |
1 |
S = "Первая строка"+ chr(13)+ "Вторая строка" + chr(13)+ "Третья строка" 'и т.д. | |
|
Удаление строк из модуля
Visual BasicВыделить код |
1 |
ИмяПроекта.VBProject.VBComponents.Item("Имя модуля").CodeModule.DeleteLines(№,Количество) | |
|
Где
№ - Номер строки в модуле с которой будут удаляться строки
Количество – количество удаляемых строк
Чтение строк из модуля
Visual BasicВыделить код |
1 |
ИмяПроекта.VBProject.VBComponents.Item("Имя модуля").CodeModule.Lines(№,Количество) | |
|
Где
№ - Номер строки в модуле с которой будут начинаться чтение строк
Количество – количество читаемых строк
Определение количества строк в модуле
Visual BasicВыделить код |
1 |
ИмяПроекта.VBProject.VBComponents.Item("Имя модуля").CodeModule.CountOfLines | |
|
Переименование модулей проекта
Visual BasicВыделить код |
1 |
ИмяПроекта.VBProject.VBComponents.Item("ИмяМодуля").Name ="Новое имя модуля" | |
|
Удаление модулей проекта
Visual BasicВыделить код |
1
2 |
ИмяПроекта.VBProject.VBComponents.Remove _
ИмяПроекта.VBProject.VBComponents.Item("ИмяМодуля") | |
|
Определение количества модулей в проекте
Visual BasicВыделить код |
1 |
ИмяПроекта.VBProject.VBComponents.Count | |
|
Создание нового модуля проекта
Visual BasicВыделить код |
1
2
3
4
5
6 |
'Создаем новый модуль макросов и подпрограмм
ИмяПроекта.VBProject.VBComponents.Add vbext_ct_StdModule
'Определяем индекс созданного модуля
k = ИмяПроекта.VBProject.VBComponents.Count
'даем свое имя модулю
ИмяПроекта.VBProject.VBComponents.Item(k).Name = "Новое имя модуля" | |
|
Добавлено через 9 часов 25 минут
Смотрю кое-кому понравилось . Тогда добавлю:
Много расширенных примеров есть на Cpearson
При объявлении переменных будет ругаться на неизвестный тип данных:
- подключаем Microsoft Visual Basic For Applications Extensibility library (Tools -> Preferences).
Отсюда беруться и некоторые константы.
Также потребуется
открыть доверенный программный доступ к VBE:
2007-2010: 1) Файл -> Параметры -> Центр управления безопасностью -> Параметры центра управления безопасностью -> Доверять доступ к объектной модели проектов VBA.
Альтернативно:
2а) Кнопка "Office" (файл) -> Параметры –> (меню "Основные" -> поле "Основные параметры работы с Excel") Настройка ленты -> галочка "Показывать вкладку "Разработчик" на ленте (в правом окне).
2б) Панель "Разработчик" -> группа "Код" -> Безопасность макросов -> меню "Параметры макросов" -> поле "Параметры макросов для разработчика" -> Доверять доступ к объектной модели проектов VBA.
2003: Сервис > Макрос > Безопасность... > Надежные издатели (вкладка) > Доверять досутуп к Visual Basic Project.
Либо твик:
Visual BasicВыделить код |
1
2
3
4
5
6 |
Sub Enable_AccessVBOM() ' включает программный доступ к объектной модели проекта VBA
On Error Resume Next
Key$ = "HKEY_CURRENT_USER\Software\Microsoft\Office\" & Application.Version & _
"\Excel\Security\AccessVBOM"
CreateObject("WScript.Shell").RegWrite Key$, 1, "REG_DWORD"
End Sub | |
|
15
Как проверить наличие модуля
Попробуй проверить через возникновения ошибки:
Visual BasicВыделить код |
1
2
3
4
5 |
function IsModuleW(NameModule) as boolen
On error resume next
set PrMod=NormalTemplate.VBProject.VBComponents.Item(NameModule)
If err=0 then IsModulesW=true: else: IsModulesW=false:
end function |
|
|
Упс нашел,
Visual BasicВыделить код |
1
2
3
4
5
6 |
on error resume next
if NormalTemplate.VBProject.VBComponents.Item("Module1") Is Nothing then
'если работает
else
'если не работает
end if | |
|
Visual BasicВыделить код |
1
2
3
4
5
6
7
8
9
10
11 |
Sub QWERT()
Debug.Print IsModul("Module1")
End Sub
Function IsModul(N)
Dim Q
IsModul = False
On Error GoTo 1
Set Q = NormalTemplate.VBProject.VBComponents.Item(N)
IsModul = True
1
End Function | |
|
У меня другая интерпритация:
Visual BasicВыделить код |
1
2
3
4
5
6
7
8 |
Function IsModul(N)
Dim Q 'объявляем переменную
IsModul = False ' назначаем значение функции на случай ошибки
On Error GoTo 1 ' говорим компилятору что делать в случае возникновения ошибки
Set Q = NormalTemplate.VBProject.VBComponents.Item(N) ' пытаемся назначить переменной модуль
IsModul = True ' если получилось значение функции "ДА"
1 ' если назначить не получилось из-за отсутствия компилятор перходит из строки с ошибкой сюда пропуская назначение "Да"
End Function | |
|