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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 06.03.2006, 09:57   #1  
Gustav is offline
Gustav
Moderator
Аватар для Gustav
SAP
Лучший по профессии 2009
 
1,858 / 1152 (42) ++++++++
Регистрация: 24.01.2006
Адрес: Санкт-Петербург
Записей в блоге: 19
Axapta программирует Excel на VBA
Уважаемые коллеги, вашему вниманию предлагается тестовая "поделочка" для демонстрации одной идейки (или нескольких).
"Поделочка" (job) делает следующее:

- грузит построчно заранее подготовленный VBA-код (несколько процедур) из excel-ного sheet-а в заранее подготовленную таблицу в Axapta (условно назовем эту таблицу «Макробиблиотекой»);

- создает новую рабочую книгу Excel;

- выводит из Axapta на лист этой книги список сотрудников вашего предприятия (аля грид в пункте меню Сервис/Телефоны);

- создает в рабочей книге Excel VBA-модуль, который «накачивается» строками кода, ранее сохраненными в «Макробиблиотеке»;

- запускает из Axapta код созданного модуля на выполнение в Excel – в результате выполнения список сотрудников в Excel некоторым образом форматируется;

- удаляет отработавший VBA-код из рабочей книги, оставляя пользователю отформатированный отчёт, не содержащий макросов (у разработчика в «Макробиблиотеке» остается набор макросов для повторного использования).

Cодержание архива:
1. AxRepik_ReadMe.rtf
2. AxRepik_Project.xpo
3. AxRepik_DemoJob.txt
4. AxRepik_CodeLoader.xls

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

Хотелось бы услышать ваши комментарии по поводу представленного способа взаимодействия Axapta c Excel.
Заранее спасибо.
Вложения
Тип файла: zip AxRepik.zip (25.7 Кб, 520 просмотров)
За это сообщение автора поблагодарили: belugin (1).
Старый 06.03.2006, 10:10   #2  
Hamster is offline
Hamster
Участник
 
687 / 13 (2) ++
Регистрация: 15.05.2003
И что в этом нового?
У меня есть класс печати в word-excel, поддерживающий форматирование, вставку строк.
На базе этого класса сделана печать ЛЮБЫХ автоотчетов в Excel, причем понимаются display методы....
Старый 06.03.2006, 10:22   #3  
George Nordic is offline
George Nordic
Модератор
Аватар для George Nordic
Злыдни
 
4,479 / 1250 (50) ++++++++
Регистрация: 17.12.2003
Адрес: Moscow
Записей в блоге: 9
Нового в этом то, что выложено в открытый доступ

С Уважением,
Георгий
Старый 06.03.2006, 10:44   #4  
Gustav is offline
Gustav
Moderator
Аватар для Gustav
SAP
Лучший по профессии 2009
 
1,858 / 1152 (42) ++++++++
Регистрация: 24.01.2006
Адрес: Санкт-Петербург
Записей в блоге: 19
Цитата:
Сообщение от Hamster
И что в этом нового?
У меня есть класс печати в word-excel, поддерживающий форматирование, вставку строк.
На базе этого класса сделана печать ЛЮБЫХ автоотчетов в Excel, причем понимаются display методы....
Слово "ПЕЧАТЬ" здесь не ключевое, форматирование выводимого списка используется исключительно для того, чтобы продемонстрировать ЧТО-ЛИБО, выполняемое на коде VBA (а не классом Axapta). С таким же успехом в рамках примера можно было бы построить, например, в Excel развесистую сводную таблицу. Средствами самого же Excel, причем дальнейший перевод VBA-кода в код X++ не требуется
За это сообщение автора поблагодарили: konopello (1).
Старый 10.03.2006, 18:25   #5  
konopello is offline
konopello
SAP
SAP
 
628 / 76 (4) ++++
Регистрация: 08.11.2005
Адрес: Минск
Помогите
При выполнении данной строки во второй части данного joba на строчке

cell = rng.Offset(0, 0); cell.Value("Список сотрудников предприятия");
вылетает следущая ошибка

