Как удалить модули vba excel

Импорт, экспорт и удаление модуля в редакторе VBA. Программный экспорт-импорт модуля из одной рабочей книги Excel в другую с помощью кода VBA Excel.

1. Откройте рабочую книгу Excel, в которую планируете импортировать модуль. Для импорта модуля в Личную книгу макросов, откройте любую книгу.

2. Откройте редактор VBA сочетанием клавиш Alt+F11 (в этом сочетании используется левая клавиша Alt). Обратите внимание на наличие в окне редактора VBA окна проводника «Project-VBAProject», обычно, расположенного слева. При отсутствии, отобразите его через главное меню, выбрав «View» — «Project Explorer».

3. В окне проводника «Project-VBAProject» найдите строку «VBAProject (ИмяКниги)», где «ИмяКниги» — это имя книги, в которую вы собираетесь импортировать модуль. Если вы желаете импортировать модуль в Личную книгу макросов, строка называется «VBAProject (PERSONAL.XLSB)». Если у вас нет Личной книги макросов — создайте ее.

4. У выбранной строки раскройте все крестики слева.

5. Откройте контекстное меню, кликнув правой кнопкой мыши на строке «ЭтаКнига», и выберите в нем пункт «Import File…».

6. В открывшемся окне выбора файла найдите импортируемый модуль с расширением .bas и дважды кликните по нему, или кликните один раз и нажмите кнопку «Открыть». Модуль импортирован и отобразился в проводнике под именем «Module» с очередным номером, независимо от имени импортируемого файла.

7. Если вы импортировали модуль в Книгу Excel 2007-2016 с расширением .xlsx, ее необходимо будет пересохранить как «Книга Excel с поддержкой макросов (.xlsm)», иначе импортированный модуль не сохранится.

Инструкцию с картинками вы можете посмотреть здесь в параграфе «Пользовательская функция «СуммаПрописью».

Экспорт модуля в редакторе VBA

1. Откройте рабочую книгу Excel, из которой вы планируете экспортировать модуль. Для экспорта модуля из Личной книги макросов, откройте любую книгу.

2. Откройте редактор VBA сочетанием клавиш Alt+F11 и в окне проводника «Project-VBAProject» найдите экспортируемый модуль.

3. Откройте контекстное меню, кликнув правой кнопкой мыши на экспортируемом модуле, и выберите в нем пункт «Export File…».

4. В открывшемся окне выберите папку, куда следует сохранить экспортируемый модуль, если необходимо, измените название сохраняемого файла, и нажмите кнопку «Сохранить». Модуль экспортирован и отобразился в выбранном каталоге с указанным именем и расширением .bas.

Удаление модуля в редакторе VBA

1. В окне проводника «Project-VBAProject» найдите удаляемый модуль.

2. Откройте контекстное меню, кликнув правой кнопкой мыши на удаляемом модуле, и выберите в нем пункт «Remove Module…» с номером удаляемого модуля.

3. VBA Excel предложит экспортировать модуль перед удалением, нажмите «Да», если хотите сохранить модуль, или «Нет», чтобы удалить без сохранения.

Как удалить стандартный модуль с помощью кода VBA Excel, смотрите в последнем параграфе статьи Программное создание модуля.

Программный экспорт-импорт модуля

Пример программного экспорта стандартного модуля "Module1" из книги "Книга2.xlsm" и импорта его в книгу "Книга3.xlsm" с помощью кода VBA Excel:

Sub ExportImportModule()

    Workbooks(«Книга2.xlsm»).VBProject.VBComponents(«Module1»).Export «C:ТестоваяModule1.bas»

    Workbooks(«Книга3.xlsm»).VBProject.VBComponents.Import «C:ТестоваяModule1.bas»

End Sub

Если в книге "Книга3.xlsm" уже присутствует модуль с именем "Module1", то импортированному модулю будет присвоен другой номер.

Программное удаление модуля

Код VBA Excel для программного удаления стандартного модуля с именем "Module24":

Sub RemoveModule()

    With ThisWorkbook.VBProject

        .VBComponents.Remove .VBComponents(«Module24»)

    End With

End Sub

Замените имя "Module24" на имя своего модуля, который вы хотите безвозвратно удалить.


Have you ever seen a text file in a notepad or a source code file in visual studio code? These all are just basic files where you can write some code or information. Similarly, we have modules in excel, each module has its code window, where you can write some code and allow it to automate your repetitive tasks. There can be multiple modules. We can create, rename or delete a module in just a few mouse clicks. In this article, we will learn how to create and delete a module in excel VBA. 

Module and its types

A module is a set of instructions written in a VBA editor. There are broadly 5 types of modules in VBA: 

  1. General-Purpose Module: It is the simplest type of module. If we record a macro that will get stored in a module. This is called a general-purpose module. We can simply write code in the VBA editor also.
  2. Workbook Module: Workbook module handles the events happening at a workbook level. For example, opening, closing or renaming a workbook.
  3. Worksheet Module: The worksheet module is driven by the events happening at the worksheet level. For example, activating a worksheet or flipping between different worksheets. Automating the task such as merging the worksheets. 
  4. Userform Module: Userform Module is a way to input a piece of information from the user.  It is one of the most useful tools of VBA. 
  5. Class Module: It’s similar to the classes in other languages. We create our objects. VBA has built-in objects such as the Collection, Workbook, etc. The inheritance in VBA is minimal and much more restricted than in other languages. 

