Function YOUTUBEVIEW(ByVal URL As String) As Long
Dim t$, v$
'---------------
With CreateObject("msxml2.xmlhttp")
.Open "GET", URL, False
.send
Do: DoEvents: Loop Until .ReadyState = 4
t = .responsetext
End With
With CreateObject("htmlFile")
.Body.innerHTML = t
For Each tg In .GetElementsByTagName("div")
If tg.className = "watch-view-count" Then
v = tg.innertext
Exit For
End If
Next
End With
With CreateObject("VBScript.RegExp")
.Global = True
.Pattern = "\D+"
YOUTUBEVIEW = .Replace(v, "")
End With
End Function
использовал это не помогло
Код
Private Sub Workbook_Open()
Call Main
End Sub
Sub Main()
Application.OnTime Now + TimeValue("00:00:10"), "ReLinks"
End Sub
Sub ReLinks()
ThisWorkbook.UpdateLink Name:=ThisWorkbook.LinkSources
Main
End Sub
Sub ReLinks()
ThisWrokbook.Sheets("Лист1").Range("E5:E10").Calculate
ThisWrokbook.Sheets("Лист2").Range("E5:E10").Calculate
ThisWrokbook.Sheets("Лист3").Range("D2:D5").Calculate
Main
End Sub
The_Prist, пишет Run-time Error '404' и самое странное, когда переставляю строчку, всегда показывает на первой строке тоже самое, например так
Код
Sub ReLinks()
-> ThisWrokbook.Sheets("Лист2").Range("E5:E8").Calculate
ThisWrokbook.Sheets("Лист1").Range("D2:D5").Calculate
ThisWrokbook.Sheets("Лист3").Range("E5").Calculate
Код
Sub ReLinks()
ThisWrokbook.Sheets("Лист1").Range("E5:E8").Calculate
ThisWrokbook.Sheets("Лист2").Range("D2:D5").Calculate
ThisWrokbook.Sheets("Лист3").Range("E5").Calculate
Main
End Sub
Вить, листы-то разные... По факту: ну вот опять. Я опечатался, Вы даже не проверяете. Вам и VBA говорит, что нет такой переменной, как ThisWrokbook правильно ThisWorkbook
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
The_Prist, весь процесс тормозил вставленный в код
Код
Function YOUTUBEVIEW(ByVal URL As String) As Long
Application.Volatile true
убрал его, все летает здесь же в коде все равно ошибку выдает на первой строке
Код
Sub ReLinks()
ThisWorkbook.Sheets("Лист1").Range("E5:E8").Calculate
ThisWorkbook.Sheets("Лист2").Range("D2:D5").Calculate
ThisWorkbook.Sheets("Лист3").Range("E5").Calculate
Main
End Sub
в итоге вышло такое у меня
функция без изменений, код заменил в Relinks ( Application.Calculate) сейчас не тормозит и работает быстро, но не знаю будет ли он обновляться
Код
Function YOUTUBEVIEW(ByVal URL As String) As Long
Dim t$, v$
'---------------
With CreateObject("msxml2.xmlhttp")
.Open "GET", URL, False
.send
Do: DoEvents: Loop Until .ReadyState = 4
t = .responsetext
End With
With CreateObject("htmlFile")
.Body.innerHTML = t
For Each tg In .GetElementsByTagName("div")
If tg.className = "watch-view-count" Then
v = tg.innertext
Exit For
End If
Next
End With
With CreateObject("VBScript.RegExp")
.Global = True
.Pattern = "\D+"
YOUTUBEVIEW = .Replace(v, "")
End With
End Function
Код
Private Sub Workbook_Open()
Call Main
End Sub
Sub Main()
Application.OnTime Now + TimeValue("00:00:10"), "ReLinks"
End Sub
Sub ReLinks()
Application.Calculate
Main
End Sub
не будет. Application.Volatile true как раз отвечает за то, чтобы функции пользователя обновлялись при общем пересчете. Уберите эту строку, но оставьте другие:
причина в команде Application.Volatile True . Она заставляет функцию в КАЖДОЙ ячейке пересчитываться при любом изменении на любом листе. Обычно Excel пересчитывает только те ячейки, у которых изменились влияющие ячейки, т.е. явно указанные в аргументах функции. Зато благодаря Application.Volatile True пересчитываются все ячейки, в т.ч. нужная
как сделать чтобы она работала как нужно, именно там где функция используется в столбце D2:D36 и E5:E10
The_Prist,продолжим , нужен автоматический пересчет в функции, который сделаем макросом ее пересчитывать надо каждые 30 секунд, чтобы обновлялась данные ячейки на листе 1 E5 на листе 2 E5:E8 на листе 3 D3:D4, нужно пересчитать только в 3 листах книги, остальные не трогаем
Sub ReLinks()
ThisWorkbook.Sheets("Лист2").Range("E5:E10").Formula = ThisWorkbook.Sheets("Лист2").Range("E5:E10").Formula
ThisWorkbook.Sheets("Лист3").Range("D2:D5").Formula = ThisWorkbook.Sheets("Лист3").Range("D2:D5").Formula
Main
End Sub
при этом Application.Volitile true надо убрать. Диапазоны нужные сами проставьте.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...