Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Работа с XML через макрос / 14 сообщений из 14, страница 1 из 1
13.09.2010, 13:43
    #36843450
Gabit
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с XML через макрос
Доброе время суток !

Хочу написать небольшой макрос, который импортирует из XML файла данные в Excel.
XML файл не стандартный, и через Excel напрямую не получиться правильно.
Надо учесть что у всех разные версии Excel, и подумал использовать объект MSXML.DOMDocument.
Но объявление переменных ссылкой на объект MSXML, он не понимает:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
Sub ImportXML()

Dim doc As MSXML.DOMDocument
Dim docNode As MSXML.IXMLDOMNode
Dim docNodes  As MSXML.IXMLDOMNodeList

End Sub


Выдает следующую ошибку:
User-defined type not defined

Скажите пожалуйста, в чем проблема ?
...
Рейтинг: 0 / 0
13.09.2010, 13:48
    #36843466
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с XML через макрос
Gabit,

А референс-то вы подключили? И какой?

Я, подключив MS XML 5.0 получаю объект MSXML2

Код: plaintext
1.
2.
Dim doc As MSXML2.DOMDocument
Dim docNode As MSXML2.IXMLDOMNode
Dim docNodes  As MSXML2.IXMLDOMNodeList
...
Рейтинг: 0 / 0
13.09.2010, 14:06
    #36843520
Gabit
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с XML через макрос
Нет, не подключал.
Как это делается ?
Через CreateObject это сделать можно без подключения референс ?
...
Рейтинг: 0 / 0
13.09.2010, 14:11
    #36843534
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с XML через макрос
GabitНет, не подключал.
Как это делается ?

Зайти в "References" и поставить галку

GabitЧерез CreateObject это сделать можно без подключения референс ?

Можно, но тогда переменные объявляйте безличные:
Код: plaintext
1.
2.
3.
Dim doc As Object
Dim docNode As Object
Dim docNodes  As Object
...
Рейтинг: 0 / 0
13.09.2010, 15:12
    #36843682
Gabit
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с XML через макрос
Первый объект удалось так создать:
Код: plaintext
1.
2.
Dim doc As Object
Set doc = CreateObject("MSXML.DOMDocument")

А остальные два, пытался так:
Код: plaintext
1.
2.
3.
4.
5.
Dim docNode As Object
Set docNode = CreateObject("MSXML.IXMLDOMNode")

Dim docNodes As Object
Set docNodes = CreateObject("MSXML.IXMLDOMNodeList")

Пишет ошибку:
Run-time error '429':
ActiveX component can't create object
...
Рейтинг: 0 / 0
13.09.2010, 15:16
    #36843699
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с XML через макрос
Gabit,

Используйте вторую версию
...
Рейтинг: 0 / 0
13.09.2010, 15:54
    #36843807
Gabit
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с XML через макрос
Если я передам пользователю с подключенным референсом, при использовании пользователю также заходить надо каждый раз референс подключать ?
...
Рейтинг: 0 / 0
13.09.2010, 15:55
    #36843812
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с XML через макрос
GabitЕсли я передам пользователю с подключенным референсом, при использовании пользователю также заходить надо каждый раз референс подключать ?

Да вроде бы нет... попробуйте
...
Рейтинг: 0 / 0
13.09.2010, 15:56
    #36843814
Игорь Горбонос
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с XML через макрос
> Автор: Gabit

Буква I перед именем класса подразумевает Интерфейс. Он не создается, он получается. Интерфейс - это набор методов и
свойств для работы с чем-то. В данном случае тебе не нужно создавать интерфейсы, используй созданный MSXML.DOMDocument
для получения их. Объяви две переменных, одну как MSXML.IXMLDOMNode, вторую как MSXML.IXMLDOMNodeList. У
MSXML.DOMDocument возьми список нод
Код: plaintext
Set docNodes = doc.childNodes
А потом или ходи по списку нод:
Код: plaintext
1.
2.
For Each docNode In docNodes
Debug.Print docNode.Name
Next docNode
или создавай новую ноду:
Код: plaintext
Set docNode = doc.createNode(NODE_TEXT, "Имя ноды", "")
и добавляй к документу:
Код: plaintext
doc.appendChild docNode


Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
14.09.2010, 07:15
    #36844629
Gabit
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с XML через макрос
Понял, спасибо Всем !
...
Рейтинг: 0 / 0
14.09.2010, 08:15
    #36844665
Gabit
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с XML через макрос
С каждым разом аппетит растет.
А можно ли с помощью MSXML сделать сортировку ?
У меня например есть такая ветка:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
<row>
  <field name="n_hw" /> 
  <field name="n_gw" /> 
  <field name="n_h"> 70000 </field> 
  <field name="n_i"> 7000 </field> 
  <field name="n_d" /> 
  <field name="n_g_02" /> 
  <field name="n_b" /> 
  <field name="n_j"> 700 </field> 
  <field name="n_fw" /> 
  <field name="n_f"> 07 . 07 . 2009 </field> 
  <field name="n_e"> 7771 </field> 
  <field name="n_a"> 00000002 </field> 
  <field name="n_g_01" /> 
</row>
Надо сортировать по тэгам field и по аттрибуту name . В XSLT это бы выглядело так:
Код: plaintext
<xsl:sort select="field/@name" />

А как это сделать в VBA с помощью MSXML ?
...
Рейтинг: 0 / 0
14.09.2010, 11:30
    #36845058
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с XML через макрос
...
Рейтинг: 0 / 0
14.09.2010, 15:04
    #36845635
Gabit
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с XML через макрос
Там не нашел строки про сортировку.
...
Рейтинг: 0 / 0
14.09.2010, 20:04
    #36846435
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с XML через макрос
Это потому что ее там нет. Там пример как вообще выполнять xsl-трансформации через объектную модель MSXML.
...
Рейтинг: 0 / 0
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Работа с XML через макрос / 14 сообщений из 14, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]