Здравствуйте! Имеется лист с гиперссылками общим количеством до тысячи, расположенными в одном столбце. Как создать макрос на их проверку (существует ли объект на который она ссылается) и выделение ячейки с ошибочной гиперссылкой.
Sub Кнопка1_Щелчок()
Dim cell As Range
Dim winHttpReq As Object
Set winHttpReq = CreateObject("WinHttp.WinHttpRequest.5.1")
On Error GoTo l_error
For Each cell In Range("Таблица1").Columns(1).Cells
cell.Offset(0, 1).Value = "Неверный адрес"
Call winHttpReq.Open("GET", cell.Value, False)
Call winHttpReq.Send
If winHttpReq.Status = 200 Then
cell.Offset(0, 1).Value = "Всё ок"
Else
cell.Offset(0, 1).Value = "Неверный запрос"
End If
l_error:
Next cell
End Sub
Спасибо! Работает, но только с гиперссылками на объекты в интернете. С ссылками на файлы находящиеся на компе и на дисках локальной сети не работает Что можно сделать?
Хороший скрипт. У меня задача, проверить тучу ссылок интернет-радиостанций и я прикрутил его к своей задаче, но код в месте со всем Экселем виснет намертво на 30-ти% обработанных ссылок. Помогите пож-ста, может он просто не все типы ссылок может проверить?! Или может вставить паузу между проверкой каждой ссылки, может из-за большого кол-ва он виснет? А список будет постоянно пополняться.
Я не сильно разбираюсь в коде, потому файл прилагаю...
написал: то Вам мешает устроиться поработать на этой радиостанции чтобы проверить ее работоспособность?
Оценил Ваш юмор )))...
Цитата
написал: Объясните доступно и понятно - чего хотите?
А что не так? Просто нужно что бы скрипт помечал не рабочие ссылки и я их в ручную мог удалить. Он проверяет и помечает, но виснет сам и вешает намертво весь Excel. Нужно что бы код без проблем проверил ВСЕ имеющиеся ссылки без зависаний.
Не факт, что ссылки виноваты. Для начала прочитайте #5. В Вашем коде бессмысленный набор букв и ссылок (Call) на макросы, которые никто не видит и не знает, что они делают... Объяснить, что хотите - слабо? Или форумчане должны догадаться и предложить Вам решение, которое Вас устроит?
2016 и 2021... Не все работает одинаково, приходилось сталкиваться....Поэтому и возникают вопросы о подробных обстоятельствах Вашей задачи. Найти все рабочие и все нерабочие ссылки в интернете? В Вашем примере на листе не видно, того, что заявлено в коде. Т.е. "что есть" - " "что нужно получить". Вам нужен поисковик на VBA? P.S. Набрался смелости и пощёлкал по гиперссылкам.Открывается проигрыватель, но не файлы. С предварительным предупреждение от Винды - "Возможно там вирусы".
БМВ, да, поэтому и пытался ТС-а вытянуть на пояснения задачи, но он скрин приложил в последнем посте.. :Жаль, что не личное фото... По фотке всю музыку нашли бы.. См. #11 P.S
написал: _Igor_61 , тут вопрос в обработке потока, который по сути возвращается, а он как бы бесконечен.
Да, нужно что бы после нажатия на кнопку "Проверить" код опросил ссылку и вернул ответ сервера 200 или 403 или 404. Соответственно код 200 обозначаются в таблице как "ОК", 403 и 404 как "Не существует", вот и все, а он просто виснет...!!! Я не знаю как еще проще объяснить, в коде сильно не разбираюсь...
Nickolas, попробуйте ForEach Заменить на For...Next Each может долго искать, до тех пор, пока не появится нужное Но и это ничего не гарантирует, т.к. ответ сервера может быть и другим, кроме перечисленных Вами трех значений
Да, убедился Попробовал свой же совет (For.. Next... , функцию отсюда взял, т.к. сам не имею опыта решения подобных задач, кое-что изменил, думал поможет . Зависать перестало, но с 47 строки у меня начинает тормозить, но терпимо, главное что не виснет совсем. Но другой момент обнаружился - не соответствие "ОК" и "Не существует". Думаю, что это потому, что запрос в реальном времени идет, а файлы на радиостанциях (соответственно и их URL) тоже в реальном времени меняются, вот и результат не всегда верный. Плэйлист открывается, но файлы не находятся... А где "Не существует" бывает что открываются в обозревателе и воспроизводятся... (Это если щелкать по ссылкам в файле) Вот код (для контроля цикла добавил счетчик в "I1"):
Код
Function checkURL(strURL)
On Error GoTo 99
Dim objHTTP
Set objHTTP = CreateObject("WinHttp.WinHttpRequest.5.1")
objHTTP.SetTimeouts 0, 3000, 2000, 5000
objHTTP.Open "HEAD", strURL, False
objHTTP.Send
checkURL = objHTTP.Status
Exit Function
99 checkURL = ""
End Function
Sub qqq()
For i = 2 To 145
Range("I1") = i
If checkURL(Range("B" & i).Value) = "200" Then
Cells(i, 3) = "ok"
Else
Cells(i, 3) = "Не существует"
End If
Next i
End Sub
'http://bbs.vbstreets.ru/viewtopic.php?f=1&t=40806
Наверное или саму задачу конкретней нужно обозначить (например, радиостанция сейчас в сети или нет или что-то другое - но опять же, сервер ответ может постоянно менять (ИМХО)), или другие средства использовать (наверное, это вернее будет)...
написал: Вот код (для контроля цикла добавил счетчик в "I1"):
Спасибо большое, пол дела сделано, не виснет намертво и весь список отрабатывает, но не понятно почему он считает НЕКОТОРЫЕ ссылки не рабочими, хотя они работают..?!
И второй момент - список будет меняться\пополнятся и строка - For i = 2 To 145 там не актуальна... Очень вам благодарен, дальше может кто придаст ума коду, буду очень признателен...
Всем привет! Уважаемые знатоки, помогите пожалуйста.
Имеется файл где есть столбец с гиперссылками на файлы, только одни файлы лежат у меня на компе, а другие лежат на подключённом сетевом диске, путь до них копируется как ссылка на веб ресурс.
Два макроса для работы скопировал с просторов интернет, один должен проверять файлы на компе, другой должен проверять файлы по ссылкам на веб ресурсе, но ни тот ни другой у меня почему то не работают.
Знаний у меня не достаточно что бы это исправить, прошу вашей помощи.
Нужно сделать из двух макросов один, что бы проверял доступность файлов по ссылкам независимо от того, ссылка на локальное расположение или на веб ресурс.
Я не особо знаю порядок написания макроса, но могу предложить следующую последовательность: 1. Сначала очистить столбец 4 "Проверка работоспособности гиперссылок" и столбец 5 "Тип размещения данных гиперссылки" согласно диапазона "гиперссылки" от предыдущих результатов проверки 2. Проверить гиперссылки на доступность файлов, по макросу на локальное расположение (если доступно то поставить статус "Доступно" в столбце 4 и тип расположения например "local # 1" в столбце 5 указать 3. Оставшиеся строки должны быть пустые 4. Далее проверить уже оставшиеся пустые гиперссылки на доступность файлов, по макросу на web расположение (если доступно то поставить статус "Доступно" в столбце 4 и тип расположения например "web # 2" в столбце 5 указать 5. Оставшиеся строки должны быть пустые 6. Если есть ещё какие то типы проверки доступности данных при локальном или веб расположении, указать их уже маркируя local # 2 или web # 2 и так далее 7. Уж если нет вариантов как проверить, то на оставшиеся присвоить что то типа "Не известный тип гиперссылки" а там где совсем нет гиперссылки (могут быть и пустые ячейки) указать "Отсутствует гиперссылка"
Sanja, Кажется там не мой вариант проверки) ну да, тоже проверка файлов по наличию на локальном компьютере (даже просто в папке где сам файл эксель, где бы эта папка ни находилась)
но на сколько я понял есть разница между проверками локально расположенных файлов и где то в сети по web адресу, а ещё и проверок по веб расположению может быть много
в моём примере гипер ссылка создаётся следующим образом
1. открывается папка с расположением файла (либо это папка на компьютере либо в локальной сети, либо это подключенный сетевой диск. 2. Правой кнопкой мыши кликаю на файл и в контекстном меню выбираю "Копировать как путь" 3. Далее в ячейке эксель пишу название файла и прикрепляю гиперссылку по скопированному пути 4. Гиперссылка готова) 5. Далее этих гипер ссылок сделанных одинаково но при различном расположении файлов - тысячи гиперссылок, а ещё и в диапазоне есть пропущенные строки, то есть макрос должен их просто стороной обойти если нет гиперссылки или указать "Отсутствует гиперссылка"