Форум программистов, компьютерный форум, киберфорум
Наши страницы
VBA
Войти
Регистрация
Восстановить пароль
 
olly_d
0 / 0 / 0
Регистрация: 26.05.2012
Сообщений: 13
#1

Как измененить значения в HTML-коде с помощью макроса? - VBA

03.06.2014, 20:20. Просмотров 509. Ответов 15
Метки нет (Все метки)

Доброго время суток!
В программировании я ноль, так что опять надеюсь на помощь Вашего форума.

Дано:

Нужен макрос для FrontPage который бы в хтмл коде находил вот такое значение выделено красным:

<span class="productPrice">
20,40 </span>
даю его с уникальным кодом по которому можно его найти.
Так вот что нужно:
1.Найти значение (выделенные красным), значение может быть и 2 и 3 и возможно 4-х значное перед запятой и двух после запятой
2. это значение нужно умножить на 1,3 и результат записать вместо исходной.

Заранее благодарен!
Моя благодарность не будет знать границ, но в пределах разумного.

Добавлено через 14 минут
Похожая ситуация в Ворде мне помогли, возможно можно только изменить:


Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
Sub Макрос1()
Selection.HomeKey Unit:=wdStory
With Selection.Find
    .ClearFormatting
    .Text = "[0-9]{2;3} грн./упаковка"
    .Replacement.Text = ""
    .Forward = True
    .Wrap = wdFindStop
    .Format = False
    .MatchCase = False
    .MatchWholeWord = False
    .MatchAllWordForms = False
    .MatchSoundsLike = False
    .MatchWildcards = True
End With
Do While Selection.Find.Execute
    With Selection
        .Collapse
        .Expand wdWord
        If IsNumeric(.Text) Then .TypeText .Text * 1.2 & " " 'на 20%
    End With
Loop
End Sub
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.06.2014, 20:20
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Как измененить значения в HTML-коде с помощью макроса? (VBA):

Как создать папку с помощью макроса?
Коллеги, добрый вечер! Макрос создаёт файлы с данными и должен их сохранять в...

Как скопировать папку с помощью макроса?
Собственно говоря нужно макросе EXCEL скопировать папку со всем её содержимым...

Как полностью убить с помощью макроса файл?
Возникла следущая задача. Макрос в открытом Excel файле должен удалить этот же...

Как изменить активный лист в коде одного макроса?
Здравствуйте, подскажите как сделать в одном макросе замену активного листа. То...

Как с помощью макроса добавить ' ' к каждому переводу строки в тексте?
Друзья, вот какая штука. В икселе в ячейках забит текст, разделенный на...

Как открыть существующую Workbook на заданном листе (Worksheet) с помощью макроса?
Как открыть существующую Workbook на заданном листе (Worksheet) с помощью...

15
ikki
призрак
2822 / 878 / 117
Регистрация: 11.05.2012
Сообщений: 1,702
Записей в блоге: 2
03.06.2014, 21:39 #2
как-то сложновато у меня получилось. попытался учесть все реально возможные случаи.
особых хлопот доставило возможное увеличение числа знаков после умножения
думаю, можно и попроще написать. впрочем, вполне рабочий вариант:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
Option Explicit
Sub t()
  Dim sTest$, s1$, s2$, st$, sRes$, r As Object, m As Object, i&
  Set r = CreateObject("vbscript.regexp")
  r.Pattern = "<span class=""productPrice"">\s*(\d{2,4},\d\d)\s*</span>"
  r.Global = True: r.Multiline = True
  
  sTest = "Ajhjfhj fgjfgj fgj <span class=""productPrice""> 20,40</span>" _
        & " gfghfg dhdf <span class=""productPrice"">99,10</span> cbnc" _
        & " gfgh fg <span class=""productPrice""> 2540,10  </span> cgfc"
        
  Set m = r.Execute(sTest)
  If m.Count Then
    If m(m.Count - 1).FirstIndex + m(m.Count - 1).Length < Len(sTest) Then
      sRes = Right(sTest, Len(sTest) - m(m.Count - 1).FirstIndex - m(m.Count - 1).Length)
    End If
    For i = m.Count - 1 To 0 Step -1
      s1 = m(i).SubMatches(0)
      s2 = Replace(Format(Val(Replace(s1, ",", ".")) * 1.3, "0.00"), ".", ",")
      st = Replace(m(i), s1, s2)
      If i > 0 Then
        sRes = Mid(sTest, m(i - 1).FirstIndex + m(i - 1).Length + 1, m(i).FirstIndex - m(i - 1).FirstIndex - m(i - 1).Length) & st & sRes
      Else
        sRes = st & sRes
      End If
    Next
    If m(0).FirstIndex > 0 Then sRes = Left(sTest, m(0).FirstIndex) & sRes
  End If
