Страницы: 1 2 След.
RSS
Как обновлять формулы каждые 10 секунд
 
Как обновлять формулы каждые 10 секуд
в E5:E10 в Листе1 и Листе 2 и D2:D5 в Листе 3
формула выглядит так, она ссылается на количество просмотров в интернет
=YOUTUBEVIEW("https://www.youtube.com/watch?v=Iio-O-sWgsg&index=2&list=PLIb_c95oir-2cAfEpFx1vCyl08TayRYDt")
Код
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
Изменено: next777pro - 18.08.2016 19:29:26
 
А причем здесь обновление ссылок? Добавьте в начало функции YOUTUBEVIEW строку: Application.Volatile true
а процедуру ReLinks замените на такую:
Код
Sub ReLinks()
    Application.Calcualte
    Main
End Sub
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
сделал
здесь выбило ошибку
   
Код
Application.Calculate
 
Спасибо. все работает добавил в функцию, а сам ReLinks не трогал
 
Цитата
next777pro написал: здесь выбило ошибку
какую ошибку? Это вполне законная строка, которая производит пересчет всех книг. Поэтому должна работать без проблем.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Цитата
The_Prist написал: должна работать без проблем
посмотрите что я не так сделал. после внесения всех изменений
 
Тут все просто:
Цитата
The_Prist написал: Application.Calcualte
писал прямо в форум и опечатался. Должно быть:
Код
Application.Calculate
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
The_Prist,Спасибо большое
 
The_Prist,стал безумно тормозить, в книге много разных формул около 500...
как сделать, как писал изначально

"Как обновлять формулы каждые 10 секуд
в E5:E10 в Листе1 и Листе 2 и D2:D5 в Листе3 "
чтобы они работали только в таких ячейках
Изменено: next777pro - 19.08.2016 11:36:34
 
Так бы и написали, что обновлять только в них надо :)
Код
ThisWrokbook.Sheets("Лист2").Range("E5:E10").Calculate
ThisWrokbook.Sheets("Лист3").Range("D2:D5").Calculate
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
The_Prist, так правильно ?
Код
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, Большое спасибо
 
Не пробовали поменять порядок: сначала проверить, потом спросить (если еще надо)...

Код
Sub ReLinks()
    With ThisWrokbook.Sheets("Лист1")
        .Range("E5:E10").Calculate
        .Range("E5:E10").Calculate
        .Range("D2:D5").Calculate
    End With

    Main
End Sub
 
vikttur,такой макрос разве подойдет, мне кажется нет
 
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
Изменено: next777pro - 19.08.2016 12:28:37
 
Цитата
next777pro написал: такой макрос разве подойдет, мне кажется нет
Цитата
vikttur написал: сначала проверить, потом спросить (если еще надо)...
Это в точности код, копированный из Вашего сообщения, но с объединением родителя под With
 
Вить, листы-то разные...
По факту: ну вот опять. Я опечатался, Вы даже не проверяете. Вам и VBA говорит, что нет такой переменной, как ThisWrokbook
правильно ThisWorkbook
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Цитата
The_Prist написал:  листы-то разные..
Да, прошу прощения, не заметил.
Оставить по With только книгу
 
The_Prist, а я и не подумал, что там опечатка будет)
 
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
Изменено: next777pro - 19.08.2016 13:35:48
 
Цитата
next777pro написал: здесь же в коде все равно ошибку выдает на первой строке
ну это логично. Опечатку-то Вы не убрали...
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Цитата
The_Prist написал: Опечатку-то Вы не убрали.
исправил выше, убрал и перезапустил, и так же выбило, но не сразу со временем в течении 5 минут на той же строке
 
Цитата
next777pro написал:
будет ли он обновляться
не будет.
Application.Volatile true как раз отвечает за то, чтобы функции пользователя обновлялись при общем пересчете.
Уберите эту строку, но оставьте другие:
Код
ThisWorkbook.Sheets("Лист1").Range("E5:E8").Calculate
ThisWorkbook.Sheets("Лист2").Range("D2:D5").Calculate
ThisWorkbook.Sheets("Лист3").Range("E5").Calculate
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
а как сделать, чтобы эта строка работала с паузой и обновлялась каждые 3 минуты
Код
Application.Volatile true
 
причина в команде Application.Volatile True . Она заставляет  функцию в КАЖДОЙ ячейке пересчитываться при любом изменении на любом  листе. Обычно Excel пересчитывает только те ячейки, у которых изменились  влияющие ячейки, т.е. явно указанные в аргументах функции.
Зато благодаря Application.Volatile True пересчитываются все ячейки, в т.ч. нужная

как сделать чтобы она работала как нужно, именно там где функция используется в столбце D2:D36 и E5:E10
Изменено: next777pro - 19.08.2016 13:55:38
 
The_Prist,продолжим , нужен автоматический  пересчет в функции, который сделаем макросом
ее пересчитывать надо каждые 30 секунд, чтобы обновлялась данные
ячейки
на листе 1 E5
на листе 2 E5:E8
на листе 3 D3:D4, нужно пересчитать только в 3 листах книги, остальные не трогаем
Изменено: next777pro - 20.08.2016 15:25:30
 
Достаточно вот так:
Код
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 надо убрать. Диапазоны нужные сами проставьте.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Цитата
The_Prist написал:
при этом Application.Volitile true надо убрать
это убрал, все диапазоны проставил, жду результата и тут выбивает окно предупреждения на этой строке
Код
ThisWorkbook.Sheets("Лист2").Range("E5:E10").Formula = ThisWorkbook.Sheets("Лист2").Range("E5:E10").Formula
 
Цитата
next777pro написал: выбивает окно предупреждения
я должен догадаться о содержимом окна? Или хоть намекнете? У меня никаких окон нет.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Страницы: 1 2 След.
Наверх