Стараюсь писать про Аксапту, хотя частенько тянет в Офис
Повышение комфортности разработки при использовании Spreadsheet
Запись от Gustav размещена 12.11.2009 в 16:51
Теги intellisense, owc, spreadsheet, vba
Считая себя увлеченным популяризатором Excel и всего, что на нее (него) похоже, развиваю дальше тему OWC Spreadsheet.
Если решено использовать Spreadsheet для определенной задачи в приложение Axapta (например, отображать в диалоге, как было показано в моем предыдущем собщении: http://www.axforum.info/forums/blog.php?b=26), то управлять его свойствами при программировании приходится практически вслепую. Такое достижение программирующего человечества, как технология IntelliSense, обеспечивающая автоматическое "дописывание" операторов, имен свойств, методов и событий по мере их ввода, а также открывающая список элементов объекта при завершении его имени точкой ".", увы, не работает для переменных типа COM.
Приходится поступать так: записывать скрипт в Excel (вручную или макрорекордером), переводить его на язык X++ и далее отлаживать, устраняя отдельные недоразумения (всё же Spreadsheet - не точная копия Excel и имеет в ряде случаев свое специфическое поведение).
Это сообщение ставит целью поменять вышеупомянутые шаги местами и сделать перевод с VBA на X++ самым последним и неутомительным рутинным этапом всей процедуры внедрения кода по "обслуживанию" Spreadsheet в приложении Axapta.
Первыми же (более творческими) этапами предлагается сделать записывание в Excel кода VBA макрорекордером, его ручное подправление при необходимости и "переключение" этого кода на выполнение в Spreadsheet (помещенном в рассматриваемом ниже случае на лист Excel). Попутно также устраняются обнаруженные разночтения между Excel и Spreadsheet, НО (!) пользуясь всей мощью IntelliSence уже для самого Spreadsheet, а не для используемого для "черновых" набросков Excel. Что еще не маловажно - визуально уже в самом Spreadsheet же контролируется прописываемое поведение этого объекта (т.е. во время отладки не нужно всякий раз запускать форму, как это было бы при отладке в Аксапте).
Итак, что собственно? Собственно следующее - вручную нарисуем в Excel элемент управления Spreadsheet и напишем несколько строк VBA по назначению этого элемента управления объектной переменной типа Spreadsheet. Как вы правильно поняли, всё происходит в Excel, Axapta здесь только путеводная звезда, к которой мы плывем со своим отлаженным кодом. Отмечу, что целевым приложением может быть и не Axapta, но любое другое, работающее с элементами ActiveX.
ШАГИ:
Всё! Далее в этой же процедуре можно сочинять свою обработку Spreadsheet, которую по окончании перевести на язык X++:
![Нажмите на изображение для увеличения
Название: Spreadsheet_IntelliSence.JPG
Просмотров: 436
Размер: 29.0 Кб
ID: 23](//axforum.info/forums/blog_attachment.php?s=877ae3ef6841034954dd62c17535fb27&attachmentid=23&thumb=1&d=1258032086)
Если решено использовать Spreadsheet для определенной задачи в приложение Axapta (например, отображать в диалоге, как было показано в моем предыдущем собщении: http://www.axforum.info/forums/blog.php?b=26), то управлять его свойствами при программировании приходится практически вслепую. Такое достижение программирующего человечества, как технология IntelliSense, обеспечивающая автоматическое "дописывание" операторов, имен свойств, методов и событий по мере их ввода, а также открывающая список элементов объекта при завершении его имени точкой ".", увы, не работает для переменных типа COM.
Приходится поступать так: записывать скрипт в Excel (вручную или макрорекордером), переводить его на язык X++ и далее отлаживать, устраняя отдельные недоразумения (всё же Spreadsheet - не точная копия Excel и имеет в ряде случаев свое специфическое поведение).
Это сообщение ставит целью поменять вышеупомянутые шаги местами и сделать перевод с VBA на X++ самым последним и неутомительным рутинным этапом всей процедуры внедрения кода по "обслуживанию" Spreadsheet в приложении Axapta.
Первыми же (более творческими) этапами предлагается сделать записывание в Excel кода VBA макрорекордером, его ручное подправление при необходимости и "переключение" этого кода на выполнение в Spreadsheet (помещенном в рассматриваемом ниже случае на лист Excel). Попутно также устраняются обнаруженные разночтения между Excel и Spreadsheet, НО (!) пользуясь всей мощью IntelliSence уже для самого Spreadsheet, а не для используемого для "черновых" набросков Excel. Что еще не маловажно - визуально уже в самом Spreadsheet же контролируется прописываемое поведение этого объекта (т.е. во время отладки не нужно всякий раз запускать форму, как это было бы при отладке в Аксапте).
Итак, что собственно? Собственно следующее - вручную нарисуем в Excel элемент управления Spreadsheet и напишем несколько строк VBA по назначению этого элемента управления объектной переменной типа Spreadsheet. Как вы правильно поняли, всё происходит в Excel, Axapta здесь только путеводная звезда, к которой мы плывем со своим отлаженным кодом. Отмечу, что целевым приложением может быть и не Axapta, но любое другое, работающее с элементами ActiveX.
ШАГИ:
- откроем Excel (пусть 2003 - я по-прежнему больше люблю то, что старше версии 2007).
- найдём панель инструментов "Control Toolbox" и нажмем на ней кнопку "More Controls" (с пиктограммой с перекрещенными ключом и молотком)
- в открывшемся списке выберем "MIcrosoft Office Spreadsheet 10.0" (или 11.0 или др.) и нарисуем появившимся крестиком рамку внедряемого объекта прямо на текущем листе Excel
- покинем режим конструирования, отжав кнопку "Design Mode" (с угольником и линейкой) и перейдём в редактор VBA (Alt+F11)
- создадим новый модуль и поместим в него следующий код:
Код:
Sub assignSpreadsheetObjectToVariable() Dim ss As Spreadsheet Set ss = ActiveSheet.OLEObjects(1).Object ' и дальше ведем здесь разработку ' с использованием переменной ss ss.Range("A1").Value = "Мы управляем Spreadsheet'ом из Excel" ss.Range(ss.Cells(2, 2), ss.Cells(5, 6)).Interior.ColorIndex = 35 End Sub
- запустим этот код (F5) и убедимся, что он работает
Всё! Далее в этой же процедуре можно сочинять свою обработку Spreadsheet, которую по окончании перевести на язык X++:
Всего комментариев 0