End Sub
Добавлено через 26 минут
в виде функции и чуть короче:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
Function olly$(s$)
  Dim st$, sRes$, r As Object, m As Object, i&
  Set r = CreateObject("vbscript.regexp")
  r.Pattern = "(?!<span class=""productPrice"">\s*)\d{2,4},\d\d(?=\s*</span>)"
  r.Global = True
  
  Set m = r.Execute(s)
  If m.Count Then
    If m(0).FirstIndex Then sRes = Left(s, m(0).FirstIndex)
    For i = 0 To m.Count - 1
      st = Replace(Format(Val(Replace(m(i), ",", ".")) * 1.3, "0.00"), ".", ",")
      If i < m.Count - 1 Then
        sRes = sRes & st & Mid(s, m(i).FirstIndex + m(i).Length + 1, m(i + 1).FirstIndex - m(i).FirstIndex - m(i).Length)
      Else
        sRes = sRes & st
      End If
    Next
    If m(m.Count - 1).FirstIndex + m(m.Count - 1).Length < Len(s) Then
      sRes = sRes & Right(s, Len(s) - m(m.Count - 1).FirstIndex - m(m.Count - 1).Length)
    End If
    olly = sRes
  Else
    olly = s
  End If
End Function
 
Sub tt()
  Dim sTest$
  sTest = "Ajhjfhj fgjfgj fgj <span class=""productPrice""> 20,40</span>" _
        & " gfghfg dhdf <span class=""productPrice"">99,10</span> cbnc" _
        & " gfgh fg <span class=""productPrice""> 2540,10  </span> cgfc"
  MsgBox olly(sTest)
End Sub
1
olly_d
0 / 0 / 0
Регистрация: 26.05.2012
Сообщений: 13
03.06.2014, 21:43  [ТС] #3
Не работает.
возможно непонятно объяснил.
Прикрепленный файл хтмл, если открыть можно увидеть строчку "Оптовая цена: 148,20"
мне нужен макрос который умножит цифру после двоеточий на 1,3. цифры могут быть разные.
0
Вложения
Тип файла: rar этника.rar (3.8 Кб, 3 просмотров)
olly_d
0 / 0 / 0
Регистрация: 26.05.2012
Сообщений: 13
03.06.2014, 21:44  [ТС] #4
второй вариант еще не перобовал
0
olly_d
0 / 0 / 0
Регистрация: 26.05.2012
Сообщений: 13
03.06.2014, 21:49  [ТС] #5
второй вариант выдает ошибку
0
Миниатюры
Как измененить значения в HTML-коде с помощью макроса?  
olly_d
0 / 0 / 0
Регистрация: 26.05.2012
Сообщений: 13
03.06.2014, 21:54  [ТС] #6
может попробовать изменять значение не в коде а в визуальном редакторе проще будет.
таких позиций около 5000 и все разные (это цена которую нужно автоматом умножить на 1,3)
0
Миниатюры
Как измененить значения в HTML-коде с помощью макроса?  
ikki
призрак
2822 / 878 / 117
Регистрация: 11.05.2012
Сообщений: 1,702
Записей в блоге: 2
03.06.2014, 21:56 #7
какую ошибку? это просто сообщение (результат работы) для тестовой строки.
вы вообще ничего не понимаете в VBA?

пс. FrontPage'ем не обладаю. а у него тоже есть свой VBA? боюсь, из-за одной задачи устанавливать сие чудо и вникать в его объектную модель я не буду.
могу предложить vbs-скрипт для изменения html-файла (закрытого в этот момент).
конечно, это будет менее удобно в использовании, чем работа непосредственно в FrontPage.