Ошибка
Метод ‘Value’ в COM-объекте класса
‘Range’ возвратил код ошибки 0x80020005
(DISP_E_TYPEMISMATCH), который
означает. Один или большее количество
аргументов не могут быть преобразовано


Помогите разобратся в чем дело. А так все работает замечательно.

Весьма благодарен!!!
Старый 10.03.2006, 18:38   #6  
vallys is offline
vallys
Developer
 
146 / 108 (0) +++++
Регистрация: 18.01.2005
Цитата:
Сообщение от konopello
При выполнении данной строки во второй части данного joba на строчке cell = rng.Offset(0, 0); cell.Value("Список сотрудников предприятия"); вылетает следущая ошибка ...
Вместо cell.Value(...) используйте cell.Value2(...)
За это сообщение автора поблагодарили: konopello (1).
Старый 10.03.2006, 18:53   #7  
konopello is offline
konopello
SAP
SAP
 
628 / 76 (4) ++++
Регистрация: 08.11.2005
Адрес: Минск
О спасибо работает!!!
Старый 10.03.2006, 19:51   #8  
Gustav is offline
Gustav
Moderator
Аватар для Gustav
SAP
Лучший по профессии 2009
 
1,858 / 1152 (42) ++++++++
Регистрация: 24.01.2006
Адрес: Санкт-Петербург
Записей в блоге: 19
Цитата:
Сообщение от konopello
При выполнении joba на строчке cell = rng.Offset(0, 0); cell.Value("Список сотрудников предприятия"); вылетает ошибка
хм... любопытно, почему? а у меня не ругается... у меня Axapta 3.0 SP3 и Excel 2000 SP-3, а у Вас?
Про value2 тоже читал на форуме и здесь как раз обрадовался, что, вроде, удалось без него обойтись... хм-хм-хм...
Старый 11.03.2006, 12:53   #9  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2479 (88) +++++++++
Регистрация: 20.08.2005
Это зависит от версии Excel. Начиная с OfficeXP в метод Value() добавлен еще один параметр, который указывает тип передаваемых или получаемых данных. Для того, чтобы передавать как раньше можно делать так.
X++:
#define.xlRangeValueDefault(0x0000000A)
;
...
cell.value(#xlRangeValueDefault, "Список сотрудников предприятия");
__________________
Axapta v.3.0 sp5 kr2
За это сообщение автора поблагодарили: Gustav (1).
Старый 12.03.2006, 15:42   #10  
Gustav is offline
Gustav
Moderator
Аватар для Gustav
SAP
Лучший по профессии 2009
 
1,858 / 1152 (42) ++++++++
Регистрация: 24.01.2006
Адрес: Санкт-Петербург
Записей в блоге: 19
Value и Value2 - в Excel 2000 и XP
2 AndyD: Большое спасибо за "наводку" на Value в XP.

Действительно, в Excel 2000 еще имеем просто Range.Value, а в Excel 2002 уже Range.Value(RangeValueDataType), т.е. с необязательным параметром, который в случае использования Excel как COM-объекта "превращается" в обязательный.

Параметр RangeValueDataType, насколько я понял, в основном предназначен для нужд формата XML и может быть одной из констант перечисления xlRangeValueDataType:
- xlRangeValueDefault = 10 - default-ное значение, которое в Excel VBA может быть опущено;
- xlRangeValueXMLSpreadsheet = 11 - "Returns the values, formatting, formulas and names of the specified Range object in the XML Spreadsheet format";
- xlRangeValueMSPersistXML = 12 - "Returns the recordset representation of the specified Range object in an XML format".

Введя в Excel XP в ячейку А1 значение 1, а потом выполнив в редакторе VB в окне отладки (Immediate) команду:
? Range("A1").Value(10) <Enter> получим строкой ниже ту же 1.
Можете проверить самостоятельно, что получится при выполнении:
? Range("A1").Value(11) и ? Range("A1").Value(12).

Таким образом, оператор, работающий при COM-выводе в Excel 2000:
X++:
cell.value('Список сотрудников предприятия');
в случае использования Excel XP должен быть преобразован в соответствии с рекомендациями AndyD (см. в его сообщении выше) или для неказистых джобиков можно просто "по-плотницки" захардкодить "десяточку" прямо в оператор:
X++:
cell.value(10, 'Список сотрудников предприятия');
Что касается Value2, то его интерпретация в от версии к версии Excel пока не меняется. В Help-е про Value2 сказано:
Цитата:
Remarks
The only difference between this property and the Value property is that the Value2 property doesn’t use the Currency and Date data types.
You can return values formatted with these data types as floating-point numbers by using the Double data type.
(т.е. разница в представлениях значения ячейки возникает в случае применения к ячейке форматов Currency и Date)

Забавно, что пример кода VBA, демонстрирующий различия между Value и Value2 удалось найти не в справке Excel, а в справке OWC.Spreadsheet.10. Привожу этот пример ниже, слегка преобразовав его для возможности запуска в Excel (оригинальный пример для Spreadsheet можно увидеть в его справке - см. ссылку на нее в комментариях примера):
Код:
Sub Value_vs_Value2()
'Этот пример для Excel демонстрирует разницу между Value и Value2
'Help file: C:\Program Files\Common Files\Microsoft Shared\Web Components\10\1033\
'OWCVBA10.CHM / Properties / V / Value2 Property
 
Dim rngCell1 As Range
Dim rngCell2 As Range
' Set a variable to the cells used in this example.
Set rngCell1 = Range("A1")
Set rngCell2 = Range("A2")
' Set the number formats used by the cells in this example.
rngCell1.NumberFormat = "#,##0.00$" '"Currency"
rngCell2.NumberFormat = "dd/mm/yy;@" '"Short Date"
' Set the value of cell A1 to a currency value.
rngCell1.Value = "$123.456789"
' Set the value of cell A2 to a date.
rngCell2.Value = "9/7/1970" 'September 7 1970
' Use the Value property to return the value of cell A1.
MsgBox "Currency returned by the Value Property = " & _
rngCell1.Value
' Use the Value2 property to return the value of cell A1.
MsgBox "Currency returned by the Value2 Property = " & _
rngCell1.Value2
' Use the Value property to return the value of cell A2.
MsgBox "Date returned by the Value Property = " & _
rngCell2.Value
' Use the Value2 property to return the value of cell A2.
MsgBox "Date returned by the Value2 Property = " & _
rngCell2.Value2
End Sub
===============================================================
P.S. 21.08.2006
Непосредственного отношения к данному сообщению информация ниже не имеет. Помещаю ее сюда, чтобы лишний раз не up-ать ветку.

В архиве в файле "AxRepik_ReadMe.rtf" есть такой фрагмент:
Цитата:
ВАЖНО: Если у вас Excel 2002-2003, то для успешности всего процесса следует включить "галочку" в меню Excel: Сервис / Макрос / Безопасность / вкладка "Надежные источники" (вторая из двух) / опция "Доверять доступ к Visual Basic Project" - устанавливаем! (В Excel 2000 этой "галочки" еще просто нет, поэтому там этот шаг не нужен).
Речь идет о ручном включении. Способ автоматического управления этой "галочкой" обсуждается здесь.

Последний раз редактировалось Gustav; 21.08.2006 в 14:38.
Старый 13.03.2006, 11:42   #11  
konopello is offline
konopello
SAP
SAP
 
628 / 76 (4) ++++
Регистрация: 08.11.2005
Адрес: Минск
Весьма благодарен вам за такую подробную информацию. Особенно за даный jobik, для меня было просто открытие, знал что можно, но как, Спасибо!
Теги
excel, vba

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Исследование скорости экспорта данных из Axapta в Excel (коллективный эксперимент) Gustav DAX: База знаний и проекты 79 13.02.2014 13:18
Печать отчета в Excel. Axapta 3.0 Fedr Kuzmich DAX: Функционал 2 19.05.2004 18:26
Подвисание Excel при выводе из Axapta Ser DAX: Функционал 4 24.07.2003 13:59
Введение в Аксапту Роман Кошелев DAX: Прочие вопросы 0 18.12.2001 14:00

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

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

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