|
06.03.2006, 09:57 | #1 |
Moderator
|
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. Заранее спасибо. |
|
|
За это сообщение автора поблагодарили: belugin (1). |
06.03.2006, 10:10 | #2 |
Участник
|
И что в этом нового?
У меня есть класс печати в word-excel, поддерживающий форматирование, вставку строк. На базе этого класса сделана печать ЛЮБЫХ автоотчетов в Excel, причем понимаются display методы.... |
|
06.03.2006, 10:44 | #3 |
Moderator
|
Цитата:
Сообщение от Hamster
И что в этом нового?
У меня есть класс печати в word-excel, поддерживающий форматирование, вставку строк. На базе этого класса сделана печать ЛЮБЫХ автоотчетов в Excel, причем понимаются display методы.... |
|
|
За это сообщение автора поблагодарили: konopello (1). |
06.03.2006, 10:22 | #4 |
Модератор
|
Нового в этом то, что выложено в открытый доступ
С Уважением, Георгий |
|
10.03.2006, 18:25 | #5 |
SAP
|
Помогите
При выполнении данной строки во второй части данного joba на строчке
cell = rng.Offset(0, 0); cell.Value("Список сотрудников предприятия"); вылетает следущая ошибка Ошибка Метод ‘Value’ в COM-объекте класса ‘Range’ возвратил код ошибки 0x80020005 (DISP_E_TYPEMISMATCH), который означает. Один или большее количество аргументов не могут быть преобразовано Помогите разобратся в чем дело. А так все работает замечательно. Весьма благодарен!!! |
|
10.03.2006, 18:38 | #6 |
Developer
|
Цитата:
Сообщение от konopello
При выполнении данной строки во второй части данного joba на строчке cell = rng.Offset(0, 0); cell.Value("Список сотрудников предприятия"); вылетает следущая ошибка ...
|
|
|
За это сообщение автора поблагодарили: konopello (1). |
10.03.2006, 18:53 | #7 |
SAP
|
О спасибо работает!!!
|
|
10.03.2006, 19:51 | #8 |
Moderator
|
Цитата:
Сообщение от konopello
При выполнении joba на строчке cell = rng.Offset(0, 0); cell.Value("Список сотрудников предприятия"); вылетает ошибка
Про value2 тоже читал на форуме и здесь как раз обрадовался, что, вроде, удалось без него обойтись... хм-хм-хм... |
|
11.03.2006, 12:53 | #9 |
Участник
|
Это зависит от версии Excel. Начиная с OfficeXP в метод Value() добавлен еще один параметр, который указывает тип передаваемых или получаемых данных. Для того, чтобы передавать как раньше можно делать так.
X++: #define.xlRangeValueDefault(0x0000000A)
;
...
cell.value(#xlRangeValueDefault, "Список сотрудников предприятия");
__________________
Axapta v.3.0 sp5 kr2 |
|
|
За это сообщение автора поблагодарили: Gustav (1). |
12.03.2006, 15:42 | #10 |
Moderator
|
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('Список сотрудников предприятия'); X++: cell.value(10, 'Список сотрудников предприятия'); Цитата:
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. Забавно, что пример кода 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 |
SAP
|
Весьма благодарен вам за такую подробную информацию. Особенно за даный jobik, для меня было просто открытие, знал что можно, но как, Спасибо!
|
|