powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Работа с XML через макрос
14 сообщений из 14, страница 1 из 1
Работа с XML через макрос
    #36843450
Фотография Gabit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Доброе время суток !

Хочу написать небольшой макрос, который импортирует из 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
Работа с XML через макрос
    #36843466
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Работа с XML через макрос
    #36843520
Фотография Gabit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нет, не подключал.
Как это делается ?
Через CreateObject это сделать можно без подключения референс ?
...
Рейтинг: 0 / 0
Работа с XML через макрос
    #36843534
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GabitНет, не подключал.
Как это делается ?

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

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

Можно, но тогда переменные объявляйте безличные:
Код: plaintext
1.
2.
3.
Dim doc As Object
Dim docNode As Object
Dim docNodes  As Object
...
Рейтинг: 0 / 0
Работа с XML через макрос
    #36843682
Фотография Gabit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Первый объект удалось так создать:
Код: 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
Работа с XML через макрос
    #36843699
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gabit,

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

Да вроде бы нет... попробуйте
...
Рейтинг: 0 / 0
Работа с XML через макрос
    #36843814
Фотография Игорь Горбонос
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> Автор: 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
Работа с XML через макрос
    #36844629
Фотография Gabit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Понял, спасибо Всем !
...
Рейтинг: 0 / 0
Работа с XML через макрос
    #36844665
Фотография Gabit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
С каждым разом аппетит растет.
А можно ли с помощью 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
Работа с XML через макрос
    #36845058
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Работа с XML через макрос
    #36845635
Фотография Gabit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Там не нашел строки про сортировку.
...
Рейтинг: 0 / 0
Работа с XML через макрос
    #36846435
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это потому что ее там нет. Там пример как вообще выполнять xsl-трансформации через объектную модель MSXML.
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Работа с XML через макрос
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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