Auditportal.ru

Аудит Портал
0 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Как запустить макрос VBA при открытии или закрытии книги?

Открытие /активация документов Word в макросе VBA

Надеюсь, что эксперт по VB /VBA сможет мне помочь. Рассмотрим следующее: Пользователь открывает документ в Word 2003, и в макросе Normal.dot AutoOpen мы проверяем текущий документ и, если он был открыт по ссылке на веб-странице и соответствует определенным критериям приложения, мы закрываем потоковую копию и открываем оригинальный документ (который находится на общем диске, к которому, как мы можем предположить, у пользователя есть доступ):

Я думал, что мне нужно вызвать Activate, чтобы убедиться, что исходный документ был ActiveDocument, но Activate показывает ошибку 4160 «Invalid filename» > вызов. Если я прокомментирую вызов .Activate, кажется, что ActiveDocument определяется как origDoc, даже если другие документы уже были открыты (я не уверен, как управляется коллекция документов и как Word определяет, каким будет следующий ActiveDocument, если текущий ActiveDocument программно закрыт).

Значит, вызов .Open на документе явно определяет документ как ActiveDocument? Кроме того, вызывает ли вызов .Activate на уже активном документе ошибку?

Не сумев найти много документации по этому вопросу, я буду признателен за любые ваши предложения.

3 ответа

Вы допускаете ошибку:

Должен быть документ.

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

Да, открытый документ становится активным. Если вы не уверены, используйте Documents. Open(origDoc). Активировать

Во-первых, не следует использовать объект ActiveDocument без крайней необходимости, так как он очень ненадежен. Предпочтительный подход будет следующим:

При этом могут возникать следующие проблемы:

Если вы хотите снова открыть документ после того, как закрыли его один раз. Очевидно, Word /Windows не «отпускает» имя файла, и вы получаете сообщение о занятости файла или сообщение о том, что создается «временная копия». Из-за этой ошибки в методах открытия / закрытия / сохранения Office мне пришлось разработать сложную систему для создания / сохранения и приведения в порядок нескольких версий любых других документов, которые я открываю / изменяю в приложениях Word.

Используйте свойство ReadOnlyRecommended, которое устанавливается в False с помощью метода Open

Ссылка на объект документа (с именем doc, выше) может привести к серьезным ошибкам, если вы не уверены, что объект doc все еще существует, прежде чем пытаться манипулировать им. Никогда не забывайте, что Word — это прикладная платформа с открытым исходным кодом. и пользователь может сделать то, на что вы не рассчитывали. в последнюю миллисекунду или около того. Этот совет применим к любому другому объекту или свойству, которым вы можете захотеть манипулировать в Word.

если вы управляете коллекцией документов (или любой другой) без гарантируя, что документ или другой объект все еще там и действителен перед удалением или перемещением в коллекции, вы можете
получить ошибки переполнение стека . Особенно если вы попытаетесь закрыть /удалить объекты в коллекции, начиная с .item(1) . Вы необходимо удалить элементы в коллекции из последней и запомнить что подделки и указатели коллекции меняются всякий раз, когда вы .add /.remove /. закрыть элементы из них.

VBA макрос запускает другой макрос из открытой книги

На листе ThisWorkbook есть относительно простая часть кода в VBA. Этот код заполняет комбобокс именем сервера, как вы можете видеть. Макрос используется для заполнения списка баз данных во втором комбобоксе после того, как пользователь выберет сервер после открытия книги, основываясь на переменной для сервера.

Читайте так же:
Как изменить место сохранения по умолчанию в Excel?

Чтобы заполнить этот combobox, макрос под названием CB_Server_Change использует ADODB коммуникации для связи с сервером и отступы имен баз данных для выбора пользователем.

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

Когда я занялся отладкой, я обнаружил следующее. AddItem «M01-SQL-P09-DB2» к строке . При ListIndex = 0 он просто запускает макрос CB_Server_Change в листе (меню управления), где находится combobox?

