<?xml version='1.0' encoding="utf-8"?>
      <rss version='2.0'>
      <channel>
      <title>Форум на Исходниках.RU</title>
      <link>https://forum.sources.ru</link>
      <description>Форум на Исходниках.RU</description>
      <generator>Форум на Исходниках.RU</generator>
  	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=93304&amp;view=findpost&amp;p=700766</guid>
        <pubDate>Sat, 30 Apr 2005 15:15:47 +0000</pubDate>
        <title>Работа с переменными</title>
        <link>https://forum.sources.ru/index.php?showtopic=93304&amp;view=findpost&amp;p=700766</link>
        <description><![CDATA[Old Bat: <span class="tag-font" data-value="Arial" style="font-family:Arial"><strong class='tag-b'>Объявление переменных</strong><br>
<br>
Если Вы заранее знаете, какой тип данных будет содержать используемая переменная – объявите ее. Используйте по возможности типы данных меньшей длины, т.к. при прочих равных условиях они работают быстрее. В противном случае необъявленная переменная будет иметь тип VARIANT и съест жирный кусок оперативной памяти. Да и код будет выполнен значительно медленнее, т.к. при работе с различными переменными часть времени уйдет на приведение типа. <br>
<br>
Если Вы хотите, чтобы VBA не оставил без внимания необъявленные переменные – пропишите «Option Explicit»  в начале модуля или отметьте соответствующий чекбокс в свойствах VBE (Require variable declaration)<br>
<br>
<span class='tag-u'>Обратите внимание:</span> тип данных  LONG работает быстрее, чем BYTE при выполнении математических операций с целыми числами, т.к. VBA оптимизирован для работы с 32-разрядными операциями. Так что используйте тип LONG в операциях, не требующих учета дробной части (исключение – работа с байтовыми массивами или передача BYTE-переменной в функции WINAPI<br>
<br>
<strong class='tag-b'>Используйте ранее связывание</strong><br>
<br>
Если Вы определяете тип переменой как OBJECT , это значит, что Вы просите VBA опередить характеристики объекта во время выполнения кода. Если же Вы задаете конкретный тип объектной переменой,VBA может определить ее содержание еще  на этапе компиляции, что значительно сократит время исполнения кода.<br>
Поэтому (если есть такая возможность) объявляйте тип объектной переменой как можно точнее:<br>
<br>
Например, вместо<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">Dim cmd as Control</div></ol></div></div></div></div><script>preloadCodeButtons('1');</script><br>
или, что еще хуже<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">Dim cmd as Object</div></ol></div></div></div></div><br>
сделайте так:<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">Dim cmd as CommandButton</div></ol></div></div></div></div><br>
<strong class='tag-b'>Кешируйте ссылки на объекты</strong><br>
<br>
Если Вам нужна одна единственная ссылка на объект – оптимизировать здесь нечего. А вот если Вы обращаетесь с несколькими свойствам объекта или работаете с ним в цикле, то можете значительно ускорить обращения к объекту, запомнив ссылку на него в переменой и обращаясь к его свойствам через эту переменную.<br>
Не забывайте и об имеющемся операторе With…End With, делающим практически то же самое.<br>
<br>
Например,  работаем с диапазоном ячеек:<br>
<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">Worksheets(&quot;Sheet1&quot;).Range(&quot;A1:C10&quot;).Value = 30</div><div class="code_line">Worksheets(&quot;Sheet1&quot;).Range(&quot;A1:C10&quot;).Font.Bold = True</div><div class="code_line">Worksheets(&quot;Sheet1&quot;).Range(&quot;A1:C10&quot;).Interior.Color = RGB(255, 255, 0)</div></ol></div></div></div></div><br>
Можем заменить на<br>
  <div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">Set MyRange = Worksheets(&quot;Sheet1&quot;).Range(&quot;A1:C10&quot;)</div><div class="code_line">&nbsp;&nbsp; &nbsp;MyRange.Value = 30</div><div class="code_line">&nbsp;&nbsp; &nbsp;MyRange.Font.Bold = True</div><div class="code_line">&nbsp;&nbsp; &nbsp;MyRange.Interior.Color = RGB(255, 255, 0)</div></ol></div></div></div></div><br>
Или так:<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">With Worksheets(&quot;Sheet1&quot;).Range(&quot;A1:C10&quot;)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;.Value = 30</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;.Font.Bold = True</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;.Interior.Color = RGB(255, 255, 0)</div><div class="code_line">End With</div></ol></div></div></div></div><br>
Чем сильнее Вы сокращаете цепочку ссылок, тем больший выигрыш по времени получаете&#33;<br>
</span><br>
<br>
<span class="tag-color tag-color-named" data-value="gray" style="color: gray"><span class='tag-size' data-value='8' style='font-size:8pt;'>Использованы материалы: &quot;From Access 2002 Desktop Developer&#39;s Handbook&quot;<br>
Litwin, Getz, and Gunderloy. (Sybex, 2001)</span></span>]]></description>
        <author>Old Bat</author>
        <category>Оптимизация VBA-кода</category>
      </item>
	
      </channel>
      </rss>
	