Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.59/34: Рейтинг темы: голосов - 34, средняя оценка - 4.59
0 / 0 / 0
Регистрация: 09.07.2012
Сообщений: 110
Записей в блоге: 2

Копирование ссылки с веб-страницы

19.07.2012, 02:50. Показов 7189. Ответов 21
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Необходимо написать код, для вывода ссылки с сайта http://zakupki.gov.ru. А именно чтобы он находил в поиске номер заказа с листа 3 и копировал адрес найденной ссылки в строку напротив найденого заказа. Я попытался написать код, но он ничего не выводит
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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
Sub ЗагрузкаСпискаНомеровExcel()
     Dim CStart As Range, BaseStart As Range, Firm$, Mail$, Face$, Ex$, NotEx$, Success As Boolean
Dim yBase&
Dim ra As Range, cell As Range, n As Long: On Error Resume Next
Set CStart = Sheets(3).[A4] 'реестровые номера заказа с листа № 3 (ячейка А4)
     
 
    For i = 1 To 10
         ' формируем ссылку
        URL$ = "http://zakupki.gov.ru/pgz/public/action/search/quick/run?currentSearchString=" & i - после равно должно вставляться поле с реестровым номером заказа (А4) и так по порядку, потом надо чтобы копировался текст ссылки на заказ
 
        Set ra = GetQueryRange(URL$, 6)    ' выполняем веб-запрос
 
        ' перебирая ячейки таблицы-результата, выводим список тем в окно Immediate
        For Each cell In ra.Columns(2).Cells
             If cell.Hyperlinks.Count Then
                 n = n + 1: Debug.Print "Тема №" & n, cell.Text
                 Debug.Print "Ссылка на тему: " & cell.Hyperlinks(1).Address: Debug.Print
             End If
         Next cell
     Next i
 End Sub
Function GetQueryRange(ByVal SearchLink$, Optional ByVal Tables$) As Range
     On Error Resume Next: Err.Clear
     Dim tmpSheet As Worksheet: Set tmpSheet = ThisWorkbook.Worksheets("tmpWQ")
     If tmpSheet Is Nothing Then
         Application.ScreenUpdating = False
         Set tmpSheet = ThisWorkbook.Worksheets.Add
         tmpSheet.Name = "tmpWQ1"
         tmpSheet.Visible = xlSheetVeryHidden
     End If
     If tmpSheet Is Nothing Then
         msg$ = "Не удалось добавить скрытый лист «tmpWQ1» в файл программы"
         MsgBox msg, vbCritical, "Невозможно выполнить запрос к сайту": End
     End If
 
    tmpSheet.Cells.Delete: DoEvents: Err.Clear
     With tmpSheet.QueryTables.Add("URL;" & SearchLink$, tmpSheet.Range("A1"))
         If Len(Tables$) Then
             .WebSelectionType = xlSpecifiedTables
             .WebTables = Tables$
         Else
             .WebSelectionType = xlEntirePage
         End If
         .FillAdjacentFormulas = False: .PreserveFormatting = True
         .RefreshOnFileOpen = False: DoEvents
         .WebFormatting = xlWebFormattingAll
         .Refresh BackgroundQuery:=False: DoEvents
         If Err = 0 Then Set GetQueryRange = tmpSheet.UsedRange
         .Delete: DoEvents
     End With
 End Function
Ссылка должна выглядить так http://zakupki.gov.ru/pgz/publ... Id=3808021
Вложения
Тип файла: rar Шаблон_5.rar (50.7 Кб, 27 просмотров)
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
19.07.2012, 02:50
Ответы с готовыми решениями:

Автоматическое копирование числовых таблиц из веб-страницы в Excel
Добрый вечер, уважаемые коллеги по изучению и пользованию VBA. Надеюсь на вашу ценную помощь и постараюсь сформулировать вопрос наиболее...

Копирование ссылки
Доброго времени суток! Замаялся уже совсем. Написал макрос который копирует с одного листа значения на другой. Проблема в том, что вместо...

Проверить наличие ссылки на веб-странице
Добрый день, на фрейме веб-страницы может располагаться ссылка с текстом Взять задачу в работу. Но данная ссылка также может и...

21
 Аватар для KoGG