Creating a VBA module

Following are the steps to create a VBA module,

Step 1: Go to Developer Tab, and select Visual Basic in the menu bar. 

Selecting-visual-basic

Step 2: A VBA editor appears. We can see the information on all the worksheets and workbooks in the editor tab. 

Workbook-and-worksheets

Step 3: Go to Insert Tab and select Module

Selecting-module

Step 4: A module name module1 is created.

Module-1-created

Deleting a VBA module

Following are the steps to delete a VBA module,

Step 1:  Given 3 modules name module1, module2, and module3. Delete module3 from the Modules. 

Deleting-module-3

Step 2: Right-click on module3 and click on Remove module3. A dialogue box appears. 

Removing-module

Step 3: The dialogue box tells whether you want to export the given module or not. If you, do not want to save the module on your PC, then click on No.

Dialogue-box

Step 4: Module3 has been deleted from the VBA editor. 

Module3-deleted

Return to VBA Code Examples

In this Article

  • How to Rename or Delete a VBA module or Form
  • Renaming a Module
  • Delete a Module
    • Name Modules & Forms

How to Rename or Delete a VBA module or Form

The first time you insert a module in VBA, it will automatically be given the name of “Module1” and subsequent module will become Module2, Module3 etc. Similarly, when you insert a UserForm it will be called UserForm1, UserForm2 etc.

VBA 15 PIC 01

Renaming a Module

To rename your module or form, you need to have the properties window switched on in your VBE.

If the properties windows is not showing, press F4 or go to the menu bar and select View > Properties Window.

VBA 15 PIC 02

  1. Click on the module you wish to rename in the Project Explorer.
  2. Select the name property in the Properties Window (a module will only have this property; a form has multiple properties)VBA 15 PIC 03

3. Delete the module name (in this case Module1) and type in the name you want to call your module.

VBA 15 PIC 04

4. Press enter to rename the module.

VBA 15 PIC 05

You rename your forms in the same manner.

Delete a Module

Occasionally you may have the need to remove a module or form that you no longer need.

Right-click on the module or form you wish to remove to show the right click short cut menu.

VBA 15 PIC 06

Click Remove (in this case Module2)

OR

Click on the File menu, and then click on Remove (Module2).

VBA 15 PIC 07

A warning box will appear asking if you want to Export the module or form before you remove it. Exporting the module or form enables you to save it as an individual file for use in a different Excel project at some other time.

VBA 15 PIC 08

More often than not when you remove a module or form it is because you do not need it, so click No.

Name Modules & Forms

It is good practice to rename modules and forms in order to give them more meaningful names. For example, if UserForm1 is going to be a form for entering invoice details, we can rename it to frmInvoices.  Similarly, if Module1 is going to be used to hold some general functions that are going to be used repetitively throughout your code, you could rename it to basGeneral or modGeneral (depending on which naming conventions you like to use).

