<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title><![CDATA[Серый форум &mdash; VBA: автоматическая запись макросов — лучший способ изучения VBA]]></title>
		<link>https://forum.script-coding.com/viewtopic.php?id=129</link>
		<atom:link href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=129&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «VBA: автоматическая запись макросов — лучший способ изучения VBA».]]></description>
		<lastBuildDate>Sat, 02 Sep 2006 11:54:05 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[VBA: автоматическая запись макросов — лучший способ изучения VBA]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=562#p562</link>
			<description><![CDATA[<p>Как быстро найти способ реализации каких-либо действий в VBA без утомительного перелопачивания справки и книг? Например, нам необходимо выяснить, как программно изменить ориентацию страницы Excel на альбомную. Одним из способов создания кода модуля VBA является запись последовательности действий с помощью специальной функции записи макросов. Запишем макрос, изменяющий ориентацию страницы Excel на альбомную, и изучим автоматически сгенерированный код.<br />1. Запустите Excel и активизируйте любой рабочий лист.<br />2. Выполните команду меню &quot;Сервис&quot; - &quot;Макрос&quot; - &quot;Начать запись...&quot;. В появившемся окне &quot;Запись макроса&quot; нажмите ОК, чтобы принять параметры по умолчанию. При этом Excel вставит новый модуль в VBA-проект и с этого момента начнёт преобразовывать ваши действия в код VBA (в строке состояния будет отображено слово &quot;Запись&quot;, а на экране появится небольшая панель инструментов &quot;Остановить запись&quot;).<br />3. Выполните команду меню &quot;Файл&quot; - &quot;Параметры страницы...&quot;. На вкладке &quot;Страница&quot; открывшегося окна &quot;Параметры страницы&quot; выберите переключатель &quot;альбомная&quot; и нажмите ОК.<br />4. Остановите запись, нажав на кнопке &quot;Остановить запись&quot; одноимённой панели инструментов или выполнив команду меню &quot;Сервис&quot; - &quot;Макрос&quot; - &quot;Остановить запись&quot;.<br />5. Запустите VBE, выполнив команду меню &quot;Сервис&quot; - &quot;Макрос&quot; - &quot;Редактор Visual Basic&quot; или нажав Alt+F11. Откройте окно Project Explorer, если оно закрыто (Ctrl+R) и в ветке &quot;Modules&quot; откройте &quot;Module1&quot; (если такой модуль уже был в проекте на момент начала записи макроса, вам потребуется &quot;Module2&quot; и т.д.). Вы увидите код, подобный следующему:<br /></p><div class="codebox"><pre><code>With ActiveSheet.PageSetup
    .LeftHeader = &quot;&quot;
    .CenterHeader = &quot;&quot;
    ...
End With</code></pre></div><p>Несмотря на то, что вы изменили только одну настройку в диалоговом окне &quot;Параметры страницы&quot;, Excel сгенерировал код, задающий все параметры в этом диалоговом окне, поэтому не удивляйтесь количеству кода.<br />Строка, которая нас интересует, выглядит так:<br /></p><div class="codebox"><pre><code>.Orientation = xlLandscape</code></pre></div><p>Отбросив &quot;With&quot;, получим:<br /></p><div class="codebox"><pre><code>ActiveSheet.PageSetup.Orientation = xlLandscape</code></pre></div><p>Это и есть то, что мы искали. Теперь мы знаем, как программно изменить ориентацию страницы Excel на альбомную.<br />Запись макросов во многих (но не во всех) случаях является <strong>лучшим</strong> способом изучить VBA. Даже несмотря на то, что в результате вы можете получить не совсем то, что ожидалось <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" />, автоматически сгенерированный код укажет <em>правильное направление</em>. Однако, не стоит забывать следующее:<br />1. Автоматически сгенерированный код может страдать отсутствием универсальности (например, он может быть связан с выделенными в данный момент элементами на листе и т.п.). В вышеприведённом примере, кстати, используется не произвольный, а <em>активный</em> в данный момент лист.<br />2. Таким способом удастся записать далеко не любые процедуры.<br />3. Автоматически сгенерированный код может изобиловать лишними деталями и быть неоптимальным с точки зрения производительности.<br />Примечание: если вы проводите подобные исследования, чтобы обратиться к Excel &quot;извне&quot; (с помощью OLE, к примеру), вам может потребоваться узнать значения встроенных констант Excel, которые в вашей среде программирования не объявлены. Например, чтобы узнать значение константы <em>xlLandscape</em> в вышеприведённом примере, вместо поиска по справке достаточно установить курсор на имени константы и нажать <strong>Ctrl+I</strong>.</p>]]></description>
			<author><![CDATA[null@example.com (The gray Cardinal)]]></author>
			<pubDate>Sat, 02 Sep 2006 11:54:05 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=562#p562</guid>
		</item>
	</channel>
</rss>