Не могу понять, почему он не заполняет combobox по требованию, я не говорю о листе меню управления или макросе CB_Server_Change в макросе ThisWorkbook’s Workbook_Open() вообще.

Сталкивался ли кто-нибудь с этим раньше? Мы будем благодарны за любую помощь.

2 ответа

  • Макрос для копирования ячеек из открытой рабочей книги в другую открытую рабочую книгу, если мне неизвестен путь к файлу.

Макрос, который копирует ячейки из одной открытой рабочей книги в другую открытую рабочую книгу. если я не знаю путь к вашему PS-файлу: код должен быть сохранен в исходном рабочем каталоге

Итак, я написал макрос, который отлично работает при запуске из рабочей книги, в которой я его закодировал. Однако, чтобы сделать этот макрос полезным, мне нужно, чтобы он поддерживал несколько рабочих книг. Поскольку код ссылается на ThisWorkBook, я перенес макрос в скрытую личную рабочую книгу.

Присвоение ListIndex=0 вызывает событие OnChanged, как и выбор элемента пользователем. Я смог воспроизвести это в Excel 2013, используя:

  • Создание пустого XLSM
  • Добавление ActiveX ComboBox в Лист1
  • Выбор Developer | View Code , который создал функцию ComboBox1_Change в Sheet1 .
  • Добавление Debug.Print «Changed» к ComboBox1_Change

В ThisWorkbook добавляется подраздел:.

Сохраните, закройте и откройте снова. Результат (в ближайшем окне) :

Таким образом, можно попробовать одно из двух:

ListIndex не должен быть определен. Если я закомментирую эту строку, событие Change не срабатывает (я не получаю сообщение «Changed» в непосредственном окне).

Используйте идею @Nathan_Sav: вручную скажите коду Change combobox, чтобы он ничего не делал.

Пример второй мысли:

В ThisWorkbook добавим переменную:

Добавить в лист 1:

Таким образом, если вы все еще инициализируетесь (все еще в Workbook_Open ), вы можете пропустить код, который вы не хотите выполнять. Когда я открываю рабочую книгу с приведенным выше кодом, я не получаю сообщение «Changed» в непосредственном окне, указывающее на то, что инициализированный тест работает правильно.

Когда вы заполняете, возможно, вы запускаете событие изменения. Попробуйте добавить public var под названием blnSetup или что-то подобное. При заполнении и после изменения установите его в true и false соответственно, и проверьте этот параметр в событии изменения.

Таким образом, в случае изменения комбинации

  • Как запустить макрос из определенной рабочей книги с помощью Win32::OLE?

Как указать, какой макрос Excel запускается из какой книги, если открыто несколько книг (с помощью Win32:OLE w/ Perl)? Я использую следующий код, но иногда он не работает, если открыто несколько книг Excel. Очевидно, что нужно просто закрыть другие книги, но моя работа не так проста.

Я хочу сделать макрос, который копирует данные из открытой рабочей книги, которую я получаю по электронной почте. Рабочая книга начинается с Open Order Monitoring. и заканчивается переменной. Я хочу, чтобы макрос распознавал первые три слова, а затем выбирал нужную открытую книгу для копирования.

Похожие вопросы:

Спасибо. Я просто пытаюсь понять, как запустить макрос из одной книги и применить его к другой открытой книге. Вот чего я надеюсь добиться.

Во-первых, позвольте мне объяснить, почему я задаю этот вопрос, чтобы было понятно, что мне нужно нечто большее, чем команда Application.run. Если у кого-то есть способ решить проблему другим способом, то есть.

Я хотел бы скопировать макрос из одной рабочей книги Excel в другую с помощью VBA, возможно ли это? Если да, то как?

Макрос для копирования ячеек из открытой рабочей книги в другую открытую рабочую книгу. Если я не знаю путь к вашему PS-файлу: код должен быть написан в исходной рабочей книге.