It is a good idea to be consistent with the naming conventions, both in naming your modules and forms, as well as the variables that you use within your code.  You will notice that I have written the first 3 letters of the module or form name in lowercase, and have a capital letter at the beginning of the description for the module or form.  This is known as CamelCase (https://en.wikipedia.org/wiki/Camel_case) and is a good habit to  get into when naming your objects. I have also used the Leszynski naming convention which is often used by Visual Basic programmers. (https://en.wikipedia.org/wiki/Leszynski_naming_convention).

VBA Coding Made Easy

Stop searching for VBA code online. Learn more about AutoMacro — A VBA Code Builder that allows beginners to code procedures from scratch with minimal coding knowledge and with many time-saving features for all users!
vba save as

Learn More!

Is it possible to remove all VBA modules from an Excel file using VBA?

The names of the modules if they exist at all are unknowns before running this script.

Community's user avatar

asked Aug 29, 2013 at 18:30

user1283776's user avatar

user1283776user1283776

18.8k43 gold badges135 silver badges268 bronze badges

Obviously, you can. The following code will do the job:

Sub compact_code()

On Error Resume Next
    Dim Element As Object
    For Each Element In ActiveWorkbook.VBProject.VBComponents
        ActiveWorkbook.VBProject.VBComponents.Remove Element
    Next

End Sub

This will remove all modules including ClassModules and UserForms but keep all object modules (sheets, workbook).

answered Aug 29, 2013 at 18:47

Kazimierz Jawor's user avatar

Kazimierz JaworKazimierz Jawor

18.8k7 gold badges35 silver badges55 bronze badges

3

Here is a similar alternative that removes only the ClassModules:

On Error Resume Next
With wbk.VBProject
    For x = .VBComponents.Count To 1 Step -1
        If .VBComponents(x).Type = vbext_ct_StdModule Then
            .VBComponents.Remove .VBComponents(x)
        End If
    Next x
End With
On Error GoTo 0

answered Aug 29, 2013 at 19:00

user1283776's user avatar

user1283776user1283776

18.8k43 gold badges135 silver badges268 bronze badges

0

Хитрости »

1 Май 2011              300350 просмотров


Что такое модуль? Какие бывают модули?

Любой код VBA должен где-то храниться. Для хранения кодов в VBA используются модули, которые хранятся в книге. Книга может содержать сколько угодно модулей. Каждый модуль в свою очередь может содержать множество процедур(макросов).
Все имеющиеся в книге модули можно посмотреть через редактор VBA (Alt+F11). Имеющиеся модули отображены в левой части редактора в проводнeике объектов(Project Explorer).
Объекты проектарис.1
Сам проводник объектов может быть не отображен по умолчанию и тогда его необходимо отобразить: нажать Ctrl+R либо в меню редактора VBA-ViewProject Explorer
Проводник объектов

Модули делятся на пять основных типов:

  • Стандартный модуль
  • Модуль листа
  • Модуль книги
  • Модуль пользовательской формы
  • Модуль класса
  • Перенос, импорт и экспорт модуля

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

Для того, чтобы создать новый стандартный модуль(Module), модуль класса(ClassModule) или пользовательскую форму(UserForm) надо просто в окне Проводника объектов(Project Explorer) щелкнуть правой кнопкой мыши, выбрать пункт Insert и затем тип добавляемого объекта(ModuleClassModuleUserForm). Так же добавить модуль можно и через меню: Insert -тип модуля.
Удалить тоже просто: щелкнуть правой кнопкой мыши на нужном модуле в окне проекта и выбрать Remove. Подробнее про удаление описано в конце этой статьи: Удаление модулей

 
СТАНДАРТНЫЙ МОДУЛЬ
на рис.1 Module1.
Самый распространенный тип модулей, который используется в большинстве случаев. Именно в них макрорекордер создает записываемые макросы. Все коды и процедуры в таких модулях пишутся вручную, либо копируются из других источников(другого модуля, с этого сайта и т.п.). В основном именно в стандартных модулях содержится большая часть кодов. Они предназначены для хранения основных процедур и Public переменных, которые могут быть доступны впоследствии из любого модуля. Как создать стандартный модуль: в окне проводника объектов щелкаем правой кнопкой мыши-InsertModule. При записи макрорекордером модули создаются автоматически и им автоматически присваиваются имена.
Многие коды, опубликованные в статьях на сайте необходимо размещать именно в стандартных модулях. Для этого достаточно создать новый стандартный модуль, скопировать текст кода с сайта и вставить.

 
МОДУЛЬ ЛИСТА
Лист1 или Sheet1 — на рис.1: Лист1(Лист1),Лист2(Лист2),Лист3(Лист3).
Для каждого листа книги имеется свой отдельный модуль. Попасть в модуль листа проще, чем в остальные модули. Для этого надо просто щелкнуть правой кнопкой мыши по ярлычку листа и выбрать из контекстного меню пункт Исходный текст(View Code)

в зависимости от версии Excel этот пункт на русском может называться так же: Просмотреть код или Исходный код

:
Перейти в модуль листа

Можно и более трудным путем пойти — через редактор VBA: Alt+F11 и в окне Проводника объектов(Project Explorer) дважды щелкнуть по объекту с именем листа или правая кнопка мыши на модуле листа —View code.
Размещая код в модуле листа следует помнить, что при копировании или переносе данного листа в другую книгу код так же будет скопирован, т.к. является частью листа. Это и плюс и минус одновременно. Плюс в том, что разместив код в модуле листа можно использовать этот лист в качестве шаблона для распространения со своими кнопками вызова этих кодов(в том числе создания книг кодом) и весь функционал будет доступен. Минус же заключается в некоторых нюансах обращения к ячейкам(подробнее можно ознакомиться в этой статье: Как обратиться к диапазону из VBA) и необходимости размещения ВСЕХ используемых процедур в этом листе, иначе при переносе в другие книги коды могут работать с ошибками.

В модуле листа содержатся встроенные событийные процедуры, каждая из которых отвечает за обработку определенного события на этом листе. Посмотреть их можно так: выбираете объект(на рисунке ниже список в левой части) Worksheet, а в правом списке выбираете событие(в этом списке все процедуры, доступные для выбранного листа):
Окно выбора процедур и объектов
Процедуры, события для которых уже используются, выделяются жирным шрифтом.

Названия событийных процедур носят достаточно информативные имена и большая их часть не нуждается в тщательной расшифровке. Но самые наиболее части применяемые в любом случае считаю нужным описать:

  • Activate — возникает при активации самого листа(но не возникает, если произошел переход из одной книги в другую и этот лист является там активным)
  • BeforeDoubleClick — возникает при двойном клике мыши на любой ячейке листа. Важно обращать внимание на передаваемые аргументы: Target и Cancel. Target — ссылка на ячейку, в которой было произведено действие; Cancel — отвечает за отмену режима редактирования
  • BeforeRightClick — возникает при клике правой кнопкой мыши на любой ячейке листа. Важно обращать внимание на передаваемые аргументы: Target и Cancel. Target — ссылка на ячейку, в которой было произведено действие; Cancel — отвечает за отмену показа всплывающего меню
  • Calculate — возникает при пересчете функций и формул на листе
  • Change — возникает при изменении значений ячеек на листе. Важно обращать внимание на передаваемый аргумент Target. Target — ссылка на ячейку, которая была изменена. Может отличаться от активной в момент обработки ячейки
  • Deactivate — возникает при переходе с этого листа на другой лист этой же книги
  • FollowHyperlink — возникает при переходе по гиперссылке, созданной в этом листе
  • SelectionChange — возникает при изменении адреса выделенной ячейки/области. Важно обращать внимание на передаваемый аргумент Target. Target — ссылка на диапазон ячеек, которые были выделены. Совпадает с выделенными на текущий момент ячейками

Достаточно важный момент: если захотите познакомиться поближе с событийными процедурами, всегда обращайте внимание на переменные, которые передаются в качестве аргументов в процедуру. В большинстве случаев рекомендую использовать именно эти переменные, а не выдумывать всякие возможности для вычисления объекта, который послужил причиной возникновения события. Для события листа Worksheet_Change это переменная Target. Для примера вставьте приведенный ниже код в модуль любого листа:

Private Sub Worksheet_Change(ByVal Target As Range)
    MsgBox "Адрес измененной ячейки: " & Target.Address & _
           "; Адрес активной ячейки: " & Selection.Address, vbInformation, "www.excel-vba.ru"
End Sub

После этого запишите в ячейку A1 значение 5 и нажмите Enter. Событие Change сработает в момент завершения редактирования — т.е. в момент нажатия Enter. При этом будет произведен переход на ячейку A2(в большинстве случаев, если настройками не задано иное) и появится сообщение, которое покажет, что изменили ячейку A1, а выделена сейчас A2. Т.е. Target — это всегда ссылка именно на измененную ячейку независимо от того, что сейчас выделено. Данное событие(Worksheet_Change) не будет срабатывать при изменении значений ячеек с формулами. Только ручной ввод.

Примечание: для всех кодов, приведенных на сайте, достаточно просто открыть необходимый модуль(книги или листа) и вставить предложенный код. Корректировка может понадобиться только в случаях, когда в модуле Листа или Книги вашего файла уже имеется код в необходимой событийной процедуре.

 
МОДУЛЬ КНИГИ
ЭтаКнига или ThisWorkbook:
ЭтаКнига
В модуль книги можно попасть только через проводник объектов(Project Explorer) редактора VBA — двойной щелчок по ЭтаКнига (ThisWorkbook) или правая кнопка мыши на модуле —View code. В модуле книги так же содержатся «встроенные» событийные процедуры. Так же как и для листа выбираем в списке объектов(вверху слева) Workbook. В правом окне выбора процедур, так же как и с модулем листа, будут все процедуры, доступные для объекта ЭтаКнига. Пример использования событийных процедур книги можно посмотреть в статье Как отследить событие(например выделение ячеек) в любой книге?
Но там применяются все те же правила — главное не забывать про аргументы, доступные из этих процедур и передаваемые им самим Excel. Например, для события Workbook_BeforeClose доступен аргумент Cancel. Это можно использовать, если не хотите, чтобы книгу закрыл пользователь, не заполнив ячейку A1. Вот пример подобного кода:

Private Sub Workbook_BeforeClose(Cancel As Boolean)
    If Me.Sheets("Отчет").Range("A1").Value = "" Then
        MsgBox "Необходимо заполнить ячейку A1 на листе 'Отчет'", vbCritical, "www.excel-vba.ru"
        Cancel = True 'отменяем закрытие книги
    End If
End Sub

Из кода видно, что на листе «Отчет» должна быть не пустой ячейка A1(лист «Отчет» тоже должен существовать в этой книге). Но есть и еще одна вещь — какое-то Me. Это краткое обращение к объекту модуля класса, в данном случае это равнозначно обращению ThisWorkbook. И еще один пример кода для модуля ЭтаКнига, который запрещает сохранять исходную книгу, разрешая сохранить её только через пункт Сохранить как(SaveAs):

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
    If SaveAsUI = False Then 'используется простое сохранить
        MsgBox "Эта книга является шаблоном. Сохранять её можно только через Сохранить как", vbCritical, "www.excel-vba.ru"
        Cancel = True 'отменяем сохранение книги
    End If
End Sub

Такое может потребоваться, если книга является шаблоном с полями для заполнения и необходимо предотвратить случайное сохранение исходного документа. Хотя это можно так же сделать без макросов — книгу можно сохранить с правами только на чтение.

 
МОДУЛИ ФОРМ
UserForm — на рис.1 UserForm1.
Содержатся внутри

Пользовательской формы(UserForm)

и её объектов. В Пользовательских формах в основном все завязано именно на событийных процедурах самой формы и на элементах этой формы(Кнопки, ТекстБоксы, КомбоБоксы(выпадающие списки) и т.д.). Очень удобно использовать Пользовательские формы в своих приложениях для общения с пользователем. Т.к. через формы очень удобно отслеживать действия пользователя и можно запретить доступ к листам с данными, путем их скрытия. Создается форма так же как и модуль: в окне проводника объектов щелкаем правой кнопкой мыши-InsertUserForm. Примеры кодов с использованием форм можно посмотреть в статьях: Каждому пользователю свой лист/диапазон, Как оставить в ячейке только цифры или только текст?

 
МОДУЛЬ КЛАССА
ClassModule — на рис.1 Class1.
В большинстве случаев создается специально для отслеживания событий различных объектов. Вряд ли понадобиться начинающим изучение VBA, хотя все зависит от поставленной задачи. Но обычно начинающим изучать это кажется слишком сложным. В любом случае, перед работой с модулями классов лучше научиться хоть чуть-чуть работать с обычными модулями и самостоятельно писать процедуры. Как добавить такой модуль: в окне проводника объектов щелкаем правой кнопкой мыши-InsertClass Module. Подробнее про модули классов и работу с ними можно почитать в этой статье: Работа с модулями классов. Там описаны все основные принципы и приложен файл примера.

УДАЛЕНИЕ МОДУЛЯ

Действия по удалению любого из модулей одинаковы для всех типов. Для этого необходимо перейти в проект VBA нужной книги, выбрать нужный модуль, щелкнуть по нему правой кнопкой мыши и в появившемся меню выбрать Remove (Имя модуля)…(Remove Module1, Remove UserForm1, Remove Class1 и т.п.). После этого появится окно с запросом «Do you want to export (имя модуля) before removing it?». Это означает, что VBA спрашивает: хотите ли Вы сохранить копию кодов модуля перед удалением? Как правило выбирать следует Нет. Но если Вы хотите сохранить текст кодов из удаляемого модуля в отдельном файле, то соглашаетесь, нажав Да. Будет предложено выбрать папку для сохранения модуля и можно даже задать ему отдельное имя.

ПЕРЕНОС, ИМПОРТ и ЭКСПОРТ МОДУЛЯ

Иногда нужно модуль из одной книги переместить в другую. Сделать это можно несколькими способами. Самый простой — открыть обе книги, перейти в проводник проектов -найти нужный модуль -захватить его левой кнопкой мыши и не отпуская кнопку перетащить на проект другой книги:
Копирование между книгами
Следует помнить, что так можно перенести и скопировать только стандартный модуль, модуль класса и модуль

UserForm

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

ЭтаКнига

(откуда хотим копировать) -копируем весь код -переходим в модуль ЭтаКнига второй книги и вставляем скопированное:
Копировать модуль листа/книги

Экспорт модуля(сохранение в отдельный файл)

Если же надо сохранить стандартный модуль, модуль класса или модуль формы и не переносить сразу же в другую книгу, то можно экспортировать модуль. Для чего это может быть нужно? Как правило, чтобы перенести коды из дома на работу, переслать кому-то на другой ПК(пересылка файла с макросами может быть запрещена политикой безопасности компании) и т.п. Делается это просто: щелкаем на модуле правой кнопки мыши —Export file.
У экспортируемых модулей есть разные расширения, в зависимости от типа модуля. Для стандартных модулей это

.bas

(Module1.bas), для модулей класса —

.cls

(Class1.cls). А вот для модулей форм будет создано целых два файла:

UserForm1.frm

и

UserForm1.frx

. Их важно хранить вместе — один без другого не может быть импортирован в дальнейшем в файл. В файле

.frx

хранится информация об визуальном отображении формы и её элементах, если можно так сказать. В файле

.frm

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

Импорт модуля(перенос экспортированного ранее в новую книгу)

Для переноса экспортированного модуля в другую книгу надо просто в проводнике объектов выделить нужный проект правой кнопкой мыши —Import module -выбрать в диалоговом окне нужный модуль.
Экспортировать можно любой модуль, а вот импортировать — нет. Модули листов и книг хоть и экспортируются в отдельные файлы(кстати, с расширением .cls), но импортировать их не получится в том виде, как это предполагается. Они будут импортированы как новые модули класса и только. Поэтому для переноса кодов из модулей листов и книг придется использовать все равно копирование и вставку непосредственно кодов.
И в довершение — можно переносить модули автоматически, кодами VBA: Как добавить код процедуры программно, скопировать модуль

Также см.:
Копирование модулей и форм из одной книги в другую
Что такое макрос и где его искать?
Как удалить макросы в книге?


Статья помогла? Поделись ссылкой с друзьями!

  Плейлист   Видеоуроки


Поиск по меткам



Access
apple watch
Multex
Power Query и Power BI
VBA управление кодами
Бесплатные надстройки
Дата и время
Записки
ИП
Надстройки
Печать
Политика Конфиденциальности
Почта
Программы
Работа с приложениями
Разработка приложений
Росстат
Тренинги и вебинары
Финансовые
Форматирование
Функции Excel
акции MulTEx
ссылки
статистика

In this article we will create a macro to delete module from the workbook.

We will be using the MainModule as raw module.

ArrowMainModule

We want to get rid of this MainModule.

Click on this button for the same.

ArrowMain

ArrowOutput

Logic explanation

In this article, we have created two macros, DeleteVBComponent and calling_procedure.

DeleteVBComponent

It takes the workbook name and module name as inputs, and deletes the module from the workbook.

calling_procedure

It is used to call the DeleteVBComponent macro with the active workbook and MainModule as inputs.

Code explanation

Application.DisplayAlerts = False

This code is used to disable the alert message.

wb.VBProject.VBComponents.Remove wb.VBProject.VBComponents(CompName)

This code is used to remove the module from the workbook.

Application.DisplayAlerts = True

This code is used to enable the alert message.

Please follow below for the code

Option Explicit

Sub DeleteVBComponent(ByVal wb As Workbook, ByVal CompName As String)

'Disabling the alert message
Application.DisplayAlerts = False

'Ignore errors
On Error Resume Next


'Delete the component
wb.VBProject.VBComponents.Remove wb.VBProject.VBComponents(CompName)

On Error GoTo 0

'Enabling the alert message
Application.DisplayAlerts = True

End Sub

Sub calling_procedure()

    'Calling DeleteVBComponent macro
    DeleteVBComponent ActiveWorkbook, "MainModule"
    
End Sub

If you liked this blog, share it with your friends on Facebook. Also, you can follow us on Twitter and Facebook.

We would love to hear from you, do let us know how we can improve our work and make it better for you. Write to us at info@exceltip.com

При первой вставке модуля в VBA ему автоматически будет присвоено имя «Модуль1», А последующий модуль станет Module2, Module3 и т. Д. Аналогичным образом, когда вы вставляете пользовательскую форму, она будет называться UserForm1, UserForm2 и т. Д.

Переименование модуля

Чтобы переименовать модуль или форму, вам необходимо включить окно свойств в вашем VBE.

Если окна свойств не отображаются, нажмите F4 или перейдите в строку меню и выберите Вид, Характеристики Окно.

  1. Щелкните модуль, который хотите переименовать, в Обозреватель проекта.
  2. Выберите свойство name в Окно свойств (модуль будет иметь только это свойство; форма имеет несколько свойств)

3. Удалите имя модуля (в данном случае Module1) и введите имя, которое вы хотите назвать своим модулем.

4. Нажмите Enter, чтобы переименовать модуль.

Таким же образом вы переименовываете свои формы.

Удаление модуля

Иногда вам может потребоваться удалить модуль или форму, которые вам больше не нужны.

Щелкните правой кнопкой мыши модуль или форму, которые вы хотите удалить, чтобы отобразить контекстное меню, вызываемое правой кнопкой мыши.

Нажмите Удалять (в этом случае Модуль2)

ИЛИ

Нажать на Файл меню, а затем нажмите Удалите (Module2).

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

Чаще всего, когда вы удаляете модуль или форму, это происходит потому, что он вам не нужен, поэтому нажмите Нет.

Именование модулей и форм

Рекомендуется переименовывать модули и формы, чтобы дать им более понятные имена. Например, если UserForm1 будет формой для ввода сведений о счете, мы можем переименовать ее в frmInvoices. Точно так же, если Module1 будет использоваться для хранения некоторых общих функций, которые будут повторно использоваться в вашем коде, вы можете переименовать его в basGeneral или modGeneral (в зависимости от того, какие соглашения об именах вы хотите использовать).

Рекомендуется соблюдать соглашения об именах как при именовании ваших модулей и форм, так и переменных, которые вы используете в своем коде. Вы заметите, что я написал первые 3 буквы имени модуля или формы в нижнем регистре и поставил заглавную букву в начале описания модуля или формы. Это известно как CamelCase (https://en.wikipedia.org/wiki/Camel_case) и является хорошей привычкой при именовании объектов. Я также использовал соглашение об именах Лешинского, которое часто используется программистами Visual Basic. (https://en.wikipedia.org/wiki/Leszynski_naming_convention).

Вы поможете развитию сайта, поделившись страницей с друзьями

 

Можно ли из списка модулей (в окне проекта) удалить те, которые пусты и не нужны, а также формы, которые не будут использоваться

 

Inter_E

Пользователь

Сообщений: 399
Регистрация: 01.01.1970

Посмотри тему, недавно у меня было «Чистка Кодов». Там все подробно описано! Желаю удачи!

With my best regards,      Inter_E

 

я не могу ту тему просмотреть (((((((, вы не могли бы мне еще раз описание прислать. Та тема от 26/06 10:19. Заранее благодарю

 

Да чего там смотреть — все что не нужно или пустые смело удаляйте. Почистите кукисы и все темы будут доступны

 

Inter_E

Пользователь

Сообщений: 399
Регистрация: 01.01.1970

да Dik, прав!

With my best regards,      Inter_E

 

ЯЮ понимаю что смело, но я их просто чищу, а сам модуль никак не могу удалить, только добавить новый

 

Правой кнопкой по модулю, Remove, Нет.

 

Inter_E

Пользователь

Сообщений: 399
Регистрация: 01.01.1970

я вам говорю вот в теме которую я создал «Чистка Кодов», как раз таки модуль удаляет!!!!,  
а мне наоборот надо было не удалять модуль а чистить, вот и обменялись, можете мне прислать чистку макросов! заранее спасибо!

With my best regards,      Inter_E

 

просто мороки много с импортом файлов, потом еще удалять из созданной папки, короче говоря спасибо Inter_E. Просмотрела наконец ту тему ))))))). Просто кукисы как-то не хотели удаляться ))))))))))). СПАСИБОЧКИ. Твой вариант просто гуд

 

