AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 25.05.2009, 15:53   #9  
Gustav is offline
Gustav
Moderator
Аватар для Gustav
SAP
Лучший по профессии 2009
 
1,858 / 1152 (42) ++++++++
Регистрация: 24.01.2006
Адрес: Санкт-Петербург
Записей в блоге: 19
Что мешает в самом начале создать COM-переменные для всех необходимых в текущей процедуре "адресов"?

Я думаю, что работать с "АДРЕСАМИ" - вопрос привычки, традиции - не более. И происходит эта традиция именно от стиля записи макрорекордера. Ну, и, безусловно, от опыта ручной пользовательской работы в Excel.

В Excel мы можем предложить два следующих макроса для выполнения одной и той же задачи:
Код:
 
Sub Macro1()
    Range("D8").Copy Range("MyCell")
End Sub

Sub Macro2()
    Dim rngD8 As Range
    Dim rngMyCell As Range
    
    Set rngD8 = Application.Workbooks("Книга1").Worksheets(1).Range("D8")
    Set rngMyCell = Application.Workbooks("Книга1").Worksheets(1).Range("MyCell")

    rngD8.Copy rngMyCell
End Sub
Оба прекрасно работают в контексте Excel. И программисту в данном случае практически безразлично, что использовать с точки зрения трудозатрат и визуальной ясности кода: Range("D8") и Range("MyCell") или rngB8 и rngMyCell. А вот если бы в Excel не поддерживался контекст текущих объектов (workbook, worksheet) и ему пришлось бы в каждом месте использования этих своих диапазонов писать удручающую ссылку Application.Workbooks("Книга1").Worksheets(1).Range("D8")..., то он быстро бы смекнул, что определить rngD8 в самом начале лучше со всех сторон.

В Аксапту мы, к сожаление, не можем напрямую перенести эту строку кода Range("D8").Copy Range("MyCell"), но можем создать иллюзию, написав свой метод copy(from, to) и потом вызывать его: copy("D8","MyCell") - ну что ж, всё легко и просто и почти как в Excel. Снаружи! Но углубимся в реализацию этого copy. И что мы имеем? Неотвратимую необходимость создания двух COM-переменных в теле метода и в последующем выбрасывании их, извиняюсь, "на помойку" после выполнения собственно операции копирования. А если нам потребуется скопировать содержимое ячейки "D8" еще в 10 или 100 других ячеек? Ответ понятен: вызовами copy("D8",...) будет создано и тут же уничтожено 10 или 100 объектов Range("D8").
Теги
columns, com connector, excel, колонки

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Копирование листа Excel целиком ax3.0 sp4 KR3 hlopez DAX: Программирование 1 20.04.2009 11:34
Копирование листов в Excel с шаблоном Zoe DAX: Программирование 8 20.11.2008 15:50
Копирование листов в Excel Андрей К. DAX: База знаний и проекты 12 30.08.2007 08:44
Вывод в Excel в формате XML и ширина колонок gl00mie DAX: Программирование 1 30.10.2006 10:45
Копирование из Грида в Excel ArturK DAX: Программирование 5 09.03.2004 19:55

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 16:16.