Макросы Excel – Понимание кодов
Когда вы записываете макрос, Excel сохраняет его как код VBA. Вы можете просмотреть этот код в редакторе VBA. Вы можете понять код и изменить его, если у вас есть значительные знания Excel VBA. Вы можете обратиться к учебнику по Excel VBA в этой библиотеке учебников, чтобы понять язык.
Однако вы все равно можете просмотреть код макроса в редакторе Excel VBA и сопоставить его с шагами, которые вы записали в макросе. Вы узнаете, как просматривать код и понимать его для первого макроса, который вы создали в этом руководстве – MyFirstMacro.
Просмотр макрокода в VBA Editor
Чтобы просмотреть код макроса, выполните следующие действия:
- Откройте книгу, в которой вы сохранили макрос.
- Нажмите вкладку VIEW на ленте.
- Нажмите Макросы.
- Выберите View Macros из выпадающего списка.
Откроется диалоговое окно «Макрос».
- Нажмите MyFirstMacro в списке макросов.
- Нажмите кнопку Изменить.

Откроется редактор VBA и появится код макроса MyFirstMacro.

Понимание записанных действий как частей кода
Вы можете просмотреть код макроса и сопоставить их с вашими записанными шагами.
- Начните читать код.
- Сопоставьте код с записанными шагами.

Прокрутите код, чтобы увидеть больше кода. Кроме того, вы можете увеличить окно кода.

Обратите внимание, что код прост. Если вы изучите Excel VBA, вы можете создать макросы, написав код в редакторе VBA.
Вы узнаете, как написать код VBA для создания макроса, в главе «Создание макроса с помощью редактора VBA».
Редактор Visual Basic — как открыть и использовать в Excel

Первым шагом к работе с VBA в Excel является ознакомление с редактором Visual Basic (также называемым редактором VBA или редактором VB).
В этом руководстве я расскажу все, что нужно знать о редакторе VBA, и некоторые полезные параметры, которые вы должны знать при кодировании в Excel VBA.
Что такое редактор Visual Basic в Excel?
Редактор Visual Basic — это отдельное приложение, которое является частью Excel и открывается всякий раз, когда вы открываете книгу Excel. По умолчанию он скрыт, и для доступа к нему необходимо активировать его.
VB Editor — это место, где вы храните код VB.
Получить код в редакторе VB можно несколькими способами:
- Когда вы записываете макрос, он автоматически создает новый модуль в редакторе VB и вставляет код в этот модуль.
- Вы можете вручную ввести код VB в редакторе VB.
- Вы можете скопировать код из другой книги или из Интернета и вставить его в редактор VB.
Открытие редактора VB
Открыть редактор Visual Basic в Excel можно разными способами:
- Использование сочетания клавиш (самый простой и быстрый)
- Используя вкладку разработчика.
- Использование вкладок рабочего листа.
Давайте быстро пройдемся по каждому из них.
Сочетание клавиш для открытия редактора Visual Basic
Самый простой способ открыть редактор Visual Basic — использовать сочетание клавиш — ALT + F11 (удерживая клавишу ALT, нажмите клавишу F11).

Как только вы это сделаете, откроется отдельное окно для редактора Visual Basic.
Этот ярлык работает как переключатель, поэтому при повторном использовании он вернет вас в приложение Excel (без закрытия редактора VB).
Ярлык для версии Mac: Opt + F11 или Fn + Opt + F11
Использование вкладки разработчика
Чтобы открыть редактор Visual Basic с ленты:
- Перейдите на вкладку "Разработчик" (если вы не видите вкладку "Разработчик", прочтите, как ее получить).
- В группе «Код» щелкните Visual Basic.

Использование вкладки рабочего листа
Это менее используемый метод открытия редактора Vb.
Перейдите на любую из вкладок рабочего листа, щелкните правой кнопкой мыши и выберите «Просмотреть код».

Этот метод не просто откроет редактор VB, он также перенесет вас в окно кода для этого объекта рабочего листа.
Это полезно, когда вы хотите написать код, который работает только для определенного рабочего листа. Обычно это происходит с событиями рабочего листа.
Анатомия редактора Visual Basic в Excel
Когда вы открываете редактор VB в первый раз, это может показаться немного подавляющим.
Существуют различные варианты и разделы, которые сначала могут показаться совершенно новыми.
Кроме того, он все еще выглядит как старый Excel 97 дней. Хотя дизайн и удобство использования Excel значительно улучшились за последние годы, редактор VB не претерпел каких-либо изменений в своем внешнем виде.
В этом разделе я познакомлю вас с различными частями приложения Visual Basic Editor.
Примечание. Когда я начал использовать VBA несколько лет назад, меня поразили все эти новые параметры и окна. Но когда вы привыкнете работать с VBA, вы освоитесь с большинством из них. И в большинстве случаев вам не нужно будет использовать все возможности, а только ручную работу.
Ниже представлены изображения различных компонентов редактора VB. Затем они подробно описаны в следующих разделах этого руководства.

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

В большинстве случаев панель инструментов по умолчанию — это все, что вам нужно при работе с редактором VB.
Вы можете переместить панель инструментов над строкой меню, щелкнув три серые точки (в начале панели инструментов) и перетащив ее над строкой меню.
Примечание. В редакторе VB есть четыре панели инструментов — Стандартная, Отладка, Редактировать и Пользовательская форма. То, что вы видите на изображении выше (которое также используется по умолчанию), является стандартной панелью инструментов. Вы можете получить доступ к другим панелям инструментов, перейдя к параметру «Просмотр» и наведя курсор на параметр «Панели инструментов». Вы можете добавить одну или несколько панелей инструментов в редактор VB, если хотите.
Обозреватель проекта
Обозреватель проекта — это окно слева, в котором отображаются все объекты, открытые в настоящее время в Excel.
Когда вы работаете с Excel, каждая открытая книга или надстройка является проектом. И в каждом из этих проектов может быть набор объектов.
Например, на изображении ниже в Project Explorer показаны две открытые книги (Book1 и Book2) и объекты в каждой книге (рабочие листы, ThisWorkbook и Module в Book1).
Слева от объектов есть значок плюса, который можно использовать, чтобы свернуть список объектов или развернуть и просмотреть полный список объектов.

Следующие объекты могут быть частью Project Explorer:
- Все открытые книги — в каждой книге (которая также называется проектом) вы можете иметь следующие объекты:
- Объект рабочего листа для каждого листа в книге
- ThisWorkbook объект который представляет собой книгу
- Таблица объект для каждого листа диаграммы (они не так распространены, как рабочие листы)
- Модули — Здесь идет код, созданный с помощью средства записи макросов. Вы также можете написать или скопировать код VBA сюда.
- Все открытые надстройки
Рассматривайте Project Explorer как место, где отображаются все объекты, открытые в Excel в данный момент.
Сочетание клавиш для открытия Project Explorer: Ctrl + R (удерживайте контрольную клавишу, а затем нажмите R). Чтобы закрыть его, просто щелкните значок закрытия в правом верхнем углу окна Project Explorer.
Примечание. Для каждого объекта в Project Explorer есть окно кода, в котором вы можете написать код (или скопировать и вставить его откуда-нибудь). Окно кода появляется при двойном щелчке по объекту.
Окно свойств
Окно свойств — это то место, где вы можете увидеть свойства выбранного объекта. Если у вас еще нет окна «Свойства», вы можете получить его с помощью сочетания клавиш F4 (или перейдите на вкладку «Просмотр» и нажмите «Окно свойств»).
Окно свойств — это плавающее окно, которое можно закрепить в редакторе VB. В приведенном ниже примере я закрепил его чуть ниже Project Explorer.

Окно свойств позволяет нам изменять свойства выбранного объекта. Например, если я хочу сделать рабочий лист скрытым (или очень скрытым), я могу сделать это, изменив свойство Visible для выбранного объекта рабочего листа.

Окно кода
Для каждого объекта, перечисленного в Project Explorer, есть окно кода. Вы можете открыть окно кода для объекта, дважды щелкнув его в области Project Explorer.
Окно кода — это то место, где вы будете писать свой код или копировать и вставлять код из другого места.
Когда вы записываете макрос, его код попадает в окно кода модуля. Excel автоматически вставляет модуль для размещения в нем кода при записи макроса.
Немедленное окно
Окно Immediate в основном используется при отладке кода. Один из способов использования окна Immediate — использование оператора Print.Debug в коде с последующим запуском кода.
Это помогает мне отлаживать код и определять, где мой код застревает. Если я получаю результат Print.Debug в непосредственном окне, я знаю, что код работал, по крайней мере, до этой строки.
Если вы новичок в кодировании VBA, вам может потребоваться некоторое время, чтобы использовать немедленное окно для отладки.
По умолчанию непосредственное окно не отображается в редакторе VB. Вы можете получить его, используя сочетание клавиш Control + G (или можете перейти на вкладку «Просмотр» и нажать «Немедленное окно»).
Куда добавить код в редакторе VB
Я надеюсь, что теперь у вас есть общее представление о том, что такое VB Editor и какие в нем части.
В этом разделе этого руководства я покажу вам, где добавить код VBA в редактор Visual Basic.
Есть два места, где вы можете добавить код VBA в Excel:
- Окно кода для объекта. Этими объектами могут быть рабочая книга, рабочий лист, пользовательская форма и т. Д.
- Окно кода модуля.
Окно кода модуля против окна кода объекта
Позвольте мне сначала быстро пояснить разницу между добавлением кода в модуль и добавлением кода в окне объектного кода.
Когда вы добавляете код к любому из объектов, он зависит от какого-либо действия этого объекта, которое запускает этот код. Например, если вы хотите отобразить все рабочие листы в книге, как только вы откроете эту книгу, тогда код будет помещен в объект ThisWorkbook (который представляет книгу).
В данном случае триггер открывает книгу.
Точно так же, если вы хотите защитить рабочий лист, как только активируется какой-либо другой рабочий лист, код для этого будет помещен в окно кода рабочего листа.
Эти триггеры называются событиями, и вы можете связать код, который будет выполняться при возникновении события.
Напротив, код в модуле должен выполняться вручную (или его также можно вызывать из других подпрограмм).
Когда вы записываете макрос, Excel автоматически создает модуль и вставляет в него записанный код макроса. Теперь, если вам нужно запустить этот код, вам нужно вручную выполнить макрос.
Добавление кода VBA в модуль
При записи макроса автоматически создается модуль и вставляется в него код, однако при использовании средства записи макросов существуют некоторые ограничения. Например, он не может использовать циклы или условия If Then Else.
В таких случаях лучше либо скопировать и вставить код вручную, либо написать код самостоятельно.
Модуль может использоваться для хранения следующих типов кодов VBA:
- Декларации: Вы можете объявлять переменные в модуле. Объявление переменных позволяет указать, какой тип данных может содержать переменная. Вы можете объявить переменную только для подпрограммы или для всех подпрограмм в модуле (или всех модулях)
- Подпрограммы (процедуры): Это код, в котором есть шаги, которые вы хотите выполнить с помощью VBA.
- Функциональные процедуры: Это код, который возвращает одно значение, и вы можете использовать его для создания пользовательских функций (также называемых пользовательскими функциями или UDF в VBA).
По умолчанию модуль не является частью книги. Вам необходимо вставить его перед использованием.
Добавление модуля в редактор VB
Ниже приведены шаги по добавлению модуля:
- Щелкните правой кнопкой мыши любой объект книги (в котором вы хотите установить модуль).