Итак, я написал макрос, который отлично работает при запуске из рабочей книги, в которой я его закодировал. Кроме того, мне нужно, чтобы макрос мог работать с разными рабочими книгами. Я.

(Использование Win32:OLE с Perl) Есть ли способ указать, какой макрос Excel запускается из какой рабочей книги, если уже открыто несколько рабочих книг? Я использую следующий код, но иногда он не работает, если его открыть.

Я хочу создать макрос, который копирует данные из листа открытых заказов, который я получаю по электронной почте. Имя рабочей книги всегда начинается с Open Order Monitoring [. ] и заканчивается переменной. Я хочу.

Я пытаюсь написать макросВ в рабочей книгеВ , который открывает другую рабочую книгуА и запускает макросА на листе1. Я погуглил и нашел два метода: using Application.Run Dim i As Integer, a As Integer.

Можно ли создать макрос VBA в Excel на основе строковой переменной? Предположим, у нас есть FirstMacro: Sub FirstMacro() Dim MyString MyString = Sub SecondMacro() & Chr(13) & Chr(10) & MsgBox .

Я хотел сохранить весь мой проект VBA в рабочей книге Excel (или другом типе файла, если это возможно), а затем интегрировать его для запуска в другой рабочей книге. Я видел несколько тем об этом, но я нашел.

1. 4. Четыре способа запуска макроса

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

Самый простой, но и самый неудобный способ — использовать окно макросов, которое можно открыть с помощью меню Tools | Macro | Macro

Рисунок 1.2. Диалоговое окно макроса

Для запуска макросов можно использовать кнопки в этом окне: Выполнить — запустить макрос;

Откройте редактор Visual Basic и запустите пошаговое выполнение макроса.

Вам нужно лишь открыть макрос в Visual Basic;

Создать — необходимо ввести имя создаваемого макроса и редактор Visual Basic автоматически создаст процедуру с указанным вами именем;

Органайзер — изменить описание и назначенную комбинацию клавиш.

Каждый раз открывать это окно, находить нужный макрос (а их, например, несколько десятков) и нажимать кнопку Выполнить — не самый быстрый вариант. В результате он вряд ли понравится вашим пользователям, а работать над ним самостоятельно не очень удобно. В результате у вас есть несколько более удобных вариантов.

Если вы постоянно используете макрос, можно воспользоваться самым быстрым способом его активации — сочетанием клавиш. Например, когда я пишу эту книгу, я «устанавливаю» простые макросы на сочетания клавиш, которые пишут нужный мне текст. Если мне нужно набрать «Visual Basic», я нажимаю +; если мне нужно набрать Microsoft Office, я нажимаю +. На клавиатуре

Среди них заголовки, маркированные списки и абзацы. Верстка в моей вики (без макросов). Очень удобно!

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

Макрос может быть назначен на комбинацию клавиш довольно легко.

Используя Word, перейдите на вкладку Команды в том же окне под названием Инструмент | Параметры. После щелчка на кнопке Клавиатура откроется окно Настройка клавиатуры (рис.) 1.3).

В списке Категории выберите Макросы , в списке Команды выберите созданный вами макрос, установите указатель ввода в поле Новая комбинация клавиш и нажмите нужную комбинацию. Помимо обычных сочетаний клавиш, таких как +*1>, + и т.д., вы можете использовать и более сложные. Используя макросы, вы можете вставить две версии названия вашей организации: длинную и короткую. Этим макросам можно присвоить сочетания клавиш, такие как +, и +. Таким образом, вы сможете выполнить макрос, если сначала нажмете клавишу +, а затем клавишу ,. В поле Новая комбинация клавиш введите эту комбинацию клавиш так, как вы будете ее применять.

После ввода нужного сочетания клавиш нажмите клавишу

Назначьте, а затем закройте.

Основы программирования в Microsoft Office

Рисунок 1.3. Окно настройки сочетания клавиш