Inter_E…..to….Mario

Гость

можете мне прислать чистку макросов! заранее спасибо!

 
 

Mario, читайте внимательно: Правой кнопкой по модулю, Remove, Нет. Просто нажмите НЕТ и накакой мороки.

 

если честно я сам не пробовал, мне кажется Pavel прислал!  
Вы когда нибудь пришлете мне наконец-то, чистку отдельныз макросов?

 

Павел присылал в той теме ссылку, но там нужно поковыряться

http://msoffice.nm.ru/faq/macros/module.htm#faq47

 

блин, ну новичек я ((((((. Я вообще подумала вы мне замите ))))). Типа не пробовала??? нет??? СПАСИБО ))))

 

Удаление строк из модуля  

  ИмяПроекта..VBProject.VBComponents.Item(«Имя модуля»).CodeModule.DeleteLines(№,Количество)  

  Где  
№ — Номер строки в модуле с которой будут удаляться строки  
Количество – количество удаляемых строк

 

Определение количества строк в модуле  

  ИмяПроекта.VBProject.VBComponents.Item(«Имя модуля»).CodeModule.CountOfLines  

  Удаление модулей проекта  

  ИмяПроекта.VBProject.VBComponents.Remove  _    

  ИмяПроекта.VBProject.VBComponents.Item(«ИмяМодуля»)

 