- Наведите курсор на опцию Вставить.
- Щелкните по модулю.

Это мгновенно создаст папку с именем Module и вставит объект с именем Module 1. Если у вас уже есть вставленный модуль, вышеупомянутые шаги будут вставлять другой модуль.

После того, как модуль вставлен, вы можете дважды щелкнуть объект модуля в Project Explorer, и он откроет для него окно кода.
Теперь вы можете скопировать и вставить код или написать его самостоятельно.
Удаление модуля
Ниже приведены шаги по удалению модуля в Excel VBA:
- Щелкните правой кнопкой мыши модуль, который хотите удалить.
- Нажмите на опцию «Удалить модуль».

- В открывшемся диалоговом окне нажмите Нет.

Примечание. Вы можете экспортировать модуль перед его удалением. Он сохраняется как файл .bas, и вы можете импортировать его в другой проект. Чтобы экспортировать модуль, щелкните модуль правой кнопкой мыши и выберите «Экспорт файла».
Добавление кода в окно объектного кода
Чтобы открыть окно кода для объекта, просто дважды щелкните по нему.
Когда он откроется, вы можете ввести код вручную или скопировать и вставить код из других модулей или из Интернета.
Обратите внимание, что некоторые объекты позволяют выбрать событие, для которого вы хотите написать код.
Например, если вы хотите написать код, чтобы что-то происходило при изменении выбора на листе, вам нужно сначала выбрать листы из раскрывающегося списка в верхнем левом углу окна кода, а затем выбрать событие изменения из раскрывающегося списка. -вниз справа.

Примечание: эти события относятся к объекту. Когда вы откроете окно кода для книги, вы увидите события, связанные с объектом книги. Когда вы откроете окно кода для рабочего листа, вы увидите события, связанные с объектом рабочего листа.
Настройка редактора VB
Хотя настройки редактора Visual Basic по умолчанию достаточно хороши для большинства пользователей, они позволяют дополнительно настраивать интерфейс и некоторые функции.
В этом разделе руководства я покажу вам все параметры, которые у вас есть при настройке редактора VB.
Чтобы настроить среду редактора VB, нажмите «Инструменты» в строке меню, а затем нажмите «Параметры».
Это откроет диалоговое окно Параметры, которое предоставит вам все параметры настройки в редакторе VB. В диалоговом окне «Параметры» есть четыре вкладки (как показано ниже), на которых можно настроить различные параметры редактора Visual Basic.

Давайте быстро рассмотрим каждую из этих вкладок и важные параметры на каждой из них.
Вкладка "Редактор"
Хотя встроенные настройки в большинстве случаев работают нормально, позвольте мне все же пройтись по параметрам на этой вкладке.
По мере того, как вы станете более опытным в работе с VBA в Excel, вы можете настроить редактор VB, используя некоторые из этих параметров.
Автоматическая проверка синтаксиса
При работе с VBA в Excel, как только вы сделаете синтаксическую ошибку, вас встретит всплывающее диалоговое окно (с некоторым описанием ошибки). Что-то вроде того, что показано ниже:

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

В приведенном выше случае я использовал переменную Var, но не объявлял ее. Поэтому, когда я пытаюсь запустить код, он показывает ошибку.
Эта опция очень полезна, когда у вас много переменных. Это часто помогает мне найти имена переменных с ошибками, поскольку они считаются необъявленными и отображается ошибка.
Примечание. Когда вы включаете этот параметр, он не влияет на существующие модули.
Автоматический член списка
Эта опция весьма полезна, поскольку помогает получить список свойств методов для объекта.
Например, если я хочу удалить лист (Sheet1), мне нужно использовать строку Sheet1.Delete.
Пока я набираю код, как только я набираю точку, он покажет мне все методы и свойства, связанные с объектом Worksheet (как показано ниже).

Функция автоматического списка хороша тем, что позволяет:
- Быстро выберите свойство и метод из списка и сэкономьте время
- Показывает все свойства и методы, о которых вы, возможно, не знали.
- Избегайте орфографических ошибок
Эта опция включена по умолчанию, и я рекомендую оставить ее в таком состоянии.
Параметры автоматической быстрой информации
Когда вы вводите функцию на листе Excel, она показывает вам некоторую информацию о функции, например, аргументы, которые она принимает.
Точно так же, когда вы вводите функцию в VBA, она показывает вам некоторую информацию (как показано ниже). Но для этого вам нужно убедиться, что опция Auto Quick Info включена (что по умолчанию).

Параметры советов по автоматическим данным
Когда вы просматриваете свой код построчно и помещаете курсор над именем переменной, он покажет вам значение переменной.
Я считаю это весьма полезным при отладке кода или при просмотре кода построчно, в котором есть циклы.

В приведенном выше примере, как только я наведу курсор на переменную (var), отобразится значение, которое она содержит.
Этот параметр включен по умолчанию, и я рекомендую вам оставить его в таком же состоянии.
Автоматический отступ
Поскольку коды VBA могут быть длинными и беспорядочными, использование отступов увеличивает читаемость кода.
При написании кода вы можете делать отступ с помощью клавиши табуляции.
Этот параметр гарантирует, что, когда вы закончите с отступом и нажмете Enter, следующая строка не начнется с самого начала, а будет иметь тот же отступ, что и предыдущая.

В приведенном выше примере после того, как я напишу строку Debug.Print и нажму Enter, она начнется прямо под ней (с тем же уровнем отступа).
Я считаю эту опцию полезной, и ее выключение означало бы вручную отступ каждой строки в блоке кода, который я хочу иметь отступ.
При желании вы можете изменить значение отступа. Я сохраняю значение по умолчанию.
Редактирование текста перетаскиванием
Когда этот параметр включен, он позволяет выбрать блок кода и перетащить его.
Это экономит время, так как вам не нужно сначала вырезать, а потом вставлять. Вы можете просто выбрать и перетащить его.
Этот параметр включен по умолчанию, и я рекомендую вам оставить его в таком же состоянии.
По умолчанию — полный вид модуля
Когда эта опция включена, вы сможете увидеть все процедуры в модуле в одном прокручиваемом списке.
Если вы отключите эту опцию, вы сможете видеть только один модуль за раз. Вам нужно будет выбрать модуль, который вы хотите увидеть, из раскрывающегося списка в правом верхнем углу окна кода.
Этот параметр включен по умолчанию, и я рекомендую оставить его в таком же состоянии.
Одна из причин, по которой вы можете захотеть отключить его, когда у вас есть несколько процедур, которые огромны и прокрутка по ним требует времени, или когда у вас много процедур, и вы хотите быстро найти их, а не тратить время на прокрутку.
Разделитель процедур
Когда эта опция включена, вы увидите линию (своего рода разделитель) между двумя процедурами.
Я считаю это полезным, поскольку он визуально показывает, когда заканчивается одна процедура и начинается другая.

Он включен по умолчанию, и я рекомендую оставить его в таком состоянии.
Вкладка "Формат редактора"
С помощью параметров на вкладке «Формат редактора» вы можете настроить внешний вид кода в окне кода.
Лично я сохраняю все параметры по умолчанию, так как меня это устраивает. Если вы хотите, вы можете настроить это в зависимости от ваших предпочтений.
Чтобы внести изменения, вам нужно сначала выбрать параметр в поле «Цвета кода». После выбора параметра вы можете изменить для него цвет переднего плана, фона и индикатора.
На этой вкладке также можно установить тип и размер шрифта. Рекомендуется использовать шрифт фиксированной ширины, например Courier New, так как он делает код более читабельным.
Обратите внимание, что настройки типа и размера шрифта останутся одинаковыми для всех типов кода (т. Е. Для всех типов кода, показанных в поле цвета кода).
Ниже приведено изображение, на котором я выбрал точку останова и могу изменить ее форматирование.

Примечание. Параметр «Полоса индикатора полей», когда он включен, показывает небольшую полоску полей слева от кода. Это полезно, так как показывает полезные индикаторы при выполнении кода. В приведенном выше примере, когда вы устанавливаете точку останова, она автоматически показывает красную точку слева от строки на полосе полей. В качестве альтернативы, чтобы установить точку останова, вы можете просто щелкнуть полосу полей слева от строки кода, которую вы хотите использовать в качестве точки останова.
По умолчанию полоса индикатора маржи включена, и я рекомендую оставить ее в таком состоянии.
Одна из моих студенток курса VBA нашла эти параметры настройки полезными, и она была дальтоник. Используя параметры здесь, она смогла установить цвет и форматы, которые упростили ей работу с VBA.
Вкладка Общие
На вкладке «Общие» есть много параметров, но изменять их не нужно.
Я рекомендую вам оставить все параметры как есть.
Одна из важных опций, о которых следует знать на этой вкладке, — это обработка ошибок.
По умолчанию выбран параметр «Прерывание по необработанным ошибкам», и я рекомендую оставить его таким же.
Этот параметр означает, что если ваш код обнаружит ошибку, и вы еще не обработали эту ошибку в своем коде, он сломается и остановится. Но если вы устранили ошибку (например, с помощью параметров «При ошибке возобновить следующий» или «При ошибке Перейти к»), то она не сломается (поскольку ошибки не обрабатываются).
Вкладка стыковки
На этой вкладке вы можете указать, какие окна вы хотите закрепить.
Закрепление означает, что вы можете зафиксировать положение окна (например, проводника проекта или окна свойств), чтобы оно не перемещалось, и вы могли просматривать все различные окна одновременно.
Если вы не установите док-станцию, вы сможете просматривать одно окно за раз в полноэкранном режиме, и вам придется переключаться на другое.
Приёмы отладки VBA-кода (на примере MS Excel)
Многие из тех, кто часто работает в MS Excel, используют книги или надстройки с VBA-макросами. Зачастую требуется доработать существующее решение, добавив новую функциональность или исправив найденный баг. В поисках места, где скрывается баг или производится нужное вычисление, можно провести немало времени, особенно если проект содержит десятки тысяч строк кода (увы, такие макросы иногда встречаются). Можно прибегнуть к текстовому поиску (например по тексту сообщения, вшитому в код), но иногда удобнее запустить макрос и прибегнуть к пошаговой отладке.
В этом посте описаны несколько приёмов, которые могут быть полезны при отладке макросов на VBA в приложениях MS Office на примере MS Excel.
1. Стандартные точки останова (breakpoint). Step-into, step-over
2. Окна Immediate («REPL-терминал»), Locals (локальные переменные), Watches (наблюдатели)
3. Условные точки останова на базе watch expression
4. Обработка ошибок
1. Самый очевидный способ отладки — поставить точку останова в начале макроса, а затем пошагово исполнять строку за строкой, наблюдая за значениями переменных и состоянием ячеек в книге. Чтобы установить точку останова, нажмите F9 — и на строке, где находится курсор,
появится такая отметка (можно установить и кликом мышью по области слева, где красный кружок):