5640 / 1622 / 418
Регистрация: 23.12.2010
Сообщений: 2,431
Записей в блоге: 1
19.07.2012, 11:33
При попытке перейти по ссылке
http://zakupki.gov.ru/pgz/publ... Id=3808021
Сайт сообщил о том, что у меня нет прав на просмотр данной страницы.
У запущенного мной макроса тоже не будет прав.
0
0 / 0 / 0
Регистрация: 09.07.2012
Сообщений: 110
Записей в блоге: 2
19.07.2012, 11:45  [ТС]
Цитата Сообщение от KoGG Посмотреть сообщение
При попытке перейти по ссылке
http://zakupki.gov.ru/pgz/publ... Id=3808021
Сайт сообщил о том, что у меня нет прав на просмотр данной страницы.
У запущенного мной макроса тоже не будет прав.
неправильно указал.
http://zakupki.gov.ru/pgz/publ... Id=3808021
0
 Аватар для KoGG
5640 / 1622 / 418
Регистрация: 23.12.2010
Сообщений: 2,431
Записей в блоге: 1
19.07.2012, 16:21
Лучший ответ Сообщение было отмечено как решение

Решение

.....
Вложения
Тип файла: zip bboyRALF_Шаблон_5.zip (77.6 Кб, 55 просмотров)
1
0 / 0 / 0
Регистрация: 09.07.2012
Сообщений: 110
Записей в блоге: 2
19.07.2012, 16:44  [ТС]
Cпасибо, КoGG!
А как сделать чтобы он выводил с результатами на листе 3 а не 2. т.к. 2 это исходник.
в коде у меня везде указан лист (sheets 3)
0
 Аватар для KoGG
5640 / 1622 / 418
Регистрация: 23.12.2010
Сообщений: 2,431
Записей в блоге: 1
19.07.2012, 17:55
Опрос настроен для бывшего Листа2. При работе с Листом3 надо сделать сдвиг на 3 строки:
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
         ' формируем ссылку
        URL$ = "http://zakupki.gov.ru/pgz/public/action/search/quick/run?currentSearchString=" & Right(ThisWorkbook.Sheets(3).Cells(3 + i, 1), 19)
        '- после равно должно вставляться поле с реестровым номером заказа (А4) и так по порядку, потом надо чтобы копировался текст ссылки на заказ
 
        Set ra = GetQueryRange(URL$, "3")    ' выполняем веб-запрос
 
        ' перебирая ячейки таблицы-результата, выводим список тем в окно Immediate
        For Each oCell In ra.Columns(7).Cells
             If oCell.Hyperlinks.Count Then
                 n = n + 1: Debug.Print "Тема №" & n, oCell.Text
                 Debug.Print "Ссылка на тему: " & oCell.Hyperlinks(1).Address: Debug.Print
             End If
         Next oCell
         ra.Range("G22").Copy
         With ThisWorkbook.Sheets(3)
            .Activate
            With .Cells(3 + i, "J")
                .Select
                 ActiveSheet.Paste
                .HorizontalAlignment = xlLeft
                .WrapText = False
                .Value = ra.Range("G22").Hyperlinks(1).Address
            End With
         End With
Затем есть два пути.
1 вариант:
переименовать Лист3 в Лист,
переименовать Лист2 в Лист3,
переименовать Лист в Лист2.
2 вариант:
Во всем проекте сделать глобалную замену sheets(3) на sheets("Лист3")

Добавлено через 17 минут
А еще лучше все индексы в коде заменить явными именами листов.
Я заметил при отладке, что например лист "tmpWQ1" становится первым.
0
0 / 0 / 0
Регистрация: 09.07.2012
Сообщений: 110
Записей в блоге: 2
19.07.2012, 19:06  [ТС]
Что то я запутался, он берет номера заказов с листа 3 ? или Листа 2? Мне нужно с листа 3
0
 Аватар для KoGG
5640 / 1622 / 418
Регистрация: 23.12.2010
Сообщений: 2,431
Записей в блоге: 1
20.07.2012, 14:37
В последней версии файла номера берутся с листа с индексом 3, то есть Sheets(3). В зависимости от существования в книге листа tmpWQ1 это могут быть разные листы. Нужно везде в макросе однозначно задать имена нужных Вам листов: Sheets("Лист1"), Sheets("Лист2"), Sheets("Лист3"). В зависимости от нужного Вам листа делайте или не делайте сдвиг на три строки, как в дополнительном фрагменте кода.
1
0 / 0 / 0
Регистрация: 09.07.2012
Сообщений: 110
Записей в блоге: 2
20.07.2012, 18:06  [ТС]
KoGG, спасибо, разобрался, теперь другой вопрос.
Во вложении на 3 листе. он выводит ссылки. но есть еще одна ссылка, которая как бы лишняя. откуда он берет информацию на нее для поиска. И можете указать пояснения в функции в коде, как она работает? Если не сложно.
Вложения
Тип файла: rar bboyRALF_Шаблон_5.1.rar (121.5 Кб, 15 просмотров)
0
 Аватар для KoGG
