MyTetra Share
Делитесь знаниями!
Макрос для вставки макроса в Excel - VBA
Время создания: 16.03.2019 23:43
Текстовые метки: References, VBA,Объектная модель, VBOM
Раздел: !Закладки - VBA - VBA управление кодами
Запись: xintrea/mytetra_db_adgaver_new/master/base/1515929021tn5c9y4o6l/text.html на raw.githubusercontent.com


Код по вставке модуля в активную книгу. В примере модуль находится на Рабочем столе и представляет из себя файл с расширением bas. Файл с модулем можно получить так:

  1. перейдите в VBA;
  2. щ. по модулю, который надо сохранить в виде файла;
  3. 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




Так же в этом разделе:
 
MyTetra Share v.0.59
Яндекс индекс цитирования