Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.07.2013, 23:24   #1
Sensi
Пользователь
 
Регистрация: 19.01.2010
Сообщений: 13
По умолчанию Макрос записи справа от символа.

Всем здравствуйте и доброго времени суток.

Вот есть такая задача. Точнее две.

первая.
нужно найти некое сочетание символов и вслед за ними (или перед ними) написать заданное слово.

вторая.
есть такие строки в xml файлике
<tag>№№</tag>
нужно вставить "x" вместо "№№". №№ может быть 1-, 2-, 3-х значным числом.
проблема в том, что числа могут встречаться и в других строках... но есть зацепка tag...

Как сделать? заранее очень благодарен специалистам!
Sensi вне форума Ответить с цитированием
Старый 17.07.2013, 01:30   #2
doober
Старожил
 
Аватар для doober
 
Регистрация: 02.05.2009
Сообщений: 3,907
По умолчанию

Файла примера нет,могу только в темную написать.
Код рабочий.

Добавте ссылку на библиотеку MSXML
Код:
Sub Пример_Использования()
 If To_find_and_replace("4638868", "вася4638868пупкин", "C:\Product.xml") Then
 MsgBox "Все ОК"
 Else
  MsgBox "Заменить не удалось"
 End If
End Sub


Public Function To_find_and_replace(find_ As Variant, replace_ As Variant, Path_XML As String) As Boolean
      To_find_and_replace = False
        Dim xmlDoc As MSXML2.DOMDocument30
        Set xmlDoc = New DOMDocument30
        xmlDoc.async = False
        xmlDoc.validateOnParse = False
        xmlDoc.Load (Path_XML)
        Dim objNode As IXMLDOMNode
        Dim objListOfNodes As IXMLDOMNodeList
        Dim Выбор As IXMLDOMNodeList
        xmlDoc.setProperty "SelectionLanguage", "XPath"
        XPath = "//tag"

        Set objListOfNodes = xmlDoc.SelectNodes(XPath)
     
                For Each objNode In objListOfNodes(0).ChildNodes
                If objNode.Text = find_ Then
                objNode.Text = replace_
                To_find_and_replace = True
                  Exit For
                End If
                Next
          xmlDoc.Save Path_XML
End Function
Анализ,обработка данных Недорого
doober вне форума Ответить с цитированием
Старый 17.07.2013, 12:46   #3
Sensi
Пользователь
 
Регистрация: 19.01.2010
Сообщений: 13
По умолчанию

Спасибо, а не могли бы на примере показать, как этот код прикрутить в notepad'e.
хотя я просто копирую его и вставляю в excel. и начинаю обрабатывать как текст..правда при этом форматирование пропадает. и компилятор жалуется MSXML2.DOMDocument30 not defined...

например, вот xml пример.
https://www.dropbox.com/s/2q4q3o1jr2hwift/xml_.xml

Последний раз редактировалось Sensi; 17.07.2013 в 13:00.
Sensi вне форума Ответить с цитированием
Старый 17.07.2013, 22:41   #4
doober
Старожил
 
Аватар для doober
 
Регистрация: 02.05.2009
Сообщений: 3,907
По умолчанию

Перед обработкой файла xml закоментируйте строку в нем
<!DOCTYPE yml_catalog SYSTEM "shops.dtd">
на <!---DOCTYPE yml_catalog SYSTEM "shops.dtd"--->
После обработки верните ее в исходное состояние.
идео в помощь ЗДЕСЬshops.dtd
Вложения
Тип файла: zip XML.zip (10.0 Кб, 11 просмотров)
Анализ,обработка данных Недорого
doober вне форума Ответить с цитированием
Старый 18.07.2013, 12:52   #5
Sensi
Пользователь
 
Регистрация: 19.01.2010
Сообщений: 13
По умолчанию

В общем посидел я, подумал - это не совсем то получается...