Обратите внимание на заголовок «Текущее задание» в этом диалоговом окне. Возможно, что выбранному ярлыку уже назначен другой макрос или встроенная команда. Если вы проигнорируете это сообщение, вы переназначите комбинацию на свой макрос. Однако если вы привыкли использовать эти клавиши для других целей (+, + и т.д.), вы можете быть очень недовольны.

Когда вы находитесь в окне настройки Excel (Инструменты | Настройка), кнопки клавиатуры выделены цветом.

Вы не найдете. В этом случае необходимо назначить сочетания клавиш другим способом: в меню Сервис выберите Макросы | Макросы, выберите нужный макрос из списка и нажмите кнопку Параметры. Появится диалоговое окно Параметры макроса (рис. 1.4), в котором можно выбрать нужную комбинацию клавиш (только в сочетании с клавишей ) и ввести описание макроса. В принципе, любое сочетание клавиш также можно назначить макросу в Excel, но это нельзя сделать простым способом: вам придется написать программный код, перехватывающий события приложения.

Как мы уже говорили, имеет смысл назначать сочетания клавиш только тем макросам, которые вы используете регулярно. Но как быть с полезными макросами, которые активно используются, например, в отчете

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

Рисунок 1.4. Диалоговое окно настроек макросов

Лучшее решение в этой ситуации — назначить макрос на пункт меню или кнопку на панели управления. Возможно, даже лучше назначить пункт меню — больше возможностей для организации макросов и использования понятных имен. Однако быстрее нажимать кнопки на панели инструментов, так что выбирайте сами, что вам больше нравится. Создание и настройка новой панели инструментов для активации макросов в Word может выглядеть следующим образом

В меню Инструменты выберите пункт Конфигурация и затем выберите вкладку Приборная панель.

2. Нажмите кнопку Создать, введите имя панели (например, My_macros ) и выберите документ, в котором она будет создана. Если выбрать Normal.dot, панель будет доступна для всех документов Word на данном компьютере (что обычно необходимо). Другой вариант — создать панель инструментов в открытом документе Word. В этом случае панель инструментов будет доступна только из этого файла.

3. После нажатия кнопок OK и Закрыть будет создана новая пустая панель инструментов (расположенная где-то в верхней части документа). Чтобы сделать его более удобным, перетащите его на стандартные панели инструментов, а затем снова используйте команду главного меню

Обслуживание | Настройка . Когда появится окно Setup, перейдите на вкладку Commands, а затем нажмите Finish.

Выберите Макросы в списке Категории и просто перетащите нужные макросы из списка Команды на панель инструментов. Если вы хотите разместить на панели инструментов более одного макроса, вам может понадобиться

Основы программирования в Microsoft Office

Будет удобнее нажать кнопку Упорядочить команды и воспользоваться очень удобным диалоговым окном Изменение порядка команд

Рис. 1.5. Диалоговое окно изменения порядка команд

Мы добавили соответствующие кнопки на панель инструментов, но пока они выглядят не очень интересно (например, Normal.NewMacros.QueryTable ). Вряд ли это имя что-то говорит пользователю. Поэтому следующим шагом будет настройка кнопок. Для этого щелкните правой кнопкой мыши кнопку панели инструментов, которую вы хотите настроить, при открытом окне Customize (обязательное условие!). Откроется специальное контекстное меню (Рисунок 1.6).

Это меню позволяет

Удалить — удалить кнопку (можно также просто перетащить ее обратно с панели в окно настроек);

Имя — введите имя, т.е. надпись на кнопке или пункте меню. Надпись удобно использовать для меню, а не для кнопки на панели инструментов, так как она занимает много места;

Вставьте символ кнопки в поле «Символ кнопки» — Re-.

Используйте понравившийся значок с другой кнопки;

Рисунок 1.6: Контекстное меню для настройки кнопки панели инструментов

Изменить значок на кнопке — открывается редактор сообщений, где вы можете самостоятельно нарисовать нужный значок;

Значок для кнопки можно выбрать из 42 стандартных значков. Список значков только в Word составляет несколько тысяч;

Основной стиль: под этой надписью находится то, что мы обычно хотим: чтобы кнопка была представлена только изображением без надписи;

Только текст (всегда) , Только текст (в меню) , Иконка и текст — определяемые -.

Кнопка используется для указания набора букв/изображений, которые будут отображаться на кнопке. Наиболее часто используемый вариант — это, конечно, Базовый стиль;

Вертикальная линия (разделитель) появляется слева от кнопки, когда вы выбираете Начать группу;

Назначить гиперссылку: назначает ссылку на другое место в документе или на страницу в интернете.

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

Базовые навыки программирования в Microsoft Office

Создание меню происходит несколько иным способом:

Снова откройте то же диалоговое окно (Tools | Setup в панели меню).

2. Выберите Новое меню в списке Категории.

Было бы удобнее нажать кнопку Упорядочить команды и воспользоваться очень удобным диалоговым окном Изменить порядок команд

Рис. 1.7. Диалоговое окно настроек

4. Затем, когда окно конфигурации открыто, щелкните правой кнопкой мыши на созданном вами пункте меню и переименуйте его (в нашем примере назовите его Macros).

Затем нажмите кнопку Организовать заказы в окне Настройки.

В открывшемся диалоговом окне Изменение порядка команд (рис. 1.8) выберите Макросы из списка в строке меню и добавьте необходимые элементы (т.е. созданные вами макросы). Вы можете переименовать их с помощью кнопки Редактировать выделенный объект прямо из этого окна.

В результате может получиться очень красивое меню, в котором пользователю трудно запутаться (Рисунок 1.9).

В Excel есть очень похожая функция, но она немного отличается от Word. Если в Excel открыть окно Настройка (меню Сервис | Настройка ) и в списке Категории выбрать

Список макросов будет иметь две опции вместо списка макросов в списке Команды

Можно создать пользовательскую команду меню или пользовательскую кнопку (рис.) 1.10).

Рисунок 1.8: Окно «Упорядочение команд»

Рисунок 1.9. Пример меню для запуска макросов

Пользовательская кнопка — это готовая кнопка, которую можно перетащить на панель инструментов, после чего открыть для нее контекстное меню и использовать команду Назначить макрос. Конечно, вы также можете использовать другие опции контекстного меню, доступные в Word, для выбора значков, форматов отображения и т.д.

В Excel вы создаете новое меню таким же образом, как и в Word, а затем нажимаете кнопку Organize Commands и добавляете в это меню несколько пунктов под названием Customizable Menu Commands . Фактическая настройка (включая назначение макросов) этих переменных выполняется нажатием кнопки Редактировать выделенное .

Базовые навыки программирования в Microsoft Office

Рисунок 1.10: Создание кнопки для запуска макросов в Excel

Для большинства других приложений Office (PowerPoint, Project, Outlook и др. При использовании Word макросы обрабатываются так же, как в Word.

Есть еще один способ дать пользователю возможность запускать макросы, который является наиболее функциональным, но и наиболее трудоемким: создать специальную графическую форму, на которой можно разместить, например, выпадающий список макросов. Макрос может «подхватывать» параметры, введенные таким образом во время выполнения (параметры не могут быть переданы макросам напрямую, поскольку макрос — это процедура, которая не параметризована). Однако для этого требуется кодирование. В главе 5 описывается работа с формами и элементами управления на них. После этого создать такую форму не составит труда.

Можно также запланировать выполнение макросов при наступлении особого события. Например, вы можете внести изменения в лист Excel, открыть книгу Excel или открыть документ Word. Подробнее о работе с событиями будет рассказано в главе 5. Если вы хотите запустить макрос автоматически, без программирования, можно просто дать ему специальное имя. Для Word список специальных имен представлен в табл. 1.1.

голоса
Рейтинг статьи
Ссылка на основную публикацию
Adblock
detector