Inter_E

Пользователь

Сообщений: 399
Регистрация: 01.01.1970

Спасибо! А как по названию макроса улалять код с модуля или с листа или с этакнига?

With my best regards,      Inter_E

 

Inter_E, а чем вам не подошёл макрос, который я вам уже давал неделю назад?  

    ‘Source:

http://msoffice.nm.ru/faq/macros/module.htm#faq47  

Sub DeleteProcedure()  
Dim iProcedure As String  
Dim iVBComponent As Object  
Dim iStartLine As Long  
Dim iCountLines As Long  
Dim Killed As Boolean  
   iProcedure = InputBox(Prompt:=»Введите имя макроса,» & _  
   vbCrLf & «который требуется удалить», Title:=»Удаление макроса»)  
   If iProcedure$ = «» Then _  
   MsgBox «Вы не указали имя ненужного макроса», 48, «Ошибка»: Exit Sub  
   For Each iVBComponent In ActiveWorkbook.VBProject.VBComponents  
       With iVBComponent.CodeModule  
            If .Find(«Sub » & _  
               iProcedure$, 1, 1, .CountOfLines, 1) = True Then  
               iStartLine& = .ProcStartLine(iProcedure$, 0)  
               iCountLines& = .ProcCountLines(iProcedure$, 0)  
               .DeleteLines iStartLine&, iCountLines&  
               Killed = True  
               Exit For  
            End If  
       End With  
   Next  
   If Killed = True Then  
       MsgBox «Макрос » & iProcedure$ & » удалён!», 64, «Удаление макроса»  
   Else  
       MsgBox «Макрос » & iProcedure$ & » не найден!», 48, «Удаление макроса»  
   End If  
End Sub

 

………..to Pavel55

Гость

Спасибо, Pavel! Пока я тот не использовал, там модули удалялись, а вот это самый раз будет наверно, когда я применю!  
У меня щас другая проблемка, в другой теме >>>Проверка на наличие букв или цифр. ч-2. VBA <<<<  
Можете решить?  
Заранее благодарен!

 

{quote}{login=………..to Pavel55}{date=03.07.2008 12:26}{thema=………..to Pavel55}{post}Спасибо, Pavel! Пока я тот не использовал, там модули удалялись, а вот это самый раз будет наверно, когда я применю!  
У меня щас другая проблемка, в другой теме >>>Проверка на наличие букв или цифр. ч-2. VBA <<<<  
Можете решить?  
Заранее благодарен!{/post}{/quote}  

    Подскажите, пожалуйста, мне нужно удалить модуль, в Имя_проекта.Модуль есть свойство только сохранить этот модуль, ничего похожего на удаление нет.  
Почему так?

 

Serge

Пользователь

Сообщений: 11308
Регистрация: 01.01.1970

 

{quote}{login=Serge 007}{date=22.03.2010 01:53}{thema=}{post}А как же Remove?{/post}{/quote}  

  Remove нет!  
Если вот так писать ThisWorkbook.VBProject.VBComponents.Remove  
пишет, что Argument not optional

 

{quote}{login=The_Prist}{date=22.03.2010 02:07}{thema=}{post}Потому что необходимо указать имя или индекс удаляемого элемента:  

  ThisWorkbook.VBProject.VBComponents.Remove ThisWorkbook.VBProject.VBComponents(«Module2»){/post}{/quote}  

  А нужно прямо всю строчку эту писать?  

  У меня пишет, что  Application-definded or object definded error

 

{quote}{login=The_Prist}{date=22.03.2010 02:18}{thema=Re: Re: }{post}{quote}{login=}{date=22.03.2010 02:15}{thema=Re: }{post}А нужно прямо всю строчку эту писать?  

  У меня пишет, что  Application-definded or object definded error{/post}{/quote}А я-то откуда знаю, что Вам там писать? У Вас есть такой модуль = «Module2»? Напишите как Вы удаляете по моему примеру и какой именно модуль хотите удалить.{/post}{/quote}  

  Вместо Module2 я конечно вставляю название своего модуля. Оно у меня называется CSV

 

{quote}{login=The_Prist}{date=22.03.2010 02:29}{thema=}{post}Еще раз:  

  НАПИШИТЕ КАК ВЫ УДАЛЯЕТЕ МОДУЛЬ СОГЛАСНО МОЕГО ПРИМЕРА{/post}{/quote}  

    Private Sub DeleteModule()  
ThisWorkbook.VBProject.VBComponents.Remove ThisWorkbook.VBProject.VBComponents(«CSV_EDI»)  
End Sub

 

{quote}{login=The_Prist}{date=22.03.2010 02:37}{thema=}{post}Итак, модуль так и называется — CSV_EDI.  
Какого класса модуль? Обычный, модуль книг или модуль листа?  
Модуль этот действительно расположен в той же книге, что и сам макрос?  

  Проставлена ли галка доверия к проекту в параметрах?{/post}{/quote}  

    Модуль обычный, да, все в 1й книге!  
Если я выбираю Vbaproject.CSV_EDI , то CSV_EDI в списке есть у Vbaproject.  

  Если галка доверия, это Dockable, то она есть

 

{quote}{login=The_Prist}{date=22.03.2010 03:04}{thema=Re: Re: }{post}{quote}{login=}{date=22.03.2010 02:57}{thema=Re: }{post}Если галка доверия, это Dockable, то она есть{/post}{/quote}Нет, не Dockable.  

  Excel 2007 — Меню-Параметры Excel-Центр управления безопасностью-Параметры макросов-поставить галочку «Доверять доступ к объектной модели проектов VBA»; Excel 2003 — Сервис — Параметры-вкладка Безопасность-Парметры макросов-Доверять доступ к Visual Basic Project{/post}{/quote}  

  А в 2003 Экселе?  
Безопасность сделала самой низкой.

 

Guest

Гость

#29

22.03.2010 15:26:17

{quote}{login=The_Prist}{date=22.03.2010 03:21}{thema=Re: Re: Re: Re: }{post}{quote}{login=}{date=22.03.2010 03:19}{thema=Re: Re: Re: }{post}А в 2003 Экселе?{/post}{/quote}Вы читали хоть мой пост Выше? Там для обеих версий написано!{/post}{/quote}  

  СПАСИБО!!!! ВЫ ГЕНИЙ!

Home / VBA / VBA Module | Insert, Remove, Restore, and BackUp

What is VBA Module

VBA module is a “.bcf” extension file that holds the code in the visual basic editor. Each module has its own code window where you can write. You can insert a new module, delete, backup, and import it. In simple words, it’s like a text file that you open in the notepad.

In this tutorial, we will learn all about using a module in VBA.

  1. First of all, open the Project Window if it’s not there already.
  2. Next, right-click on the project (Excel File) in which you want to insert a module.
  3. After that, go to the Insert and click on the “Module”.
  4. Once you do that, you will instantly get a new module and can open its code window to write the code.

You can also go to the insert menu and then the module to insert it.

When you insert a new module, VBA creates a separate folder for all the modules that you have in the project.

Delete a VBA Module

  1. Click on the project from which you want to delete a module.
  2. Now right-click on the module that you want to delete and click “Remove”.
  3. After that, you need to confirm if you wish to back up the module before deleting it.
  4. In the end, click on “Yes” to delete it.

There’s one thing that you need to know here when you click on the remove option, it asks you to back up your module before removing it (if you want).

It’s a smart way to remind you to get the backup of the module.

Export and Import a VBA Module

You can also import and export a module from one Excel file to another instead of copy-pasting the codes. This is one of the best ways to share your codes with others. When you right-click on a module you have both options there.

As I said earlier, you can save a module as a “.bcf” file and import it in the future or some other Excel file.

Quick Tip: If you want to copy an entire module to a different project whose Excel file is open at the time. Drag and Drop that module to the project where you want to copy it.

Normal VBA Modules Vs. Class Modules

When you insert a new module, you can see an option to insert a class module. But there’s a slight difference between both modules. As you have understood all about the standard modules, class modules are special modules that can help you create your custom objects. You can also define methods, properties, and events for those objects. And when you create a new object from the class module, you can refer to it from the standard module as well.

Понравилась статья? Поделить с друзьями:

А вот еще интересные статьи:

  • Как удалить матрицу в excel
  • Как удалить много ячеек в excel
  • Как удалить массив данных в excel
  • Как удалить много пустых строк в excel
  • Как удалить маркеры в word

  • 0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии