powered by simpleCommunicator - 2.0.36     © 2025 Programmizd 02
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Замена текста (заменить href на гиперссылку)
12 сообщений из 12, страница 1 из 1
Замена текста (заменить href на гиперссылку)
    #39534459
maxim863
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть программа , которая работает отлично .Результат ее работы вывод в Excel таблицы элементов (href) (Элемент выглядит : about:new_ftour.php?champ=2604&f_team=412&tour=110). Хочу заменить href на гиперссылку (т.е. заменить текст “about:” на http://allscores.ru/soccer/). После строки (oRange.Value=data) я добавил строку (oRange.Replace What:="about:", Replacement:=" http://allscores.ru/soccer/") . Но по загадочным причинам программа выдает ошибку (Run-time error ‘91’) . В строке (Loop While Not r Is Nothing And r.Address <> firstAddress And iLoop < 19).
Код: vbnet
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.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
167.
168.
169.
170.
171.
Sub Softгиперссылки()
Application.DisplayAlerts = False


Call mainмассивы

Application.DisplayAlerts = True
End Sub


Sub mainмассивы()
    Dim r As Range
    Dim firstAddress As String
    Dim iLoop As Long
    Dim book1 As Workbook
    Dim sheetNames(1 To 19) As String
    Dim Ssilka As String
    
   
    sheetNames(1) = "Лист1"
    sheetNames(2) = "Лист2"
    sheetNames(3) = "Лист3"
    sheetNames(4) = "Лист4"
    sheetNames(5) = "Лист5"
    sheetNames(6) = "Лист6"
    sheetNames(7) = "Лист7"
    sheetNames(8) = "Лист8"
    sheetNames(9) = "Лист9"
    sheetNames(10) = "Лист10"
    sheetNames(11) = "Лист11"
    sheetNames(12) = "Лист12"
    sheetNames(13) = "Лист13"
    sheetNames(14) = "Лист14"
    sheetNames(15) = "Лист15"
    sheetNames(16) = "Лист16"
    sheetNames(17) = "Лист17"
    sheetNames(18) = "Лист18"
    sheetNames(19) = "Лист19"
    
    'пропускаем ошибку
    
    Set book1 = Workbooks.Open("E:\Super M\Проект ставки\Поиск решения\Усов 7\Условия для андердогов\пробная.xlsm")

    
    iLoop = 0
    
    With book1.Worksheets("Лист1").Range("S34:S99") '<--| open wanted workbook and refer to cells "U33:U99" in its worksheet "7"
          
        Set r = .Find(What:="1", LookIn:=xlValues) '<--| the Find() method is called on the range referred to in the preceding With statement
        If Not r Is Nothing Then
            firstAddress = r.Address
            Do
                iLoop = iLoop + 1
                Ssilka = r.Offset(, -14).Hyperlinks.Item(1).Address
                .Parent.Parent.Worksheets(sheetNames(1)).Activate
                .Parent.Parent.Save
                extractTable Ssilka, book1, iLoop
                
                Set r = .FindNext(r) '<--| the FindNext() method is still called on the same range as in the preceding  .Find() statement
            Loop While Not r Is Nothing And r.Address <> firstAddress And iLoop < 19 '<--| exit loop if either you hit the first link or completed three loops
        End If
    End With
    book1.Save
    book1.Close

   
  
    Exit Sub

  
   End Sub


Function extractTable(Ssilka As String, book1 As Workbook, iLoop As Long)
    Dim oDom As Object, oTable As Object, oRow As Object
    Dim iRows As Integer, iCols As Integer
    Dim x As Integer, y As Integer
    Dim data()
    Dim oHttp As Object
    Dim oRegEx As Object
    Dim sResponse As String
    Dim oRange As Range
    
  
    
    ' get page
    Set oHttp = CreateObject("MSXML2.XMLHTTP")
    oHttp.Open "GET", Ssilka, False
    oHttp.Send
    
    ' cleanup response
    sResponse = StrConv(oHttp.responseBody, vbUnicode)
    Set oHttp = Nothing
    
    sResponse = Mid$(sResponse, InStr(1, sResponse, "<!DOCTYPE "))
    
    Set oRegEx = CreateObject("vbscript.regexp")
    With oRegEx
        .MultiLine = True
        .Global = True
        .IgnoreCase = False
        .Pattern = "<(script|SCRIPT)[\w\W]+?</\1>"
        sResponse = .Replace(sResponse, "")
    End With
    Set oRegEx = Nothing
    
    ' create Document from response
    Set oDom = CreateObject("htmlFile")
    oDom.Write sResponse
    DoEvents
    
    ' table with results, indexes starts with zero
    Set oTable = oDom.getelementsbytagname("table")(3)
    
    DoEvents
    
    iRows = oTable.Rows.Length
    iCols = oTable.Rows(1).Cells.Length
    
    ' first row and first column contain no intresting data
    ReDim data(1 To iRows - 1, 1 To iCols - 1)
    
    ' fill in data array
    For x = 1 To iRows - 1
        Set oRow = oTable.Rows(x)
        
        For y = 1 To iCols - 1
             If oRow.Cells(y).Children.Length > 0 Then
                data(x, y) = oRow.Cells(y).getelementsbytagname("a")(0).getattribute("href")
                
              '.Replace(data(x, y), "about:", "http://allscores.ru/soccer/")
              
            End If

        Next y
    Next x
    
    Set oRow = Nothing
    Set oTable = Nothing
    Set oDom = Nothing
    
    
    ' put data array on worksheet
    
    Set oRange = book1.ActiveSheet.Cells(34, iLoop * 25).Resize(iRows - 1, iCols - 1)
    oRange.NumberFormat = "@"
    oRange.Value = data
    
    oRange.Replace What:="about:", Replacement:="http://allscores.ru/soccer/"
  

    Set oRange = Nothing
    
    'Selection.Replace What:=".", Replacement:=",", LookAt:=xlPart, _
    SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
    ReplaceFormat:=False, MatchByte:=False
  
    
    '<DEBUG>
'    For x = LBound(data) To UBound(data)
'        Debug.Print x & ":[ ";
'        For y = LBound(data, 2) To UBound(data, 2)
'            Debug.Print y & ":[" & data(x, y) & "] ";
'        Next y
'        Debug.Print "]"
'    Next x
    '</DEBUG>
    
    

End Function
...
Рейтинг: 0 / 0
Замена текста (заменить href на гиперссылку)
    #39534520
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maxim863Not r Is Nothing And r.Address <> firstAddressне вглядываясь в код - тут косяк. Даже если r=Nothing, второе условие все равно будет пытаться проверяться и выдаст ошибку на r.Address
...
Рейтинг: 0 / 0
Замена текста (заменить href на гиперссылку)
    #39534643
maxim863
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Pro, почему тогда до того как я вставил строку (oRange.Replace What:="about:", Replacement:=http://allscores.ru/soccer/) все работало ?
...
Рейтинг: 0 / 0
Замена текста (заменить href на гиперссылку)
    #39534756
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мы говорим о конкретной строке, в которой возникает конкретное исключение из-за конкретной ошибки. Вы исправили эту ошибку? После исправления что не работает?
...
Рейтинг: 0 / 0
Замена текста (заменить href на гиперссылку)
    #39535342
maxim863
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Pro, учитывая , что программа ищет единицы вот в таком столбце
0
1
0
0
1
0
1
Я не понимаю в чем ошибка (причем до изменения другой строки (см. вопрос) все работало идеально
...
Рейтинг: 0 / 0
Замена текста (заменить href на гиперссылку)
    #39535359
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Еще разmaxim863Но по загадочным причинам программа выдает ошибку (Run-time error ‘91’) . В строке (Loop While Not r Is Nothing And r.Address <> firstAddress And iLoop < 19).Причина не загадочная, а вполне конкретная и устранимая. После устранения какая ошибка и в какой строке?
...
Рейтинг: 0 / 0
Замена текста (заменить href на гиперссылку)
    #39535799
maxim863
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Pro, Хорошо , ошибку устранил (т.е. ошибки больше не выскакивает ) , изменив строку
Код: vbnet
1.
Loop While Not r Is Nothing And r.Address <> firstAddress And iLoop < 19

на
Код: vbnet
1.
2.
If r Is Nothing Then Exit Do  
 Loop While r.Address <> firstAddress And iLoop < 19


Но программа все равно работает неправильно: т.е. после того , как она нашла первую единицу и выполнила все действия с ней ,она просто выходит из программы ,вместо того чтобы найти другую единицу и т.д.
...
Рейтинг: 0 / 0
Замена текста (заменить href на гиперссылку)
    #39535928
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Посмотрите с помощью пошаговой отладки, почему выходит из цикла.
...
Рейтинг: 0 / 0
Замена текста (заменить href на гиперссылку)
    #39535935
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maxim863 После строки (oRange.Value=data) я добавил строку (oRange.Replace What:="about:", Replacement:=" http://allscores.ru/soccer/") .вот какая может быть проблема, я не помню точно, но вроде как объект, который отвечает за Find/Replace - он один на весь эксель, поэтому выполнение Replace с другими параметрами сбрасывает настройки Find в вышестоящей процедуре. Поэтому сначала всплыла ошибка, которая там была и ранее, а когда ее устранили, стало очевидно, что Find ничего не находит
...
Рейтинг: 0 / 0
Замена текста (заменить href на гиперссылку)
    #39535988
maxim863
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Pro, А вот это похоже на правду . Только теперь как выкрутиться из этой ситуации ?)
...
Рейтинг: 0 / 0
Замена текста (заменить href на гиперссылку)
    #39536031
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну в данном-то случае можно вообще обойтись без Find, а просто перебрать набор ячеек в цикле
...
Рейтинг: 0 / 0
Замена текста (заменить href на гиперссылку)
    #39536707
maxim863
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Pro, Точняк. Теперь все работает . Спасибо за ценные подсказки !
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Замена текста (заменить href на гиперссылку)
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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