но в качестве альтернативы у вас остается вариант подождать знатока по FP.
0
olly_d
0 / 0 / 0
Регистрация: 26.05.2012
Сообщений: 13
03.06.2014, 22:04  [ТС] #8
VBA для меня это китайская грамота.
Во всех приложениях офис есть функция макрос через vba.
Мне просто надо изменить цену. а каким способом все равно. тем более хтмл мне надо для офлайна.

Добавлено через 1 минуту
у меня таких файлов 50 штук и в каждом около 100-150 цен которые надо изменить
0
ikki
призрак
2822 / 878 / 117
Регистрация: 11.05.2012
Сообщений: 1,702
Записей в блоге: 2
03.06.2014, 22:21 #9
мде... что-то капризничает у меня vbs. разбираться пока некогда.

Excel у вас есть? открываете приложенный файлик, в ячейку A1 вводите имя html-файла с расширением и нажимаете кнопку.
файл будет изменён. открываете в браузере и проверяете.

файл должен находиться в той же папке, в которой сохранён xls-файл.
или в яч. A1 нужно задавать имя с полным путём.

если получится - можно будет сделать вариант для пакетной обработки ваших "50 штук"

пс. кшн, весь этот вариант - "надевание трусов через голову". но - "всё что могу" (с)
1
Вложения
Тип файла: xls olly.xls (28.0 Кб, 4 просмотров)
olly_d
0 / 0 / 0
Регистрация: 26.05.2012
Сообщений: 13
03.06.2014, 22:33  [ТС] #10
все супер!!!

А групповая обработка не сильно напряжно будет сделать?
0
ikki
призрак
2822 / 878 / 117
Регистрация: 11.05.2012
Сообщений: 1,702
Записей в блоге: 2
03.06.2014, 22:37 #11
все файлы в одной папке?
можете составить списочек их имен?
тогда можно запихнуть этот списочек на лист Excel и по кнопке обработать поочередно в цикле.
0
ikki
призрак
2822 / 878 / 117
Регистрация: 11.05.2012
Сообщений: 1,702
Записей в блоге: 2
03.06.2014, 22:41 #12
Лучший ответ Сообщение было отмечено olly_d как решение

Решение

код меняется чуть-чуть.
основное требование - имена должны быть корректные, начинаться с яч. A1 и далее в столбец без пропусков
1
Вложения
Тип файла: xls olly.xls (28.0 Кб, 6 просмотров)
olly_d
0 / 0 / 0
Регистрация: 26.05.2012
Сообщений: 13
03.06.2014, 22:42  [ТС] #13
думаю заморачиваться не стоит!
У меня вопрос но уже наверно за деньги и не на сегодня.
Если у меня завтра все выгорит мне нужно будет какой то макрос если это возможно который бы с таких хтм файлов вытягивал инфу в эксель файл артикул , фото, наименование и цену в отдельную колонку.
И сколько это будет стоить?
0
ikki
призрак
2822 / 878 / 117
Регистрация: 11.05.2012
Сообщений: 1,702
Записей в блоге: 2
03.06.2014, 22:46 #14
пишите в личку, обсудим.
пс. честно говоря, сам писать не хочу. но могу дать ссылку на готовое решение, правда, требующее непростой настройки. у автора можно заказать и настройку.
0
olly_d
0 / 0 / 0
Регистрация: 26.05.2012
Сообщений: 13
03.06.2014, 22:48  [ТС] #15
Спасибо Вам огромное! Я что то должен?
0
ikki
призрак
2822 / 878 / 117
Регистрация: 11.05.2012
Сообщений: 1,702
Записей в блоге: 2
03.06.2014, 22:49 #16
нет, конечно.
удачи.
2
03.06.2014, 22:49
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.06.2014, 22:49
Привет! Вот еще темы с решениями:

Как различить с помощью макроса, какой является текущая ссылка из коллекции Hyperlinks
Добрый вечер, форумчане и гости! Помогите разобраться, пожалуйста! Как мне...

Как с помощью макроса определить в тексте таблицу, и узнать количество строк/столбцов?
как с помощью макроса определить в тексте таблицу и узнать...количество...

Как с помощью макроса во всём столбце I выделить разными цветами все совпадения названий?
Здравствуйте ребята =( Появился вопрос как с помощью макроса во всём...

Как с помощью макроса автоматически выбрать данные из другого файла Excel в нужные ячейки?
Как с помощью макроса автоматически выбрать данные из другого файла Excel в...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru