Страницы: 1
RSS
Макрос не сохраняется в редакторе VBA., Макрос не сохраняется в редакторе или сохраняется только в той книге в которой создан.
 

Всем здоровья. OS W7 x32, Excel 2016. Ранее, выгружая из модуля профессиональной программы файл Excel, открывал окно «Разработчик» → «Макросы». Там были видны нужные для запуска макросы и другие макросы. Сейчас какие бы действия ни выполнял — макрос после новой загрузки файла не отображается. В сохраненном файле макрос виден, в выгружаемом — отсутствует. Каждый раз при выгрузке приходится заново вставлять нужный макрос. Видимо, дело в настройках. Если кто сталкивался с такой проблемой — подскажите решение. Вариант «Находится в…» проверял.

Действия при сохранении:

  1. На вкладке Разработчик нажимаю Visual Basic (либо Alt+F11).

  2. В окне проекта слева выбираю файл (или PERSONAL.XLSB).

  3. Щелкаю правой кнопкой мыши по проекту → Вставить → Модуль. Открывается чистый лист для ввода кода.

  4. Вставляю скопированный код и закрываю редактор.

Где допущена ошибка?

 
Цитата
Алексей Панов написал: макрос после новой загрузки файла не отображается.
Возможно выгружаемый файл сразу сохраняется в формате без поддержки макросов.
Нужно смотреть в настройках этой ' профессиональной программы '
Согласие есть продукт при полном непротивлении сторон
 
Цитата
Алексей Панов написал:
в выгружаемом — отсутствует
выгруженный файл сохраняется после вставки? Если да - после открытия именно этого файла кода нет внутри VBE или он не отображается в диалоговом окне "Макросы"?
Какой формат этого "выгруженного файла"?
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Цитата
написал:
выгруженный файл сохраняется после вставки? Если да - после открытия именно этого файла кода нет внутри VBE или он не отображается в диалоговом окне "Макросы"?Какой формат этого "выгруженного файла"?
Формат выгруженного файла xlsx. Ранее он выгружался и сохранялся (и в окне отображались нужные мне макросы, сейчас их нет в окне) После вставки макроса он просил сохранения с поддержкой макрос.Сохраняю с поддержкой макрос, но  даже с поддержкой, в окне, макросы не отображаются. Пробовал и на W10x64 результат тот же. Во вложении файл обработанный макросом.  
 
Цитата
написал:
выгруженный файл сохраняется после вставки? Если да - после открытия именно этого файла кода нет внутри VBE или он не отображается в диалоговом окне "Макросы"?Какой формат этого "выгруженного файла"?
Сам макрос:
Скрытый текст
Изменено: Sanja - 17.04.2026 05:01:54 (Код в сообщении оформляйте соответствующим тегом (<...> на панели). Длинный код можно спрятать под спойлер (SP))
 
Цитата
написал:
выгруженный файл сохраняется после вставки? Если да - после открытия именно этого файла кода нет внутри VBE или он не отображается в диалоговом окне "Макросы"?Какой формат этого "выгруженного файла"?
Выгрузка:
 
Цитата
написал:
Возможно выгружаемый файл сразу сохраняется в формате без поддержки макросов.Нужно смотреть в настройках этой ' профессиональной программы '
Это не тот случай.
 
Цитата
Алексей Панов написал: Это не тот случай.
Цитата
Алексей Панов написал: Формат выгруженного файла xlsx
Как раз тот. Этот формат - без поддержки макросов
Цитата
Алексей Панов написал: Ранее он выгружался и сохранялся
Может раньше он выгружался в старом формате (*.xls)? Там макросы поддерживаются
Согласие есть продукт при полном непротивлении сторон
 
Цитата
Алексей Панов написал:
Выгрузка:
Согласие есть продукт при полном непротивлении сторон
 
Цитата
Алексей Панов написал:
Во вложении файл обработанный макросом
вполне вроде нормальный рабочий файл. Макросы на месте. Как минимум в модуле листа.
Цитата
Алексей Панов написал:
Сам макрос
где он расположен? В какой момент выполняется? Как производится сохранение файла? В макросе сохранения нет - следовательно, это происходит либо другим кодом, либо руками. И где-то по пути что-то идет не так, как должно.
Цитата
Алексей Панов написал:
Выгрузка
что с ней надо сделать? Выполнить приложенный выше код? Или что? опишите порядок действий, чтобы можно было воспроизвести. Но если сохраняете в формат .xlsx - то все верно, макросы будут удалены. Внимательно прочитайте сообщение, которое появляется - там может быть написано, что файл содержит макросы и "если хотите сохранить файл БЕЗ НИХ" - нажмите Сохранить(или Ок). Многие не читая, жмут ОК, предполагая, что файл будет сохранен с макросами, хотя все как раз наоборот. Надо жать Нет - и выбрать формат файла с поддержкой макросов(xlsm или xsb и т.п.).
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Цитата
написал:
что с ней надо сделать? Выполнить приложенный выше код? Или что? опишите порядок действий, чтобы можно было воспроизвести. Но если сохраняете в формат .xlsx - то все верно, макросы будут удалены. Внимательно прочитайте сообщение, которое появляется - там может быть написано, что файл содержит макросы и "если хотите сохранить файл БЕЗ НИХ" - нажмите Сохранить(или Ок). Многие не читая, жмут ОК, предполагая, что файл будет сохранен с макросами, хотя все как раз наоборот. Надо жать Нет - и выбрать формат файла с поддержкой макросов(xlsm или xsb и т.п.).
Алгоритм действий (моя последовательность, может, что то не так?)
1. Открываем выгруженный файл "17.04.2026-export.xlsx";
2. Вставляем в него макрос (VBA -> ЭтаКнига -> Insert -> Module);
3. Alt+F11 -> Макросы -> В окне "Макрос" выбираем макрос -> "Выполнить";
4. Получаем файл "Книга1-Excel";
5. Файл "Книга1-Excel" -> "Сохранить как..." -> 17.04.2026-time-export.xlsm с поддержкой макросов.

Эту последовательность приходится повторять каждый раз при выгрузке файла "17.04.2026-export.xlsx". Ранее после выгрузки файла "17.04.2026-export.xlsx" можно было сразу открыть окно "Макросы" и далее по алгоритму: в окне "Макрос" выбираем макрос -> "Выполнить". Сейчас окно "Макрос" пустое.
 
Цитата
Алексей Панов написал:
Ранее после выгрузки файла "17.04.2026-export.xlsx" можно было сразу открыть окно "Макросы" и далее по алгоритму: в окне "Макрос" выбираем макрос -> "Выполнить".
так может раньше макрос находился в какой-то другой книге, которая загружалась вместе с Excel?
Если сохранить макрос в персональной книге макросов - PERSONAL.XLSB и при вызове окна макросов в вып.списке выбрать - Все книги - найдете там нужные макросы?
Почему они могли пропасть: PERSONAL.XLSB может порой "обнуляться" - иногда это происходит по вине ИТ-шников, если происходили какие-либо обновления или сканирования систем ПК. Т.е. книга PERSONAL.XLSB может в принципе быть удалена или повреждена. Впоследствии она создается заново, но это уже другая книга.
Можете сохранять свои макросы в файле надстройки, поместить надстройку в папку надстроек(при сохранение в формат надстроек Excel сам предложит именно эту папку) и подключить надстройку к Excel(чтобы запускалась при запуске приложения). Тогда макросы в ней будут доступны так же, как в PERSONAL.XLSB, но не будет таких сюрпризов.
Подробнее о том, как создать надстройку: Как создать свою надстройку?
По сути Вам хватит описания в первой части статьи - до того момента, где описано сохранение файла. А далее подключаете: инструкция по установке надстроек
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Цитата
написал:
Можете сохранять свои макросы в файле надстройки, поместить надстройку в папку надстроек(при сохранение в формат надстроек Excel сам предложит именно эту папку) и подключить надстройку к Excel(чтобы запускалась при запуске приложения). Тогда макросы в ней будут доступны так же, как в PERSONAL.XLSB, но не будет таких сюрпризов. Подробнее о том, как создать надстройку:  Как создать свою надстройку? По сути Вам хватит описания в первой части статьи - до того момента, где описано сохранение файла. А далее подключаете:  инструкция по установке надстроек
Спасибо, данным советом  выручили. Всё работает.
 
Цитата
написал:
Можете сохранять свои макросы в файле надстройки, поместить надстройку в папку надстроек(при сохранение в формат надстроек Excel сам предложит именно эту папку) и подключить надстройку к Excel(чтобы запускалась при запуске приложения). Тогда макросы в ней будут доступны так же, как в PERSONAL.XLSB, но не будет таких сюрпризов. Подробнее о том, как создать надстройку:  Как создать свою надстройку? По сути Вам хватит описания в первой части статьи - до того момента, где описано сохранение файла. А далее подключаете:  инструкция по установке надстроек
Надстройка создана, макрос разместил в Module1, кнопка создана, гор.клавиша создана. В Module1 всё работает.  Внёс в Надстройку Module2. По аналогичной процедуре создал Module2. Внёс макрос. Не запускается. Пишет: "Argument not optional". Пытался добавить кнопку на Панель быстрого доступа, во вкладке Макросы, отображается только макрос из Module1.
Где ошибка?
Код
Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
    ' Список листов, на которых макрос НЕ должен работать
    Dim исключенныеЛисты As Variant
    Dim i As Integer
    
    исключенныеЛисты = Array("ИТОГ") ' Можно добавить другие: "Лист8", "Лист9"
    
    ' Проверяем, не находится ли текущий лист в списке исключённых
    For i = LBound(исключенныеЛисты) To UBound(исключенныеЛисты)
        If Sh.Name = исключенныеЛисты(i) Then Exit Sub
    Next i
    
    ' Очищаем заливку на всём листе, где произошло изменение
    Sh.Cells.Interior.ColorIndex = xlNone
    
    ' Проверяем, чтобы не выйти за пределы
    If Target.Row > 0 And Target.Column > 0 Then
        ' Задаем цвет строке, НО только для столбцов, где есть значения
        Dim lastCol As Long
        lastCol = Sh.Cells(Target.Row, Sh.Columns.Count).End(xlToLeft).Column
        
        If lastCol >= 1 Then
            Sh.Range(Sh.Cells(Target.Row, 1), Sh.Cells(Target.Row, lastCol)). _
            Interior.Color = RGB(255, 230, 200) 'Тёплый пастельный (персиковый оттенок)
        End If
    End If