нужно то в каждом(!) теге description, которые содержатся в документе xml
А - или поменять значение, (независимо от того какое значение там есть
Б - или при ставить к уже имеющемуся значению (например, к цене любой опять же - приставить "руб.")

то есть к каждому тегу приставить руб. а не к отдельно взятому офферу .
Sensi вне форума Ответить с цитированием
Старый 18.07.2013, 15:19   #6
doober
Старожил
 
Аватар для doober
 
Регистрация: 02.05.2009
Сообщений: 3,907
По умолчанию

Цитата:
Сообщение от Sensi Посмотреть сообщение
В общем посидел я, подумал - это не совсем то получается...
Вам было предложено два варианта поиска вашего загадочного тега.

Исходя из первого варианта,функция приобретает вид

Код:
Public Function To_find_and_replace(AB As Boolean, replace_ As Variant, Path_XML As String) As Boolean
      To_find_and_replace = False
        Dim xmlDoc As MSXML2.DOMDocument30
        Set xmlDoc = New DOMDocument30
        xmlDoc.async = False
        xmlDoc.validateOnParse = False
        xmlDoc.Load (Path_XML)
        Dim objNode As IXMLDOMNode
        Dim objListOfNodes As IXMLDOMNodeList
        Dim Выбор As IXMLDOMNodeList
        xmlDoc.setProperty "SelectionLanguage", "XPath"
        XPath = "//description"

        Set objListOfNodes = xmlDoc.SelectNodes(XPath)
     
     For n = 0 To objListOfNodes.Length - 1
                For Each objNode In objListOfNodes(n).ChildNodes
               If AB Then
                objNode.Text = replace_
               Else
                 objNode.Text = objNode.Text & "руб."
               End If
                To_find_and_replace = True
            Next
                
       Next
          xmlDoc.Save Path_XML
End Function
Анализ,обработка данных Недорого
doober вне форума Ответить с цитированием
Старый 20.07.2013, 00:50   #7
Sensi
Пользователь
 
Регистрация: 19.01.2010
Сообщений: 13
По умолчанию

а почему компилятор ругается на эту строку
MSXML2.DOMDocument30
user-defined type not defined

?

я с точностью это скопировал код функции.. ничего не получается(

я смог сделать только так, как в видео.. но это не подходит.
мне надо заменить значения внутри встречающихся тегов <categoryID> x </categoryID>
и добавить к значению внутри тегов <description> x р.=</description>
подскажите как быть то, как сделать?
Sensi вне форума Ответить с цитированием
Старый 20.07.2013, 04:40   #8
doober
Старожил
 
Аватар для doober
 
Регистрация: 02.05.2009
Сообщений: 3,907
По умолчанию

Цитата:
Сообщение от Sensi Посмотреть сообщение
а почему компилятор ругается на эту строку
MSXML2.DOMDocument30
user-defined type not defined
В самом начале фильма я показал добавление ссылки

Цитата:
подскажите как быть то, как сделать?
Подскажу.
Все тот же пример
Код:
Sub Пример_Использования()
 If To_find_and_replace("93144", "новая categoryID", "C:\yml_catalog.xml") Then
 MsgBox "Все ОК"
 Else
  MsgBox "Заменить не удалось"
 End If
End Sub


Public Function To_find_and_replace(find_ As Variant, replace_ As Variant, Path_XML As String) As Boolean
      To_find_and_replace = False
        Dim xmlDoc As MSXML2.DOMDocument30
        Set xmlDoc = New DOMDocument30
        xmlDoc.async = False
        xmlDoc.validateOnParse = False
        xmlDoc.Load (Path_XML)
        Dim objNode As IXMLDOMNode
        Dim objListOfNodes As IXMLDOMNodeList
        xmlDoc.setProperty "SelectionLanguage", "XPath"
        XPath = "//offer [@id='" & find_ & "']"
        Set objListOfNodes = xmlDoc.SelectNodes(XPath)
                For Each objNode In objListOfNodes(0).ChildNodes
               If objNode.BaseName = "description" Then
               
                 objNode.Text = objNode.Text & "р."
               End If
              
                If objNode.BaseName = "categoryID" Then
               
                 objNode.Text = replace_
               End If
                To_find_and_replace = True
                              
                Next
          xmlDoc.Save Path_XML
End Function
Game Over
Анализ,обработка данных Недорого
doober вне форума Ответить с цитированием
Старый 20.07.2013, 09:24   #9
Sensi
Пользователь
 
Регистрация: 19.01.2010
Сообщений: 13
По умолчанию

опять ругается на это
For Each objNode In objListOfNodes(0).ChildNodes

variable not set...
Sensi вне форума Ответить с цитированием
Старый 20.07.2013, 09:57   #10
динал123
Новичок
Джуниор
 
Регистрация: 20.07.2013
Сообщений: 2
По умолчанию

Все привет , извините что не по теме , у меня такая проблема с роутерем= раньше играл с роутером но вдруг захотел новый ip адрес он был у меня 192.168.1.2 ну я изменил его на 192.168.1.28 просто попробывать но и потом понял что наделал я сменил IPv4 и вдруг сайт routerlogin.com выключился я его включать он нет и интернет отрубылся , помогите как вернуть 192.168.1.2 или хотябы интернет, пытался настроить ну и понял как сделать через копьютер зашол в его свойства и нажал не авто написал свой но интернет и сайт routerlogin.com не работает!
динал123 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ползунок справа от DBgrid'a RikkiTan Помощь студентам 0 23.05.2012 19:10
Макрос записи таблиц Variables Microsoft Office Excel 1 09.02.2012 21:45
как сделать меню справа и чтоб можна было статью писать справа? HTML pufystyj HTML и CSS 7 26.02.2011 14:11
TEdit курсор справа Yuran Общие вопросы Delphi 5 13.05.2010 13:07
Макрос на изменение содержимого поля записи таблицы Reinforced Microsoft Office Access 2 07.10.2009 14:56