5640 / 1622 / 418
Регистрация: 23.12.2010
Сообщений: 2,431
Записей в блоге: 1
22.07.2012, 19:59
Я однозначно переименовал все листы в коде, в том числе в старых макросах, и прокомментировал функцию запроса.
Дополнительная ссылка формируется потому, что цикл в макросе от 1 до 10, независимо от данных на листе3, в данном случае было заполнено девять строк, но по запросу с пустым номером поисковая машина сайта тоже что-то нашла.
Вложения
Тип файла: rar bboyRALF_Шаблон_5.3.rar (113.0 Кб, 35 просмотров)
1
0 / 0 / 0
Регистрация: 09.07.2012
Сообщений: 110
Записей в блоге: 2
24.07.2012, 09:47  [ТС]
KoGG, А если сделать цикл который будет проверять поля на заполненные и пустые. И будет выводить ссылки только с заполненных полей из столбца А
0
 Аватар для KoGG
5640 / 1622 / 418
Регистрация: 23.12.2010
Сообщений: 2,431
Записей в блоге: 1
24.07.2012, 11:44
Достаточно изменить цикл:
Visual Basic
1
For i = 1 To ThisWorkbook.Sheets("Лист3").Range("A4").CurrentRegion.End(xlDown) - 3
1
0 / 0 / 0
Регистрация: 09.07.2012
Сообщений: 110
Записей в блоге: 2
24.07.2012, 12:12  [ТС]
Цитата Сообщение от KoGG Посмотреть сообщение
Достаточно изменить цикл:
Visual Basic
1
For i = 1 To ThisWorkbook.Sheets("Лист3").Range("A4").CurrentRegion.End(xlDown) - 3
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
34
35
 For i = 1 To ThisWorkbook.Sheets("Лист3").Range("A4").CurrentRegion.End(xlDown) - 4
 
        ' формируем ссылку
        ' Сайт и поисковый запрос к сайту.
        'Синтаксис построения запроса определяется поисковой машиной сайта
        URL$ = "http://zakupki.gov.ru/pgz/public/action/search/quick/run?currentSearchString=" & Right(ThisWorkbook.Sheets("Лист3").Cells(3 + i, 1), 19)
        '- после равно должно вставляться поле с реестровым номером заказа (А4) и так по порядку, потом надо чтобы копировался текст ссылки на заказ
 
        Set ra = GetQueryRange(URL$, "3")    ' выполняем веб-запрос
 
        ' перебирая ячейки таблицы-результата, выводим список тем в окно Immediate
        For Each oCell In ra.Columns(7).Cells
             If oCell.Hyperlinks.Count Then
                 n = n + 1: Debug.Print "Тема №" & n, oCell.Text
                 Debug.Print "Ссылка на тему: " & oCell.Hyperlinks(1).Address: Debug.Print
             End If
        Next oCell
        'Копируем ячейку со ссылкой с листа "tmpWQ1"
        ra.Range("G22").Copy
        With ThisWorkbook.Sheets("Лист3")
           .Activate
           With .Cells(3 + i, "J")
               .Select
               ' вставляем скопированную ячейку на "Лист3"
                ActiveSheet.Paste
                ' Форматирование
               .HorizontalAlignment = xlLeft
               .WrapText = False
               ' Вcтавляемый видимый текст ссылки
               .Value = ra.Range("G22").Hyperlinks(1).Address
           End With
        End With
 
     Next i
 End Sub