Теперь как только поток исполнения доберётся до этой строки, он будет приостановлен, а Вы увидите желтый указатель, указывающий на следующую инструкцию:

Многие не знают, что этот указатель можно перемещать на любой statement в пределах функции, просто перетащив мышью желтую стрелку!
Когда Вы приостановили исполнение кода, можете продолжить его исполнение пошагово, с помощью команд step-into, step-over и step-out:
* step-into (F8) — шаг вперёд. Будет выполнен код на строке под указателем, а сам указатель перемещён на следующую строку. Однако если в текущей строке есть вызов другой функции, указатель переместится внутрь этой функции
* step-over (Shift-F8) — полностью аналогичен step-into, за исключением того, что эта команда позволяет не «проваливаться» в вызов вложенных функций
* step-out (Ctrl-Shift-F8) — текущая функция будет исполнена до конца, а исполнение приостановлено в вызывающей функции. Полезна, если Вы случайно провалились в длинную функцию командой step-into
Теперь немного о том, как узнать значения переменных и иную полезную информацию.
2. В нижней части экрана VBE (Visual basic editor) Вы можете увидеть три окна:
* Immediate (терминал для выполнения кода и вывода текстовой информации)
* Locals (локальные переменные)

Если Вы не видите эти окна, включите их отображение в меню View

Разберём подробнее, какие возможности открывают нам эти инструменты.
Окно Immediate представляет собой REPL-терминал, в котором можно ввести выражение и запустить его нажатием Enter. Чтобы вывести результат в этот же терминал, передайте результат выражения в функцию Debug.Print (кстати, эту функцию можно вызвать и в основном коде макроса — результат так же будет выведен в консоль Immediate). В самой консоли можно воспользоваться и сокращённой версией этой команды — знаком вопроса:

Обратите внимание, что с помощью сочетаний Ctrl+Space и Ctrl+J можно вызывать окно IntelliSense , также как и в основном редакторе кода.
Окно Locals позволяет увидеть значения переменных, доступных в текущем контексте:

Например, текущее значение счётчика цикла или состав коллекции. Обратите внимание, что для объектов Collection при раскрытии отображаются значения элементов коллекции, а для словарей (Dictionary) — их ключи. Поэтому чтобы узнать значение самого элемента в словаре, нужно вычислить выражение, например такое:
dict.Items(«key1»)
Это можно сделать при помощи «наблюдателя» — watch expression

Выделите выражение и выполните команду Add watch. в контекстном меню (доступном с помощью правой кнопки мыши), или введите нужно выражение вручную в окне добавления наблюдателя:

Осторожно: выражение d.Item(«key1») при вычислении может добавить элемент к словарю, если такой ключ в словаре отсутствует. Поэтому не забудьте удалить наблюдатель, когда он станет ненужным, иначе в дальнейшем можно провести немало времени, выясняя откуда взялся лишний элемент в словаре.
3. Условные точки останова, которые можно реализовать с помощью наблюдателей.
Вероятно, Вы обратили внимание, что в меню добавления наблюдателя помимо стандартной опции «Watch Expression» есть ещё две: «Break When Value Is True» и «Break When Value Changes». Они позволяют добиться приостановки исполнения макроса при наступлении соответствующего условия (выражение истинно, либо значение выражения изменилось). Эта возможность может оказаться особенно полезной, например, при отладке циклов. Если Вы знаете, что макрос, который в цикле обрабатывает строки на листе Excel, сталкивается с ошибкой, скажем, на строке 42, то можно избежать ручного «пролистывания» 41 предшествующей итерации, добавив выражения вида i=42 с опцией Break When Value Is True, где i — это переменная счётчика цикла.
4. Напоследок хотел бы немного рассказать об обработке ошибок в VBA.
В настройках VBE Вы можете найти выбор из трёх опций (меню Tools -> Options, вкладка General):
Break on All Errors
Break in Class Module
Break on Unhandled Errors

По умолчанию, как правило, установлена последняя опция, которая позволяет программисту обрабатывать ошибки с помощью директив On Error Goto (показать сообщение об ошибке, «прибраться за собой» — закрыть книгу или соединение) и On Error Resume Next (игнорировать ошибку и продолжать исполнение). Однако, когда Вы столкнётесь с ошибкой вида «Извините, что-то пошло не так =(«, которая отображается из обработчика в On Error Goto, будет трудно определить место, где произошла ошибка. В этом случае пригодится опция Break on All Errors, которая позволит проигнорировать директивы On Error и перейти к тому месту в коде, где и произошла ошибка. В этот момент может пригодиться и окно Locals, где Вы сможете увидеть, например, текущее значение счётчика цикла, и понять, при обработке какой строки на листе Excel возникла ошибка.
Указанные опции обработки ошибок устанавливаются на уровне настроек пользователя, и не сохраняются в VBA-проекте.
Надеюсь, что эта статья окажется полезной как начинающим пользователям VBA, так и бывалым разработчикам, которые смогут узнать что-то новое.
В свободное время я пилю надстройку общего назначения для MS Excel на платформе VSTO. Проект доступен на гитхабе под лицензией MIT (можете свободно использовать в своих проектах, форкать и изменять под свои нужды):

Призываю неравнодушных пользователей оставить пожелания по добавлению новых функций (заводите issue на гитхабе, или пишите прямо тут в комментариях), а разработчиков, знакомых с технологией VSTO (или желающих познакомиться) — присоединяться к разработке!
Это мой первый пост на Пикабу, буду рад конструктивной критике в комментариях и ЛС.

635 постов 14.5K подписчиков
Правила сообщества
2. Публиковать посты соответствующие тематике сообщества
3. Проявлять уважение к пользователям
4. Не допускается публикация постов с вопросами, ответы на которые легко найти с помощью любого поискового сайта.
По интересующим вопросам можно обратиться к автору поста схожей тематики, либо к пользователям в комментариях
Важно — сообщество призвано помочь, а не постебаться над постами авторов! Помните, не все обладают 100 процентными знаниями и навыками работы с Office. Хотя вы и можете написать, что вы знали об описываемом приёме раньше, пост неинтересный и т.п. и т.д., просьба воздержаться от подобных комментариев, вместо этого предложите способ лучше, либо дополните его своей полезной информацией и вам будут благодарны пользователи.
Утверждения вроде «пост — отстой», это оскорбление автора и будет наказываться баном.
Первый раз читаю пост про VBA, который не хочется раскритиковать) Очень грамотно описано и сам материал, и обращение к объектам, и всё остальное — новичкам будет очень полезно. Аплодирую стоя, автор молодец! Зайду теперь обязательно посмотрю на надстройку
А я до сих пор пишу программы на VB ’98 и мне не стыдно.
Полезные советы, спасибо

Помощь с макросом
Дамы и господа, добрый день.
Есть макрос который берет выделенные ячейки и сохраняет их в папку с файлом в виде картинки JPG. Мне надо чтоб сохранял заранее заданный диапазон. Сердцем чую, что ответ довольно прост, но мозгом пока не допер. Вся надежда на ваши светлые умы.


Весёлые маркеры графиков
Сегодня расскажу про простой способ разукрасить диаграммы, а именно заменить маркеры на произвольные рисунки.

Установка рисунков в качестве маркеров позволяет разнообразить внешний вид документации, сделав её нагляднее. Установка смайлов (© http://www.kolobok.us/ ) сделана в качестве примера (помните про Aiwan то? Или забыли. ).
Для гармоничного отображения требуется проредить количество маркеров, в противном случае произойдёт наложение рисунков друг на друга. О прореживании писал ранее.

Заменить маркеры на рисунки, в данном случае они представлены смайлами, можно при помощи не сложного макроса
Sub Markers_Smiles()
ActiveSheet.ChartObjects(«Диаграмма 1»).Activate
For Each icell In [C2:C102]
ActiveChart.FullSeriesCollection(1).Points(icell.Row — 1).Select
‘ Убираю рамки вокруг маркеров
Selection.MarkerForegroundColorIndex = xlNone
‘ Установка типа маркера «Рисунок»
Selection.MarkerStyle = -4147
Selection.Format.Fill.UserPicture «D:\4.gif»
If icell.Value = 0 Then Selection.Format.Fill.UserPicture «D:\1.gif»
If icell.Value = 1 Then Selection.Format.Fill.UserPicture «D:\2.gif»
If icell.Value = 2 Then Selection.Format.Fill.UserPicture «D:\3.gif»
[C2:C102] — столбец с признаками маркера. Число элементов равно числу данных (Х или Y). Может как заполняться вручную, так и быть расчётным (см.рисунок ниже).
D:\1.gif . D:\4.gif — пути к рисункам.
Аналогично производится заполнение рисунками нескольких графиков на диаграмме

Sub Прореживание_маркеров()
‘ Активируем диаграмму
ActiveSheet.ChartObjects(«Диаграмма 1»).Activate
‘ Перебор по всем графикам диаграммы
For k = 1 To ActiveChart.FullSeriesCollection.Count
‘ Удаляем все маркеры на линии
For i = 1 To ActiveChart.SeriesCollection(k).Points.Count
ActiveChart.FullSeriesCollection(k).Points(i).Select
Selection.MarkerStyle = -4142
‘ Выставляем маркеры с требуемым шагом.
For i = 1 To ActiveChart.SeriesCollection(k).Points.Count Step 4
ActiveChart.FullSeriesCollection(k).Points(i).Select
With Selection
.MarkerStyle = 8
.MarkerSize = 15
Public Sub color_graph()
ActiveSheet.ChartObjects(«Диаграмма 1»).Activate
For k = 1 To ActiveChart.FullSeriesCollection.Count ‘ Перебор по всем графикам
For Each icell In [C2:C102]
ActiveChart.FullSeriesCollection(k).Points(icell.Row — 1).Select
Selection.MarkerStyle = -4147
Selection.Format.Fill.UserPicture «D:\4.gif»
If icell.Value = 0 Then Selection.Format.Fill.UserPicture «D:\1.gif»
If icell.Value = 1 Then Selection.Format.Fill.UserPicture «D:\2.gif»
If icell.Value = 2 Then Selection.Format.Fill.UserPicture «D:\3.gif»
Аналогично разным графикам одной диаграммы можно присвоить уникальные маркеры

Sub Markers()
ActiveSheet.ChartObjects(«Диаграмма 1»).Activate
For i = 1 To ActiveChart.FullSeriesCollection.Count ‘ Перебор по всем графикам
ActiveChart.FullSeriesCollection(i).Select
Selection.MarkerForegroundColorIndex = xlNone
Selection.MarkerStyle = -4147
If i = 1 Then Selection.Format.Fill.UserPicture «D:\1.gif»
If i = 2 Then Selection.Format.Fill.UserPicture «D:\2.gif»
If i = 3 Then Selection.Format.Fill.UserPicture «D:\3.gif»
If i = 4 Then Selection.Format.Fill.UserPicture «D:\4.gif»
If i = 5 Then Selection.Format.Fill.UserPicture «D:\5.gif»
Ну или просто разными штатными маркерами разные графики. Но в автоматическом режиме — очень сокращает время подготовки документации. Полезно при подготовке к печати в чёрно-белом варианте.

Sub Установка_разных_маркеров()
ActiveSheet.ChartObjects(«Диаграмма 1»).Activate
For i = 1 To ActiveChart.FullSeriesCollection.Count ‘ Перебор по всем графикам
ActiveChart.FullSeriesCollection(i).Select
Selection.Format.Line.ForeColor.RGB = RGB(0, 0, 0) ‘ Цвета линий и маркера
Selection.Format.Line.Weight = 0.75 ‘ Установка толщины линии
Selection.MarkerStyle = i ‘ Установка типа маркера
Selection.MarkerSize = 4 ‘ Установка размера маркера
Selection.Format.Fill.ForeColor.RGB = RGB(255, 255, 255) ‘ Установка заливки маркера
Можно ли это сделать без макросов? Несомненно. Долго и нудно кликать кнопочки.

Но как по мне — проще скопировать и немного поправить код простого макроса. А в остальном — ваш выбор.

Excel триальный
Немного отвлечённый пост о защите своей работы.
Итак, общеизвестны способы закрытия информации в Excel, а именно:
1. Защита листа/книги

Выбираем разрешения/допуски, вводим пароль, сохраняем файл.
Дополнительно для каждой ячейки можно указать защищается ли она или нет. По умолчанию — защищается.
2. Защита кода

Точно так же вводим пароль (с повторением), ок, сохраняем.
Но все эти способы не более чем игрушки, и вскрываются совершенно не сложно при наличии некоторых минимальных навыков и особенно при сохранении в *.xlsm (файл с поддержкой макросов). Сохраняйте в *.xlsb (двоичный код), если хотите хоть немного защитить свою работу.
Впрочем защита листа, даже без задания пароля, очень полезная вещь позволяющая ограничить вероятность порчи документа. Например если оставить без защиты (доступными для редактирования) только ячейки с исходными данными, то сам расчёт шаловливыми ручками испорчен не будет. Довольно часто пользуюсь.
Каким же образом можно ещё затруднить использование вашей работы, кроме как не давать её?
Ну для начала надо определиться что защищаем. Если это просто текст, и вы его кому то отдали, то забудьте о защите — он общедоступен. Но документ Excel это, прежде всего расчёты. Своей масштабируемостью они и ценны — при изменении исходных данных пересчёт произойдёт автоматически.
Этим можно воспользоваться выполнив передачу результатов расчёта в виде статических таблиц. Да, можно распечатать/сохранить в pdf, или банальным Ctrl+А / Ctrl+C / Ctrl+V /только значения/. А можно просто воспользоваться простым макросом:
‘ Замена всех формул на листе в значения
Sub Form_2_Dan()
Dim a As Integer
‘ Запрашиваем подтверждение
a = MsgBox(«Внимание!» & _
Chr(10) & «Вы точно хотите заменить все формулы на листе на значения?» & _
Chr(10) & «Это необратимо!», _
52, «Замена формул на значения.»)
‘ Если OK, то замену производим
If a = 6 Then
ActiveSheet.UsedRange.Value = ActiveSheet.UsedRange.Value
Расположение макроса — модуль.
Макрос сохраняется в личный набор/надстройку и кнопка запуска выводится на панель.
Внимание! Действие макроса необратимо!
Можно сделать «триальным» расчёт разместив в модулях листов вот такого вида макрос.
Private Sub Worksheet_Activate()
Application.ScreenUpdating = False
If Date >= #10/6/2022# Then ActiveSheet.UsedRange.Value = ActiveSheet.UsedRange.Value
Application.ScreenUpdating = True
Т.е. после 10.06.2022 все расчёты с листа исчезнут. А цифры останутся.
Можно заменить проверку на заполнение ячейки, например проверить что в определённой ячейке записан автор труда «Вася Пупкин». 🙂 При смене которого всё превратится в набор цифр..
Естественно доступ к макросам должен быть закрыт/запаролен.
Ещё вариант — ввод пароля на саму книгу:
Private Sub Workbook_Open()
Dim i&, n&, P As Variant
Application.ScreenUpdating = False
If Date >= #1/2/2022# Then
For i = 1 To Sheets.Count
Sheets(i).Activate
Sheets(i).Protect «1234»
P = InputBox(«Время использования книги истекло, для продолжения введите пароль», «ВВОД ПАРОЛЯ»)
If P = «°0176» Then
For i = 1 To Sheets.Count
Sheets(i).Activate
Sheets(i).Unprotect «1234»
If n = 0 Then
Application.DisplayAlerts = False
ThisWorkbook.Close
Application.DisplayAlerts = True
MsgBox «Пароль не верный, у вас еще » & n & » попытки»
Application.ScreenUpdating = True
Расположение макроса — «Эта книга».
#1/2/2022# — дата с которой будет запрашиваться пароль
«°0176» – правильный пароль

И при открытии файл будет встречать весёлым окошком:

Естественно можно открыть файл без выполнения макросов, но если расчёт в экселе построен на использовании макросов, то цель достигнута — расчёт производиться не будет.
И да, это всё игрушки — серьёзные дяденьки с тётеньками при необходимости поломают сие поделия, и узнают как вы определяли дискриминант. (0_о). Даже если Вы применили обфускацию кода или перенос кода в dll.

Построение графиков
Сегодня разберём задачку, которая вставала перед каждым пользователем Excel — необходимость построить график функции.

Любой, кто решал эту задачку — действовал следующим способом:
1. Создаётся столбец Х;
2. Создаётся столбец Y, котором происходит расчёт согласно заданной функции;
3. Выделяются два созданных столбца и вставляется график.
Но это просто и скучно. Есть другой способ. Построить график непосредственно из макроса.
Начнём с простого — у нас есть набор точек соответствия X и Y.
Sub Построй_график_по_точкам()
Dim MyChart As Chart
Set MyChart = ActiveSheet.Shapes.AddChart2.Chart
With MyChart
.SeriesCollection.NewSeries
.SeriesCollection(1).Name = «xlXYScatterSmoothNoMarkers»
.SeriesCollection(1).XValues = Array(0#, 0.5, 1#, 1.5, 2#, 2.5, 3#, 3.5, 4#, 4.5, 5#)
.SeriesCollection(1).Values = Array(0#, 0.4794, 0.8415, 0.9975, 0.9093, 0.5985, 0.1411, -0.3508, -0.7568, -0.9775, -0.9589)
.ChartType = xlXYScatterLines ‘ Соединение точек прямыми
.SetElement msoElementLegendNone
Другие варианты отображения линии графика:
.ChartType = xlXYScatterLinesNoMarkers ‘ Соединение точек прямыми без маркеров
.ChartType = xlXYScatterSmoothNoMarkers ‘ Сглаженная линия
Более подробно о типах — тут
Сборка Array(. ) может быть выполнена с использованием программы, которую я выкладывал в 7-й части темы про оцифровку, ну или заполнить руками.
Как не трудно догадаться — вовсе не обязательно иметь готовый набор данных.
Рассмотрим ситуацию, когда требуется построить два графика на одной диаграмме.
Для упрощения восприятия использую две простые функции линий y1 = x — 20, y2 = x + 20.
Sub Создать_диаграмму()
Dim MyChart As Chart
Dim i As Integer, Xmin As Single, dX As Single, Xmax As Single, _
Ymin As Single, Ymax As Single, dY As Single
Dim X() As Single
Dim Y() As Single
Dim Yp() As Single
Xmin = 0: Xmax = 300: dX = 20 ‘ Сие больше нужно для осей и оформления
Ymin = 0: Ymax = 160: dY = 20
ReDim X(0 To Xmax — Xmin): ReDim Y(0 To Xmax — Xmin, 1 To 2)
ReDim Yp(0 To Xmax — Xmin)
For i = 0 To Xmax — Xmin Step 1
X(i) = Xmin + i
‘ Заполнение данных первого графика
Y(i, 1) = X(i) — 20
‘ Заполнение данных второго графика
Y(i, 2) = X(i) + 20
‘ создадим новую диаграмму и зададим ей габаириты
Set MyChart = ActiveSheet.Shapes.AddChart2(, , , , 300, 200).Chart
For i = 1 To 2
For j = 0 To Xmax — Xmin Step 1
With MyChart
.SeriesCollection.NewSeries
.SeriesCollection(i).XValues = X
.SeriesCollection(i).Values = Yp
.ChartType = xlXYScatterSmoothNoMarkers
При задании новой диаграммы можно задать в том числе и положение диаграммы на листе
AddChart2(Стиль,XlChartType,слева,сверху,ширина,высота,NewLayout)
В итоге получим вот такую диаграмму:

В дальнейшем можно обработать её как обычную — задать цвета, толщины и т.д. Но можно это сразу поручить нашему макросу:
Sub Создать_диаграмму()
Dim MyChart As Chart
Dim i As Integer, Xmin As Single, dX As Single, Xmax As Single, _
Ymin As Single, Ymax As Single, dY As Single
Dim X() As Single
Dim Y() As Single
Dim Yp() As Single
Xmin = 0: Xmax = 300: dX = 20 ‘ Сие больше нужно для осей и оформления
Ymin = 0: Ymax = 340: dY = 20
ReDim X(0 To Xmax — Xmin): ReDim Y(0 To Xmax — Xmin, 1 To 2)
ReDim Yp(0 To Xmax — Xmin)
For i = 0 To Xmax — Xmin Step 1
X(i) = Xmin + i
Y(i, 1) = X(i) — 20
Y(i, 2) = X(i) + 20
Set MyChart = ActiveSheet.Shapes.AddChart2(, , 0, 0, 400, 230).Chart
For i = 1 To 2
For j = 0 To Xmax — Xmin Step 1
With MyChart
.SeriesCollection.NewSeries
.SeriesCollection(i).XValues = X
.SeriesCollection(i).Values = Yp
.ChartType = xlXYScatterSmoothNoMarkers
With MyChart
.SetElement (msoElementPrimaryCategoryGridLinesMajor)
‘ Включаю отображение названия осей
.Axes(xlCategory, xlPrimary).HasTitle = True
.Axes(xlValue, xlPrimary).HasTitle = True
.Axes(xlCategory, xlPrimary).AxisTitle.Text = «Расход Go т/ч»
.Axes(xlValue, xlPrimary).AxisTitle.Text = «Давление кгс/кв.см.»
‘ Выключаю отображение легенды
.SetElement (msoElementLegendNone)
‘ Выключаю отображения заголовка диаграммы
.SetElement (msoElementChartTitleNone)
‘ Выставляем параметры осей
.Axes(xlCategory).MinimumScale = Xmin
.Axes(xlCategory).MaximumScale = Xmax
.Axes(xlCategory).MajorUnit = dX
.Axes(xlValue).MinimumScale = Ymin
.Axes(xlValue).MaximumScale = Ymax
.Axes(xlValue).MajorUnit = dY
‘ Оформление гризонтальной оси
MyChart.Axes(xlCategory).Select
With Selection.Format.Line
.Visible = msoTrue
.ForeColor.RGB = RGB(0, 0, 0)
.ForeColor.TintAndShade = 0
.ForeColor.Brightness = 0
.Transparency = 0
.Visible = msoTrue
.Weight = 1.25
‘ Оформление вертикальной оси
MyChart.Axes(xlValue).Select
With Selection.Format.Line
.Visible = msoTrue
.ForeColor.RGB = RGB(0, 0, 0)
.ForeColor.TintAndShade = 0
.ForeColor.Brightness = 0
.Transparency = 0
.Visible = msoTrue
.Weight = 1.25
‘ Оформление горизонтальной сетки
MyChart.Axes(xlValue).MajorGridlines.Select
With Selection.Format.Line
.Visible = msoTrue
.DashStyle = msoLineDash
.Visible = msoTrue
.ForeColor.RGB = RGB(0, 176, 240)
.Transparency = 0
‘ Оформление вертикальной сетки
MyChart.Axes(xlCategory).MajorGridlines.Select
With Selection.Format.Line
.Visible = msoTrue
.DashStyle = msoLineDash
.Visible = msoTrue
.ForeColor.RGB = RGB(0, 176, 240)
.Transparency = 0
По итогу диаграмма будет выглядеть так:

Как не трудно понять, данных, по которым построена диаграмма, на листе нет. И после удаления макроса останется только итоговый результат.
Кому то это покажется слишком сложным, однако открою маленький секрет — очень редкие люди пишут макрос с нуля. В 90% достаточно иметь готовый макрос (см листинг выше), заменить в нём пару строк (сменить функции, изменить диапазоны. ) и всё. По итогу построение занимает меньше времени чем построение классическим способом.
Такое построение позволит извлечь данные промежуточного расчёта, построить массово однотипные диаграммы и. и дальнейшее применение зависит только от фантазии.
Ну и всегда есть вариант удивить преподавателя (0_о).

Excel. Долгая дорога оцифровки. Часть 9. Оформление графиков, или отображение поиска решения
Итак, мы с вами имели рисунок на бумажке, перевели его в цифру (сняли точки), написали макрос, позволяющий определить значение Y по известным аргументам. В некоторых случаях этого достаточно, однако не всегда. Например для отчёта требуется указать поиск решения в графическом виде, поскольку заказчика «я фсио оцифровал! Вы не пониаити, у меня макрос!» не устраивает. Особенно когда речь идёт о больших деньгах, и проводятся гарантийные испытания с определением поправочных коэффициентов (например.). Или преподаватель в институте будет приятно удивлён красивому графику в курсовом проекте/дипломе.
Итак, по сути потребуется решить два вопроса:
1. Построить ход поиска с помощью стрелки/стрелок.
2. Совместить построенный график с изначальным рисунком.
Т.е. получить что то похожее на вот это:

На самом деле нет принципиальной разницы в начале построить поиск решения или в начале совместить рисунок с диаграммой. Но начну с построения, т.к. при этом меньше мусора на рисунках.
Часть 1. Построение поиска решения.
Итак, у нас есть заданные аргументы (G2, t1в) и результат расчёта Р2. На графике сие будет выглядеть как одна точка с координатами X = G2 = 200 (в нашем примере) и Y = Р2 = 0,065
Существуют минимум три метода построения стрелки поиска:
Вариант 1. Для вертикальной и горизонтальной части строим независимые линии.

После построения настраиваем цвета, указываем наличие стрелки, и т.д.
Для вертикальной линии второй точкой указывается точка с равным значением по Х и минимумом по бумажному графику Y.
Для горизонтальной линии второй точкой указывается точка с равным значением по Y и минимумом по бумажному графику X.
Минимумы и максимумы диаграммы выставляются равными минимумам и максимумам бумажного рисунка.
Хоть данный вариант и кажется наиболее раздутым, но на практике, когда линий поиска десяток, он наиболее удобен и понятен.
Вариант 2. Единая линия поиска.

Выставление значений дополнительных точек, и значений осей аналогично Варианту 1.
Вариант 3. Использование погрешностей для указания поиска решения.

Если точка одна, то для отображения линий погрешности необходимо перейти в настройки предела погрешности по Х и по Y поочерёдно и.

— величина погрешности «пользовательская».
В качестве отрицательной величины погрешности указываем соответственно значение X и Y

Если есть желание получить стрелку направленную к оси Y, а ось Х начинается не с 0 (в нашем случае с 2-ти), то потребуется сделать ячейку рассчитывающую смещение относительно 0.
В нашем примере сделаем такое и для X и Y:
ось Х сдвинута на 20. Соответственно имеем ячейку Хзаданное — Хсмещения = 200 — 20
ось Y сдвинута на 0,02 Соответственно имеем ячейку Yзаданное — Yсмещения
Это значения не статичны, т.е. они пересчитаются при изменении исходных данных.
При указании отображения погрешностей ссылаемся на данные ячейки.

Аналогично первым вариантам указываются свойства линий.
На самом деле третий способ самый быстрый и лёгкий, это описание сложновато. При наличии необходимости указания поиска для группы точек, и особенно отсутствии смещения 0, вот такие диаграммы делаются наиболее просто именно третьим способом.
Из минусов третьего варианта можно отметить невозможность указания выноски точек около осей, как это делается для первых двух вариантов, т.к. этих точек то и нет фактически на диаграмме.

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

Часть 2. Совмещение построенного графика с изначальным рисунком.
И опять есть минимум три варианта.
Вариант 1. Использование рисунка в качестве подложки под областью построения (то, что расположено внутри границ осей). Для этого рисунок сначала подготавливается (обрезается по размерам построения, при этом подписи осей оказываются обрезанными), а затем вставляется по пути: Формат области построения – Заливка – Рисунки и текстура – Файл / из буфера обмена;
Вариант 2. Использование рисунка в качестве подложки области диаграммы (вкладка Формат области диаграммы – Заливка – Рисунки и текстура — Файл) вставляется рисунок графика (предварительно подготовленный и очищенный. Необходимо также учитывать, что потребуется некоторая ширина полей для выставления подписей). Совмещаются границы графика Excel с границами графика рисунка перетягиванием за маркеры границы графика (перемещение указал стрелками).

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

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

при необходимости можно построить дополнительную линию. В качестве примера построена дополнительная кривая при 40°С при помощи созданной пользовательской функции при заданной температуре 40°С и переменной влажности. Аналогично построена дополнительная линия на первом рисунке

Вариант 3. При третьем варианте рисунок вставляется на лист Excel, построенный график/ подготовленная диаграмма размещается над рисунком, при этом заливка поля построения и самой диаграммы «отсутствует» или «прозрачная». После совмещения изображение и диаграмма фиксируются между собой как это было указано в посте «Нестандартные заголовки диаграмм».
Третий вариант позволяет разместить отображение поиска решения для нескольких диаграмм расположенных на одном листе, если таковое требуется заказчиком. Например на рисунке ниже на одном листе 7-мь диаграмм, и в дальнейшем данный рисунок пошёл в отчёт скомпонованный в таком виде.

Отдельно стоят диаграммы состоящие из расположенных рядом двух и более диаграмм.
Их оформление, опять же, может быть реализовано тремя способами.
Способ 1 — применение третьего варианта наложения диаграмм на рисунок (описано выше). Т.е. строим два независимых графика для левой и правой части, делаем их прозрачными и накладываем на рисунок.
Способ 2 — применение первого варианта, наложение графика на область построения (описано выше). Т.е. строим два независимых графика для левой и правой части, накладываем области построения и размещаем взаимно друг другу до совпадения минимума и максимума.
Способ 3. — пригоден только для расположенных рядом двух диаграмм. Данный способ позволяет избавится от стыка, неизбежно возникающего при первых двух способах. Основано как правило на применении второго варианта описанного выше, а именно использовании рисунка как подложки под диаграммой.
Рассмотрим один из вариантов построения стрелки на диаграмме, состоящей из двух диаграмм, при этом ширина клеток и величина шага для правого и левого графика разная.

Для наглядности оси были ярко выражены и отодвинуты относительно области построения, а графики разнесены по цветам.
Шаг 1. Построение левого графика (синий график, синяя ось, синие данные).
1. Построить точечный график по исходным данным, причём заложить небольшой перехлёст по Х (установлено 80 вместо 70-ти по рисунку);
2. Сделать подложку под диаграмму (используется весь рисунок, без обрезок или разделения на две части);
3. Растянуть область построения на рисунок;
4. Задать значения оси (диапазон) Y в соответствии с оцифровкой;
5. Задать значения оси (диапазон) Х таким образом, чтобы Хмин было равно минимальному значению на рисунке (30), а Хмакс подобрать таким образом, чтобы совпали значения рисок (40=40, 50=50, 60=60, 70=70).
Шаг 2. Построение правого графика (красный график, красный ось, красный данные).
1. Построить точечный график по исходным данным, причём минимум Х заложить равным минимуму по второй оси (0);
2. Указать построение по вспомогательным осям;
3. Задать значения вспомогательной оси (диапазон) Y в соответствии с оцифровкой;
4. Задать значения оси (диапазон) Х таким образом, чтобы Хмакс было равно максимальному значению по второй оси рисунка, а Хмин подбрать таким образом, чтобы начало второго графика легло на минимум второй оси Х рисунка.
Шаг 3. Убрать отображение подписей осей, сетки и т.д. Настроить цвета линий.
Для кого то это покажется элементарным, но я на своей практике не один раз ломал голову как выполнить графическое оформление поиска решения. Базовыми знаниями поделился. Всё дальнейшее зависит от вас. Будут вопросы — помогу по мере сил.
Пожалуй на этом закончим и серию Excel. Долгая дорога оцифровки. Всё обещанное показал, а именно:
9. Отображение поиска решения (данный пост).

Excel. Долгая дорога оцифровки. Часть 7. Автоматическое создание макроса функции с использованием кусочной интерполяции
По аналогии с Excel. Долгая дорога оцифровки. Часть 4. Макрос по созданию макросов апроксимации простых графиков полиномом и Excel. Долгая дорога оцифровки. Часть 6. Кусочная интерполяция не сложно выполняется макрос по созданию макросов оцифровки простых графиков с использованием кусочной интерполяции.

Описание вводимых данных аналогично ранее изложенному.
Если ещё немного развить тему, то и макрос создания макросов функции с двумя аргументами не проблема:

Отличием от вводимых ранее данных является требование указания критериев через точку с запятой.
Основное нововведение — определение количества графиков. Если вспомните ещё в Excel. Долгая дорога оцифровки. Часть 2. Забираем данные с листа я писал, что что «снятие точек производить от меньшего Х к большему. При наличии диаграммы зависимости от двух аргументов типаY(X1, X2) начиная с графика меньшего Х2. С обязательным условием — каждая следующая линия должна начинаться с Х меньшего, чем закончилась предыдущая.«. И теперь можно этим воспользоваться — определить количество переходов на новую линию по уменьшению Х по сравнению с предыдущим.
For i = 2 To xVal.Count
If i = xVal.Count Then
Nkon(Ndiap) = i
If xVal.Rows(i) < xVal.Rows(i — 1) Then
Nkon(Ndiap) = i — 1
Ndiap = Ndiap + 1
Nna4(Ndiap) = i
Ну а дальше просто — перебираем поочерёдно все диапазоны, для каждого определяем уравнение апроксимации.
Результирующий макрос будет иметь вид:
‘ Поправки Сербия Панчево Страница 34 из 77 Нижний рисунок
Public Function ТЭХ_ПТ80_Рис3(ByRef Go As Single, ByRef CkH As Single) As Single
Dim krit_kriv As Variant
krit_kriv = array(2.96,3.06,3.15)
Dim kriv As Variant
kriv = Array(-0.00271242 * Go + 0.100817, _
-0.00252906 * Go + 0.230858, _
0.000276671 * Go ^ 2 -0.203078 * Go + 31.5862)
ТЭХ_ПТ80_Рис3= kus_interp(krit_kriv, kriv, CkH, 2)
End Function
Не забываем удалять кавычки в начале и конце макроса при копировании в модуль.
Давайте так, чтобы не утомлять читателя выкопировкой текстовок макросов — выкладываю сие для свободной скачки/использования/модернизации
Если возникнут вопросы как сие работает, распишу. Если у кого то что то не заработает — обращайтесь, посмотрю.
В программе есть не описанный мной макрос кубического сплайна, но т.к. автор не я, и макрос выложен в общественный доступ, для ознакомления с остальными сплайнами переходите по приведённой в макросе ссылке

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

С помощью автоматического создания макросов

Позволит получить (текстовка от графика отличного от представленного выше рисунка)
‘ ТЭХ ПТ80 Рис.3 Давление в отборах при конденсационном режиме [МПа]
Public Function ТЭХ_ПТ80_Рис3(ByRef Go As Single, ByRef Название_графика As Variant) As Variant
Dim krit_graph As Variant
krit_graph = array(1,2,3)
Select Case Название_графика
Case krit_graph(0)
ТЭХ_ПТ80_Рис3 = -0.0027124 * Go ^ 1 + 0.10082
Case krit_graph(1)
ТЭХ_ПТ80_Рис3 = -0.0025397 * Go ^ 1 + 0.23509
Case krit_graph(2)
ТЭХ_ПТ80_Рис3 = -0.0026659 * Go ^ 1 + 0.4529
ТЭХ_ПТ80_Рис3 = 999999999999999
End Function
При желании указывать название графика правится krit_graph = array(«Go»,»Qo»,»qt»).
Ну и гораздо более сложноподчинённые, например что реализовано у меня:
Создание макроса для варианта когда критерий зависит от своего критерия

Диаграммы режимов ПТ типа ПТ-80

Диаграммы режимов типа Т-250

Нормативной температуры сетевого подогревателя.

Все вышеперечисленные сложные диаграммы можно разбить на простые, и сделать в ручном режиме с помощью тех программ создания макросов что я дал. А можно потратить пару вечеров и создать удобный инструмент под свои задачи.
Из того на что стоит обратить внимание, или маленькие лайфхаки:
1. Не всегда есть разметка осей. Например на диаграмме на последнем скрине вертикальная ось не размечена. Но она в данном случае не нужно. Важно иметь одинаковое значение для левого и правого графиков. Как правило я принимаю в качестве минимального значения оси — 0, в качестве максимального — число клеток (например 12-ть).
2. Внимание! Ось Х не обязательно горизонтальная при «снятии точек»! Например на диаграмме на последнем скрине для правого графика удобно взять в качестве оси Х вертикальную ось а в качестве Y — горизонтальную. Тогда результат обработки левой номограммы будет сразу выступать в качестве аргумента для правой номограммы.
3. Есть варианты оцифровки, когда лучше привязываться не к значениям осей, а к клеточкам 🙂 Да, звучит дико, но иногда проще внести пересчёт внутри макроса, чем реализовать оцифровку по данным осей. Например диаграмма ниже — обратите внимание, что вертикальная ось не обозначена, зато горизонтальная в левой диаграмме разбита на 3 участка с разным масштабом.

Упд. Вспомнил ещё про важную часть — обратные функции. Т.е. есть макрос (готовый!), который по известным Х1, Х2. находит Y. Иногда требуется с использованием данного макроса и известных Y и X1 найти X2. Но об этом в следующий раз. А то и так пост разросся.
Excel vba как открыть
Как в Excel 2010 или 2013 вставить и запустить код VBA – руководство для начинающих
Смотрите такжеAleksey1404 :-), то его назад, и взгляни что от него и даже выделено описать одной строкой.повторюсь: моя функция Приведите кодNext .Name Then: _Щелкните Популярное и
в меню должен быть введён книге. Изначально вНажимаемКак увеличить скоростьЭто краткое пошаговое руководство: внутренний макрос запускается на свои коды. хочет компилятор при какая. Что мешаетопиши одной строкой абстрагируется от (свой,Michael_SDeep = Deep
Debug.Print fn затем установите флажокView в него входят:Alt+Q выполнения макроса? предназначено для начинающихAleksey1404 и не даетИ переменные из200?’200px’:»+(this.scrollHeight+5)+’px’);»>Option Expicit объявить? Это же алгоритм сортировки (без
- чужой и т.п.).: Vitalts, Все, разобрался.
- — 1fn = Dir
Вставляем код VBA в книгу Excel
Показывать вкладку «Разработчик»редактора Visual Basic.Class ModuleОбъект, чтобы закрыть окноВ самом начале кода
-
- пользователей и рассказывает, Вы наверно не
- мне возможность сделать одной буквы, ия тут не пример )

- выгрузки на лист) Она просто возвращает Не тудаEnd IfLoop на ленте. В этом окне;ЭтаКнига редактора VBA и Вашего макроса VBA о том, как с того конца

- то, что я Iif сплошь и при чем )ЦитатаЦитата список файлов папки.Set wb = Workbooks.Open(ActiveWorkbook.PathIf Deep =
End WithПримечание. Лента является отображаются все переменные,
Если нужно создать диалоговое(ThisWorkbook), привязанный к вернуться к книге
должны содержаться строки:
вставлять код VBA начали программу писать хочу с ним рядом, и ещеЦитата(Michael_S)200?’200px’:»+(this.scrollHeight+5)+’px’);»>У каждого свои(KuklP)200?’200px’:»+(this.scrollHeight+5)+’px’);»>Что легче можно
-
При желании может & «\» & -1 ThenНу и собственно, частью интерфейса «Пользовательский объявленные в текущей окно для взаимодействия книге Excel; Excel.Application.ScreenUpdating = False (Visual Basic for
Сначала следовало забить
сделать. делать это рекурсивно.
fn)Set GetFileList = открытие книги по интерфейс Microsoft Office процедуре. Окно делится с пользователем, тоОбъектыЧтобы запустить только чтоApplication.Calculation = xlCalculationManual Applications) в книгу в форму код,1) Насчет изменить ты сейчас критикуешь! доказать всем участникамвообще-то нет отредактировать?Функцию можно подключитьвпихивал. List

- на всех мы длинную строку будет существенных изменений вnerv NothingКод200?’200px’:»+(this.scrollHeight+5)+’px’);»>Set wb =
Запускаем макрос VBA в Excel
выберите пункт Справка: значение и тип. каждому листу текущей. Откроется диалоговое окно следующие строки в для выполнения различныхExcel пробовал, но думаю сам делал так точку зрения за ценой не

сложнее понять и основную программу (добавляется
: просто вы не
Set FSO =Редактор Visual Basic в Excel
Microsoft Visual Basic. каждой переменной, иДвойной щелчок мышью по рабочей книги Excel.Макрос свой макрос, чтобы задач на этом`ем играть. API поможет, проблемы (писал ужасный, говеныйЦитата постоим», только это
Запуск редактора Visual Basic
отредактировать, чем много одна строка вызова писали МНОГО кода Nothing & fn)Роман царьков эта информация обновляется любому объекту вСамостоятельно в проект можно(Macro). В списке он работал быстрее листе.Странно, у меня конечно с сетевыми код) и не(KuklP)200?’200px’:»+(this.scrollHeight+5)+’px’);»>и правда думаешь, не все понимают правильных/правильно_отформатированных строк функции).

Окна редактора Visual Basic
Когда перед тобойDeep = 0—: кнопка Visual Basic автоматически в ходе окне добавить объектыИмя макроса (см. рисунок выше):Большинство пользователей не являютсяshift
Окно проекта (Project)
правами на редактирование хочу, чтобы кто-нибудь что кому-то интересно )ЦитатаЦитата 1000+ строк вEnd IfPS: что-то код подсвечена серым и выполнения программы. ОкноProjectUserform(Macro name) выберитеВ самое начало кода гуру Microsoft Office.
- позволяет открыть файл файла. еще наступал на искать все твои
- Цитата(KuklP)200?’200px’:»+(this.scrollHeight+5)+’px’);»>Ведро картошки можно(KuklP)200?’200px’:»+(this.scrollHeight+5)+’px’);»>Я уж не одном только модуле,End Function

при каждом релоаде не работает какLocalsоткрывает соответствующее окно, нужный макрос и после всех строк, Они могут не в2) Запретить выполнение эти грабли. Это сообщения выискивая в(Michael_S)200?’200px’:»+(this.scrollHeight+5)+’px’);»>Саш, мы уже отвезти на мопеде, говорю о размере нет желания разбиратьвпрочем, уже вижу по разному кажет,
быть?очень полезно приCodeModule нажмите кнопку начинающихся с знать всех тонкостейExcel
- макроса можно, я ж очевидно ) них «перлы» а как-то говорили на не нужен для кода. и додумывать. Хочется
- косяк пофиксил форматированиеЮрик отладке кода VBA., предназначенное для вводаиВыполнитьDim работы той илибез автозапуска макросов
в Инете нашелTigerskin ля nerv? эту тему; твои этого БелАзКачество кода не просто читать. Максимально
- но не критичныйnerv: Меню: Сервис -Окно кода VBA сClass Module
- (Run).(если строк, начинающихся иной функции, иIvanOK решение, надо включить: Реально ли такое?
- если мне говорят, доводы отчасти верны,его можно донести измеряется его размером. быстро читать понятный
- ): Зачем же такие Макрос — РедакторWatches клавиатуры. На одном
- . Если Вы посмотритеУрок подготовлен для Вас с не смогут ответить: открылось когда жал событие Application.EnableEvents =
Окно кода (Code)
Например пользователь открыл что я не но не для в руках, если Вообще, не понимаю, не двусмысленный код.Vitalts извороты? не проще Visual Basic.также очень помогает из приведённых выше на картинку выше, командой сайта office-guru.ruDim
на вопрос, как шифт в самом False перед открытием файл с названием прав, я спрашиваю всех случаев на то пошло. почему форумчан беспокоит «С недавних пор»
Окно свойств (Properties)
: воспользоватся многострочным If?Или просто Alt при отладке кода рисунков показано окно то увидите, чтоИсточник: https://www.ablebits.com/office-addins-blog/2013/12/06/add-run-vba-macro-excel/нет, то вставляем отличается скорость выполнения экселе Файл-открыть, а файла и делай Тест.xls, расположенный на в чем, а

Окно отладчика (Immediate)
для каких случаев Речь не об размер (не только однострочный If яnervмой велосипед. Особо — F11. VBA, так как кода для в проект VBAПеревел: Антон Андронов сразу после строки макроса VBA в не щелкая по с ним, што общем сетевом ресурсе. не заведомо соглашаюсь мои доводы не этом. Как только этого) кода, если
не использую вообще, эээ, и вы не тестировал, ноСаня в нём можноModule1 для книгиАвтор: Антон АндроновSub

Окно переменных (Locals)
Excel 2010 и самому файлу))) хош :-) Включаю процедуру иЦитата верны? Михаилу потребуется изменить код написан должным ) утверждаете что у должен работать ): Хм. Вообще, если увидеть значение, тип.Book1.xlsmВ этой главе даётся): 2013. Многие простоIvanOKApplication.EnableEvents = False по ходу её

Окно отслеживания (Watches)
(KuklP)200?’200px’:»+(this.scrollHeight+5)+’px’);»>Растеряешь друзей.KuklP что-то в коде, образом? Подключили, забыли.Цитата меня извороты?200?’200px’:»+(this.scrollHeight+5)+’px’);»>Sub Example() я не ошибаюсь, и контекст любогоПо мере ввода кодадобавлен объект очень краткий обзорApplication.ScreenUpdating = False используют Excel, как: при етом коде Application.Workbooks.Open «test.xls», False выполнения необходимо записатьт.е. если наши: Саш, ты посмотри ему придется ковырять Если хотите по(Michael_S)200?’200px’:»+(this.scrollHeight+5)+’px’);»>жалуется на Mask

Чем вам DirSet Folder =
- то в MS отслеживаемого выражения, которое
- VBA в окноModule редактора Visual BasicApplication.Calculation = xlCalculationManual инструмент для обработки
- появляется ексель, потом Application.EnableEvents = True данные в этот
мнения не совпадают, на себя со всю логику, в прежнему заниматься ручнойЭто та самая не угодил? GetFileList(«d:\Contacts\») Office есть такая
задаст пользователь. ЧтобыCode
с названием
в Excel. ЕслиВ самый конец кода,
Как открыть visual basic через excel в office 2007?
данных. исчезает, потом появляется
Assassinys файл. Пользовательские изменения
то я уже стороны. Ты упорно т.ч. логику получения обсфукацией, экономить на ошибка, о кот.Похоже, изначально не
End Sub фишка — макросы.
открыть окно, редактор Visual BasicModule1
Вы любознательный читатель передПредположим, нужно изменить данные сама форма, а
: Собственно меня интересует — нафик не автоматически не друг, пытаешься доказать всем
имени файла из каждой букве, пожалуйста. я говорил. Замените правильно понял вас.’ —————————————- Вот эти макросыWatches следит за правильностью
Как в excel открыть visual basic.
. и хотите узнатьEnd Sub на листе Excel
есель исчезает как как возможно открыть нужны, а то потому, что «мнения участникам темы, что папки. В моемЯ пишу универсальные Mask на Filter. В данном случае,’ Returns collection пишутся на VB., нажмите ввода, ищет ошибкиВот как можно создать еще больше информации:
определённым образом. Мы ето избежать тоесть форму в документе что делает макрос друзей должны совпадать твой громоздкий, глючный случае это не
функции, кот. таскаюЦитатаОткрыть файл excel. (VBA) (Задача вроде простая, но. )
мне караз таки files of folder Но что быWatch Window в коде и новый объект о редакторе, тоApplication.ScreenUpdating = True немало погуглили и нужно что бы эксель но так — очень даже. всегда»? (это следует в таком виде требуется, т.к. вынесено
(использую) из проекта(Vitalts)200?’200px’:»+(this.scrollHeight+5)+’px’);»>В данном случае, было удобнее воспользоваться’ Exel’ем открыть проект.
в меню выделяет код, которыйUserform при желании безApplication.Calculation = xlCalculationAutomatic
нашли макрос VBA,
просто появилась форма что бы была
Понимаю — можно
из твоих слов) код лучше, чем
в функцию. Если в проект. Мне
мне караз таки однострочным if, дабы
’ @param
ну тока если
View
требует исправления., проблем найдете ресурсыЭти строки, как можно который решает эту
в невидемом екселепоявилась видна только форма этот файл сделать
Цитата
пятистрочный код Vitalts. ему потребуется проверять это не мешает было удобнее воспользоваться не закрывать, а Path The path скопировать исходник, создатьредактора Visual Basic.
В окнеModule с более подробным
понять из их
задачу. Однако, наше просто форма
при открытии документа
для всех пользователей
(RAN)200?’200px’:»+(this.scrollHeight+5)+’px’);»>но вся проблемаЯ понимаю, если
вложенные каталоги, ему
) Если вам однострочным if, дабы перенос для наглядности.
to folder макрос и туда Также окно
Propertiesили
описанием.
содержания, отключают обновление знание VBA оставляетесть ли у
а сам документ — только для в том -
бы ты девушке, придется писать новый
нравиться каждый раз не закрывать, а
Кстати, проверки названий’ @param
код вставить)Watches
перечислены свойства объекта,Class Module
Простейший способ запустить редактор экрана и пересчёт
желать лучшего. Вот кого каки ето
был скрыт или чтения. Но их
что она одна,
далекой от Экса,
алгоритм (перебирать всю переписывать весь код,
перенос для наглядности. файлов на самого
[Filter] The fileТока придётся ещё
будет открыто автоматически,
который в момент
:
Visual Basic в формул рабочей книги
тут-то и придёт варианты решения етой
свернут?
на самом деле
но для всех это доказывал. Или
логику, вносить изменения,
я не противдля наглядности многострочный
себя у вас filter
и форму там если задать отслеживаемое
создания (не вВ окне
Excel – нажать
перед выполнением макроса.
на помощь пошаговая
проблемыаналитика много — этих разная! ты всех нас отлаживать и т.п.Serge_007 If. В вашем нет.’ @return
чертить новую :) выражение.
процессе выполнения программы)Project комбинацию клавиш После выполнения кода инструкция, с помощьюIvanOK: в модуль «ЭтаКнига»: файлов. Прошу совета.
Не поверишь, есть дураками считаешь? всю программу, а: Точно так же случае это неочевидность.Michael_S FileListОлег филатов
Чтобы задать отслеживаемое выражение, выделен в окневыберите рабочую книгу,Alt+F11 эти параметры снова которой мы сможем:sub workbook_open() application.visible=false Подходят два варианта:
нюансы, но в
Цитата не отдельную функцию). как и формул.Цитата: Vitalts, в вашем’ —————————————-: Вот Вам руководство нужно: проекта. Эти свойства в которую нужно(то есть нажать включаются. Данный приём использовать найденный код.IvanOK yourform.show end sub
1. Макрос пользователя целом правильность одинаковая(nerv)200?’200px’:»+(this.scrollHeight+5)+’px’);»>для каких случаевЕсли вы предпочитаете Кстати и скорость(Vitalts)200?’200px’:»+(this.scrollHeight+5)+’px’);»>Кстати, проверки названий варианте не хочетPrivate Function GetFileList(ByVal по его использованию
Выделить выражение в редактируемом могут быть различными добавить объект, и клавишу приводит к ускорениюВставляем код VBA в, На горе программист:Assassinys обламывает и «захватывает»Я общаюсь не
мои доводы не закладывать фундамент дома тоже от длинны файлов на самого открывать файл (error) Path As String, (в приложении) : коде VBA. в зависимости от кликните по нейAlt выполнения макроса от книгу ExcelThisWorkbook.Windows.Application.Visible = False: не работает( права на изменение
только (и уже верны? — и
из спичек, я не всегда зависит себя у васnerv, Саш, в
_[ссылка заблокирована поВ меню типа выделенного объекта правой кнопкой мыши.и, удерживая её, 10% до 500%
Запускаем макрос VBA в UserForm1.ShowAssassinys
файла. Возможно ли? не столько) на правда думаешь, что не против, ноОднако ты прав,
нет. вашем варианте жалуетсяOptional ByVal Filter решению администрации проекта]Debug (лист, книга, модульВ появившемся меню кликните нажать клавишу (да, макрос может Exceleagl69:2. Создавать нужные
форумах по эксель, кому-то интересно искать сам стараюсь этого форумчан это оченьфункция, представленная мной на As String =Michael_Sредактора VBA нажать и другие).InsertF11 работать в 5В этом примере мы:Assassinys файлы (создавать макросами)
и почему то все твои сообщения не делать беспокоит
возвращает список файловMask «*») As Collection: Все, что обQuick WatchОкнои в раскрывшемся
). После этого откроется раз быстрее, если будем использовать VBAinv.DS, работает. и сразу при
везде (кроме известных выискивая в нихЦитатаМы все тут
заданной папки. Понятияи что онStatic List As этом файле известно.Immediate меню выберите окно редактора Visual манипуляции над ячейками макрос, который удаляет,Код надо поместить
этом ставить «только мне форумов по «перлы» а ля(Serge_007)200?’200px’:»+(this.scrollHeight+5)+’px’);»>Кстати и скорость хотим размер покороче «самого себя» здесь должен делать мне New Collection — он находитсяНажатьможно отобразить вUserform Basic, как показано происходят без лишних переносы строк из
inv.DS куда и сказано для чтения», при
эксель) правильность одна. nerv? Хочешь быть тоже от длинны и даже соревнуемся нет, т.к. функции не понятно. УStatic FSO As в той жеAdd редакторе Visual Basic, на картинке ниже. остановок). ячеек текущего листа, неа ефекто тот - этом за макросом Я никому не нарциссом — ради не всегда зависит в этом постоянно все равно, откуда меня задача - Object
папке, где и. через меню
Module Имейте ввиду, чтоСохраняем рабочую книгу, как Excel. же. в модуль «Эта книга»
должно оставаться право навязывал, даже не Бога. Растеряешь друзей.
зависит от алгоритма, в специально созданном она вызывается. Думаю, открыть файл.
Static Deep As основной, и другихКроме рассмотренных, в менюViewили
окно Excel остается книгу Excel сОткрываем рабочую книгу внужно сделать доyourform
менять этот файл. обсуждал этот вопросRAN а не от для этого разделе несложно удалить изЗа помощь спасибо. Integer файлов в этой редактора Visual Basic>Class Module открытым и находится поддержкой макросов. Для Excel. sub workbook_open() иначезаменить на свое, А также за (с совершенно посторонними: Саш, это, конечно кол-ва букв )KuklP коллекции лишний Item.
зы. кстати, везде,Dim SubFolder As папке нет. И в Excel существуетImmediate Window.
позади окна редактора. этого нажмитеНажатием ефект полюбому останется.
например, у меня главным юзером - людьми), но исходя
правильноЦитата: Еще как измеряется.KuklP где возможно, я Object что он -
ещё множество параметровили нажатием комбинацииДля каждого из описанныхВ процессе работы в
Ctrl+SAlt+F11 потому что сначалаUserform1 то бишь мной из их сообщений,но вся проблема(Serge_007)200?’200px’:»+(this.scrollHeight+5)+’px’);»>Мы все тут Можно написать на
: Саша, ты из тоже предпочитаю однострочныйDim Folder As эксель. Ни имя и команд, используемых клавиш выше объектов предусмотрено редакторе Visual Basicи в окне
вызываем окно редактора открываеться ексель аAleksey1404
) Как это очевидно, что правильность в том - хотим размер покороче 10 страниц «правильного» пушки по воробьям If.
Object и расширение файла, при создании, выполненииCtrl+G специальное окно, в в Excel могут с предупреждением
Visual Basic потом он выполняет: Да заработало , сделать? одна. Это видно что она одна, и даже соревнуемся кода, а можно стреляешь. Миша пишет:VitaltsDim File As а также имя и отладке кода
. Это окно помогает котором будет создаваться быть открыты различныеСледующие компоненты невозможно сохранитьНа панели макрос я просто имяVladConn по коду, по но для всех в этом постоянно то же действиеТ.е. первый же: Object и расположение папки VBA. при отладке кода. и храниться новый окна. Управление окнами в книге без
Project-VBAProjectIvanOK формы некорректное выбирал: Ya ne uveren, его стилю. Т.е.
разная! в специально созданном описать одной строкой.
файл с несовпадающимMichael_SIf FSO Is не известны.Урок подготовлен для Вас Оно выполняет роль
код VBA. Порядок осуществляется в меню
поддержки макросовкликаем правой кнопкой
, Вы бредите! ВсеАпострофф chto eto to, все хорошие прогерыТы откатись чуть для этого разделе Что легче можно именем — нужный.
, что значит не
Nothing ThenВозможно? Если возможно
командой сайта office-guru.ru области вывода для при этом такой: View, которое находится
(The following features мыши по имени
работает у меня: А как обратно chto nado, no видя код говорят, назад, и взгляниза рекламу 5 будет понять и
Вариант Vitalts гораздо хочет? Без кодаSet FSO = — как?Источник: http://www.excelfunctions.net/Visual-Basic-Editor.html
отладки выражений иКод, который относится к
в верхней части cannot be saved рабочей книги (в остается только 1 открыть файл для mozhno poigrat’sya s «что такое хорошо, на свои коды.
Michael_S отредактировать? Ведро картошки лучше подходит для я не могу CreateObject(«Scripting.FileSystemObject»)nerv
Перевел: Антон Андронов позволяет вычислять отдельные рабочей книге, должен окна редактора VBA. in macro-free workbook) левой верхней части форма активная, сам редактирования ((( Application. а что такоеИ переменные из: У каждого свои можно отвезти на этого случая и сказать где уEnd If: Получить список файловАвтор: Антон Андронов выражения или выполнять быть введён в Ниже дано описание нажмите окна редактора) и Excel прячется.Aleksey1404AutomationSecurity плохо». Почему надо одной буквы, и
понятия «правильности» мопеде, не нужен не привлекает внешних
вас ошибка, ибоIf FSO.FolderExists(Path) Then папкиВиталик александровский строки кода по соответствующий объект отдельных окон.
Нет в контекстном менюinv.DS: Разве не очевидно?
100g делать так, а Iif сплошь иСаш, мы уже для этого БелАз. библиотек. Я уж
код замечательно работает.Set Folder =Vitalts: Alt плюс F11 одной.ЭтаКнигаОкно(No). выбираемОткрыть файл Excel-я макросом и взять его на редактирование
, ето вы просто Application.Visible = True
: Создаешь новую книгу, не иначе. рядом, и еще как-то говорили на Но если тебе не говорю о Ни один год FSO.GetFolder(Path): Все названия ExcelGkp090Например, введите выражение «(ThisWorkbook);ProjectОткроется диалоговое окноInsert не замечаете неАпострофф сохраняешь и ставишьЦитата куча всего, что эту тему; твои так
размере кода. пользуюсь подобными методами.For Each File файлов в папке
: VBA?jКод, который относится коткрывается в левойСохранение документа> мощном ПК, а: Может есть какое-то пароль на запись,(KuklP)200?’200px’:»+(this.scrollHeight+5)+’px’);»>Хочешь быть нарциссом ты сейчас критикуешь! доводы отчасти верны,нравитЬсяnervПопробуйте вывести название In Folder.Files активной книги, исключаяв настройках выставить» и нажмите рабочему листу, должен
части редактора VBA(Save as). ВModule я говорю делоВ сочетание клавиш, позволяющее
закрываешь: — ради БогаМне Вася уронил
но не для, я тоже не: Я ни в файла, который пытаетесьIf File.Name Like ее: «Показывать вкладку РазработчикEnter быть введён в (показано на картинке выпадающем списке. продолжение темы:
открыть файл безWorkbooks.Add ActiveWorkbook.SaveAs Filename:=»C:Text1.xls»,Хоть Жераром Депардье молоток на голову! всех случаев. против кого не стреляю, открыть, возможно, лимит
Filter Then200?’200px’:»+(this.scrollHeight+5)+’px’);»> на ленте»– в результате соответствующий объект выше). В этомТип файлаКопируем код VBA (сPrivate Sub CommandButton8_Click()
отработки макроса(shift не WriteResPassword:=»12345″ ActiveWorkbook.CloseКогда надо или психом вКак открыть форму, а Excel скрыть или вовсе не открывать
И что выMichael_Snerv я животных люблю исчерпан, и идетList.Add FileDim fn AsАлександр к будет выведено текущееЛист окне для каждой
(Save as type) веб-страницы или из
Application.Visible = False помогает), т.к. у редактировать открываешь так: белой рубашке с
ему сказали?: То же не: чуть меньше неверно,Я привел написанный
попытка открыть файлEnd If String: На вкладке Разработчик
значение переменной(Sheet); открытой рабочей книги выбираем другого источника) и End Sub Private меня отображается форма,Workbooks.Open Filename:=»C:Text1.xls», WriteResPassword:=»12345″
пеной у ртаТы. Вася. неправ. работает чем полностью
мной ранее код с пустым названием.Next
With ActiveWorkbook щелкните Visual Basic.jКод более общего характера создаётся проект VBAКнига Excel с поддержкой вставляем его в Sub CommandButton9_Click() Application.Visible но я неR1001 (в ваших глазах).nervnerv
Цитата (под свои нужды) Не совершенство кода,For Each SubFolderfn = Dir(.PathЕсли Вкладка Разработчик
. должен быть введён
(VBA Project). Проект макросов правую область редактора = True End
могу добавить код: Я сталкивался с Моя точка зрения: об единственной опечатке: Захотелось кнопку «Ok»(KuklP)200?’200px’:»+(this.scrollHeight+5)+’px’);»>Можно написать наЦитата написанного на скорую In Folder.SubFolders & «\*.xls*») не отображена:Чтобы открыть окно
в VBA – это(Excel macro-enabled workbook) VBA (окно SubЛист скрывается а по причине отсутствия проблемой, когда открываешь останется при мне я предупредил сразу. нажать 10 страниц «правильного»
(KuklP)200?’200px’:»+(this.scrollHeight+5)+’px’);»>Т.е. первый же руку :(Deep = DeepDo Until fnНажмите кнопку MicrosoftLocalsModule набор всех объектов
и нажимаем кнопкуModule1 вот при открытии окна екселя. код программно файл XLSЦитата
Это раз. Два,Там же написано кода, а можно
файл с несовпадающимСудя по скрину, + 1 = «» Office, а затем, нажмите;