End Sub
Не получается направить вам файл, не пропускает, большой.
Код рабочий. В другом файле функционирует. В Надстройке не хочет.
 
Цитата
написал:
создал Module2. Внёс макрос
Вы вот этот макрос пытаетесь вызвать?
Цитата
написал:
Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
Он не вызывается кнопками и правильно Вам компилятор пишет. Это событийная процедура и должна размещаться в модуле книги.
Но собственно совершенно неясно, что Вы этим всем хотите сделать.
Цитата
Алексей Панов написал:
В другом файле функционирует
Точно? Прям вот в таких же условиях: в обычном модуле Module2 и вызовом с кнопки? Что-то мне как-то не верится. Либо код не тот приведен в сообщении.
Изменено: Дмитрий(The_Prist) Щербаков - 21.04.2026 16:19:00
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Цитата
написал:
Точно? Прям вот в таких же условиях: в обычном модуле Module2 и вызовом с кнопки? Что-то мне как-то не верится. Либо код не тот приведен в сообщении.
Условия для этого макроса были другие и запускался макрос обычным способом не через кнопку. А задумка была в следующем. Создать Надстройку в которую внести макросы (как я понимаю в каждом модуле по макросу), которые можно будет запускать в той книге, которая будет под него открыта. Запускать каждый макросы с помощью кнопок. Учитывая, что я далеко не продвинуты пользователь в Excel, видимо, что то не допонимаю. Простым языком всё представлялось так. Открываю файл с определённой таблицей, из списка макросов выбираю нужный под этот файл, запускаю, получаю результат.
 
Ну тогда углубляйтесь в макросы. Выше написал уже - приведенный код не запускается с кнопки и не будет через неё работать, т.к. настроен на работу по наступлению события. В данном случае - срабатывать должен при смене выделения ячеек.
Чтобы этот код работал с кнопки - надо его переписывать. А чтобы переписать - надо знать, что им планировалось делать и при каких обстоятельствах - вдруг там вовсе не код переписывать надо, а в надстройке делать дополнения? :) И в PERSONAL этот код, кстати, тоже не работал бы. В таком виде код может работать исключительно в той книге, в которой записан и отслеживать изменения может только в ней.
Но если хотите с кнопки - можно записать его так:
Код
Sub ColorSelection()
    ' Список листов, на которых макрос НЕ должен работать
    Dim Sh As Worksheet, Target As Range
    Dim исключенныеЛисты As Variant
    Dim i As Integer
    
    Set Target = Selection
    Set Sh = Target.Parent
    исключенныеЛисты = Array("ИТОГ") ' Можно добавить другие: "Лист8", "Лист9"
     
    ' Проверяем, не находится ли текущий лист в списке исключённых
    For i = LBound(исключенныеЛисты) To UBound(исключенныеЛисты)
        If Sh.Name = исключенныеЛисты(i) Then Exit Sub
    Next i
     
    ' Очищаем заливку на всём листе, где произошло изменение
    Sh.Cells.Interior.ColorIndex = xlNone
     
    ' Проверяем, чтобы не выйти за пределы
    If Target.Row > 0 And Target.Column > 0 Then
        ' Задаем цвет строке, НО только для столбцов, где есть значения
        Dim lastCol As Long
        lastCol = Sh.Cells(Target.Row, Sh.Columns.Count).End(xlToLeft).Column
         
        If lastCol >= 1 Then
            Sh.Range(Sh.Cells(Target.Row, 1), Sh.Cells(Target.Row, lastCol)). _
            Interior.Color = RGB(255, 230, 200) 'Тёплый пастельный (персиковый оттенок)
        End If
    End If
End Sub
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Страницы: 1
Читают тему
Наверх