После замены он перестал искать =(
Вложения
Тип файла: rar bboyRALF_Шаблон_5.3.1.rar (120.8 Кб, 8 просмотров)
0
0 / 0 / 0
Регистрация: 09.07.2012
Сообщений: 110
Записей в блоге: 2
24.07.2012, 14:43  [ТС]
А именно на основе шаблона во вложении
Вложения
Тип файла: rar непонятнома1.rar (101.5 Кб, 6 просмотров)
0
 Аватар для KoGG
5640 / 1622 / 418
Регистрация: 23.12.2010
Сообщений: 2,431
Записей в блоге: 1
24.07.2012, 17:02
Ошибся:
Visual Basic
1
For i = 1 To ThisWorkbook.Sheets("Лист3").Range("A4").CurrentRegion.End(xlDown).Row - 3
1
0 / 0 / 0
Регистрация: 09.07.2012
Сообщений: 110
Записей в блоге: 2
24.07.2012, 19:59  [ТС]
но тут возникла проблема. У меня несколько фирм. на 3м листе (в предыдущем вложении). А цикл поиска идет только до пустой строчки. Как можно организовать, что бы цикл продолжал дальше искать
0
 Аватар для KoGG
5640 / 1622 / 418
Регистрация: 23.12.2010
Сообщений: 2,431
Записей в блоге: 1
24.07.2012, 22:20
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
34
35
36
37
38
39
Sub ЗагрузкаСпискаНомеровExcel()
    Dim CStart As Range, BaseStart As Range, Firm$, Mail$, Face$, Ex$, NotEx$, Success As Boolean
    Dim yBase&
    Dim ra As Range, oCell As Range, n As Long: On Error Resume Next
    With ThisWorkbook.Sheets("Лист3")
        'Нижеследующее присвоение ссылки на объект в данном макросе не используется.
        Set CStart = .[A4] 'реестровые номера заказа с листа № 3 (ячейка А4)
        For i = 1 To .UsedRange.End(xlDown).Row - 3
            If Val(Right(.Cells(3 + i, 1), 19)) > 1 Then
                 ' формируем ссылку
                 ' Сайт и поисковый запрос к сайту.
                 'Синтаксис построения запроса определяется поисковой машиной сайта
                 URL$ = "http://zakupki.gov.ru/pgz/public/action/search/quick/run?currentSearchString=" & Right(.Cells(3 + i, 1), 19)
                 '- после равно должно вставляться поле с реестровым номером заказа (А4) и так по порядку, потом надо чтобы копировался текст ссылки на заказ
                 Set ra = GetQueryRange(URL$, "3")    ' выполняем веб-запрос
                 ' перебирая ячейки таблицы-результата, выводим список тем в окно Immediate
                 For Each oCell In ra.Columns(7).Cells
                      If oCell.Hyperlinks.Count Then
                          n = n + 1: Debug.Print "Тема №" & n, oCell.Text
                          Debug.Print "Ссылка на тему: " & oCell.Hyperlinks(1).Address: Debug.Print
                      End If
                 Next oCell
                'Копируем ячейку со ссылкой с листа "tmpWQ1"
                ra.Range("G22").Copy
                .Activate
                With .Cells(3 + i, "J")
                      .Select
                      ' вставляем скопированную ячейку на "Лист3"
                       ActiveSheet.Paste
                       ' Форматирование
                      .HorizontalAlignment = xlLeft
                      .WrapText = False
                      ' Вcтавляемый видимый текст ссылки
                      .Value = ra.Range("G22").Hyperlinks(1).Address
                End With
            End If
        Next i
    End With
 End Sub
1
0 / 0 / 0
Регистрация: 09.07.2012
Сообщений: 110
Записей в блоге: 2
25.07.2012, 00:23  [ТС]
KoGG, спасибо!
Но проблема осталась актуальной. Расстояние между строками до следующих номеров заказов 4 строки..

во вложении, на листе 3
Вложения
Тип файла: rar шаблон.rar (90.0 Кб, 12 просмотров)
0
 Аватар для KoGG
5640 / 1622 / 418
Регистрация: 23.12.2010
Сообщений: 2,431
Записей в блоге: 1
25.07.2012, 10:39
.....
Вложения
Тип файла: zip bboyRALF_Шаблон_6.zip (97.2 Кб, 39 просмотров)
1
0 / 0 / 0
Регистрация: 09.07.2012
Сообщений: 110
Записей в блоге: 2
25.07.2012, 12:18  [ТС]
KoGG, Спасибо! Все работает на УРА
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
25.07.2012, 12:18
Помогаю со студенческими работами здесь

VBA Копирование картинки из HTML страницы
Добрый день. В файле Экселя есть ссылки на HTML страницы содержащие фотографии. Пример:...

Копирование данных с отображаемой web-страницы
Здравствуйте уважаемые мастера экселя! Подскажите пожалуйста новичку экселя Создал таблицу. В листе spisok, столбец B, D, F и т.д. ...

Копирование массива данных со страницы на страницу
День добрый. Впервые столкнулся с необходимостью создания макроса на Excel, нужна помощь специалистов :) Есть книга Excel, в ней...

Извлечение текста из веб-страницы
Доброго времени суток, специалисты VBA. Посоветуйте решение. На листе в ячейку E2 - вписано название веб-страницы:...

Задание осмысленной ссылки на страницы multipage
Не могу найти внятное объяснение - как перемещаться по вкладкам MultiPage. Выражения типа me.Multipage1.value = 3 порождают ошибку,...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru