Выбрать дату в календареВыбрать дату в календаре

Страницы: 1
Время изменения не сохраненного (!) файла, открыл файл - через 5 минут внесли значение в ячейку - как получить
 
sokol92, такое решение не совсем подходит..
Сейчас алгоритм таков:
1. Есть скрипт в FileMaker, который открывает по очереди файлы и ждет заранее заданное время для каждого из них. (подчеркнутую часть необходимо заменить)
2. При открытии файлов, они обновляются надстройкой блумберга.
3. Здесь нужно определить, перестал ли файл изменяться (сейчас просто тикает заранее заданная задержка)
4. Далее FileMaker открывает следующий VBS скрипт (также может открыть Excel файл с VBA кодом при запуске):
Скрытый текст

который сохраняет и закрывает текущие открытые файлы (хотя по факту открыт всегда один), но при этом оставляет открытым Эксель, что позволяет быстрее открывать следующий файл

Решение которое будет определять закончились ли изменения в текущей книге, должно запускаться отдельно, нету возможности добавлять код в каждую книгу, которую нужно открыть.
Вместо VBS кода можно также просто открывать Excel файл, который при открытии будет реализовывать VBA код.

Есть у кого идеи как это можно реализовать?

Цитата
Юрий М написал:  Jormen , не нужно писать через 1-2-3 строки.
Цитата
vikttur написал: Забыл дописать: вернитесь, исправьте сообщение.
Прошу прощения, правлю когда замечаю. В Firefox форумная писалка сообщений странно себя ведет, текст постоянно скачет.

Цитата
Юрий М написал: Внесли изменения у одну ячейку, во вторую - как макрос узнает, что Вы не собираетесь менять в третьей?
Если прошло определенное время (нами заданное) и изменений не было, то можно считать что изменения закончились. К примеру, я знаю, что надстройка не простаивает по 5 секунд, поэтому могу проверять были ли еще изменения в течении 5 секунд.
Изменено: Jormen - 27.06.2018 22:34:54
Время изменения не сохраненного (!) файла, открыл файл - через 5 минут внесли значение в ячейку - как получить
 
Цитата
Alemox написал: Что именно делает надстройка?Если просто заносит какие то данные, то время можно отловить на событие пересчёта или Change.
Надстройка обновляет часть данных, после чего ведутся перерасчеты. Не подскажете пример кода как ловить перерасчет либо изменение в книге?

Как я понимаю, грубо говоря будет что-то вроде: при изменениях либо перерасчете, получать текущее время в переменную. Через 5 секунд сравнить текущее время с временем в переменной + 5. Если совпадает, то изменения больше не делаются.
Так?

Цитата
Юрий М написал: Вариант: после внесения изменений сохранять КОПИЮ файла. А время сохранения копии всегда можно посмотреть.
Мне собственно нужно узнать момент, когда изменения закончили вноситься. После этого мне нужно просто запустить отдельный скрипт. Вся суть в определении этого момента.
Изменено: Jormen - 27.06.2018 22:35:53
Время изменения не сохраненного (!) файла, открыл файл - через 5 минут внесли значение в ячейку - как получить
 
Надстройка от блумберга, править ее возможности нету. На надсройку внимание можете не обращать - суть проблемы в том, определить когда были последние изменения в файле
Время изменения не сохраненного (!) файла, открыл файл - через 5 минут внесли значение в ячейку - как получить
 
Всем доброго вечера!

Проблема следующая:
Есть надстройка, которая при открытии файлов обновляет их. Занимает этот процесс разное время на разных файлах. После того, как надстройка закончила работу, должен запуститься скрипт, который сохраняет и закрывает книгу.

Мне необходимо как-то указать vba/vbs скрипту, что надстройка закончила работу и можно сохранять и закрывать файл. Сейчас просто стоит фиксированная задержка, что не является хорошим решением.

Пока что придумал два варианта решения проблемы:
1. Сравнивать текущее время с временем последнего изменения файла + 5-10 секунд.
К сожалению, не смог нагуглить возможно ли вообще получить эту информацию. DateLastModified возвращает дату последнего сохранения файла. Поэтому если изменить ячейки в книге сейчас, все равно возвращается дата последнего сохранения.
Грубо говоря:
В 20:00 открыли файл, в 20:10 внесли изменения в ячейку, книгу не сохраняли.
Как можно получить это время 20:10?

2. Проверять загрузку процессора. Во время работы надстройки cpu загружает до 30%, по окончанию падает до 1%. Тоже пока сложности с этим.

Возможно, кто-то может подсказать еще какое-то решение?
В идеале хочу реализовать это в рамках именно vbs скрипта, но если поможете подсказать решение хотя бы в vba, то мне будет легче нагуглить как это натянуть на vbs. На крайний случай можно использовать и vba решение.

Всем спасибо
Изменено: Jormen - 26.06.2018 22:11:16
Играть звук пока соблюдается условие
 
Однозначно нет
Решение, которое работало раньше, я нашел через поиск давным давно
А перестало оно работать буквально вчера, потому что сделал изменение, которое помогли сделать тут :)
Я пока что решил для себя проблему тем, что сделал отдельный макрос на кнопку, который играет короткий звук, после которого спам тревоги прекращается.
Ранее тревога прекращалась когда условие больше не соблюдалось.
Играть звук пока соблюдается условие
 
Юрий М,больше конкретики, пожалуйста
Играть звук пока соблюдается условие
 
Нужно при соблюдении условия проигрывать звук, пока условие не прекратит выполнятся.
Важная деталь: изменения на листе происходят через ссылки на соседний лист и обработке этой информации
То есть, если из соседнего листа передалась новая инфа, и условие начало соблюдаться на нашем листе, то нужно, чтобы начала бить тревога.

Ранее работал этот код

Лист:
Код
Private Sub Worksheet_Change(ByVal Target As Range)
    If [g22] <> "" And [g22] > [h22] Then
        tada = True
        Call ZZZ
    Else
        tada = False
    End If
    
End Sub

Модуль:
Код
Public tada As Boolean
Private Declare Function mciExecute Lib "winmm.dll" (ByVal lpstrCommand As String) As Long
Sub ZZZ()
If tada Then
    mciExecute ("Play C:\Windows\Media\tada.wav")
    Application.OnTime Now + 1 / 24 / 60 / 10, "ZZZ"
End If
End Sub

Но после того, как данные перестали парсится на сам Лист, а просто браться из соседнего листа, то все это дело работать перестало
На соседний лист данные поступают этим образом:
http://www.planetaexcel.ru/forum/index.php?PAGE_NAME=message&FID=1&TID=82290&TITLE_SEO=82290-obnovly...

Возможно, это можно решить, переместив код Листа в Книгу, сделав WorkBook_SheetChange, но я не могу найти, как в if добавить ссылку на ячейки на листе, то есть, чтобы было что-то вроде:
Код
If [Лист2!g22] <> "" And [Лист2!g22] > [Лист2!h22] Then

Также пытался это решить путем создания функции, которая играет звук при соблюдении условия. Но ее проблема в том, что она проигрывает звук всего 1 раз. Чтобы играла дальше, нужно менять что-то на листе.

Пытался это решить следующим образом:
Код
Private  Declare Function sndPlaySound Lib "WINMM.DLL" Alias _       "sndPlaySoundA" (ByVal lpszSoundName As String, ByVal uFlags As _       Long) As Long
Const SND_SYNC = &H0
Const SND_ASYNC = &H1
Const SND_NODEFAULT = &H2
Const SND_LOOP = &H8
Const SND_NOSTOP = &H10
Код
Function SoundMe() As String
SoundName$ = "c:\windows\tada.wav"
wFlags% = SND_ASYNC Or SND_LOOP
x% = sndPlaySound(SoundName$,wFlags%)
End Function

Звук играет непрерывно, но проблема в том, что играет и тогда, когда условие уже не выполняется. И как отключить его - не совсем понимаю. Точнее я сделал еще 1 функцию, которая проигрывает звук без параметра snd_loop, но тогда этот звук проигрывается каждый раз, когда что-то меняется вручную на листе.
Обновлять данные из закрытого файла
 
Возникла небольшая проблемка. Раньше на листе был вот такой вот код, который включал тревогу по условиям ячеек.

Код
Private Sub Worksheet_Change(ByVal Target As Range)
    If [g22] <> "" And [g22] > [h22] Then
        tada = True
        Call ZZZ
    Else
        tada = False
    End If
    
End Sub
Ранее  данные парсились на этот же лист, и по-этому, видимо, он работал.   Теперь когда данные берутся просто с соседнего листа, эта тревога не   срабатывает.
Не подскажите как это починить? Попытался перенести код в книгу, заменив worksheet_change на workbook_sheetchange
Но возникают конфликты с importdata и оно останавливается.

Кнопка цитирования не для ответа [МОДЕРАТОР]

Ігор Гончаренко, я же вначале написал - есть отдельный скрипт, который пересоздает экселевский файл с новыми данными.
Закрытый для пользователя, разумеется. Опять же, в первом сообщение я описал, почему это нужно (чтобы не конфликтовать с тем же скриптом, который пересоздает файл)
Обновлять данные из закрытого файла
 
Спасибо, работает идеально!
Обновлять данные из закрытого файла
 
Поиском с самого утра занимаюсь, но найти решение, которые бы я смог вставить и она заработало - все еще не смог :(
По-этому и прошу помощи

Сделайте, пожалуйста, на моем примере взяв условное расположение файлов: D:\

Файл NewExcel скриптом пересоздается, а в файл тест нужно импортировать свежие данные оттуда (4 столбика)
В идеале, чтобы свежие данные поставлялись как только файл NewExcel пересоздастся.
Или можно, чтобы свежие данные брались раз в 15-30 секунд.
Изменено: Jormen - 23.09.2016 14:06:12
Обновлять данные из закрытого файла
 
Есть Файл "NewExcelFile.xls", который отдельным скриптом раз в минуту (или другое время) обновляется (а точнее переписывается)

И есть мой файл "Test.xlsm"

Мне нужно в файле Test брать актуальные данные из файла NewExcelFile.
На крайний случай можно просто в него копировать данные из файла раз в 15-30 секунд.

Сейчас если я ссылаюсь на ячейки из NewExcelFile, то они не обновляются, пока не откроешь NewExcelFile. Постоянно держать его открытым я не могу, в таком случаи скрипт не может пересоздать этот файл.

Подскажите пожалуйста решение проблемы
Подвисание Excel
 
Офис 2016 х32, вин10

Почему-то бывают проблемы с подвисанием экселя при попытке клацнуть в строку формул/вставить данные/изменить тип вставки/протяжки формул и тд. Жду от 5 до 30-60 секунд, пока эксель протупит.

Комп не слабый, ничем не загружен. Возникает и в свежесозданных документах, где данных практически нету

Гуглил, пытался отключать аппаратное ускорение по совету - не помогло.
В 2003 ворде да на 7 винде проблем таких не было, но возвращаться на них не хочу.

Может, есть популярные причины таких проблем и что-то посоветуете?
Выполнеие макроса в конкретной книге
 
Действительно

Сначала подумал, что лист будет искаться в текущей книге.

Спасибо всем за помощь!
Выполнеие макроса в конкретной книге
 
Цитата
Hugo написал:
Set ws = Wb.Worksheets("Рынок")
Спасибо, вопрос решен!
Выполнеие макроса в конкретной книге
 
Добрый день!

Нужно, чтобы макрос всегда делался в конкретной книге эксель (Test 2)
Все работает верно, пока не открываешь какой-то другой эксель документ. В этом случаи я получаю сообщение, что не найден лист "Рынок".
Мне же нужно, чтобы в файле Test 2 макрос выполнялся всегда, даже когда я работаю с другими документами excel.

Добавление строчки Set Wb = Workbooks("Test 2.xlsm") привело лишь к тому, что макрос не работает, если файл называется по-другому, но проблему не решил - при открытии еще любого эксель файла выдает ошибку о том, что не находится нужный лист "Рынок"


Module 1
Скрытый текст
Уведомление об ошибках с внешнего источника данных
 
Оба варианта рабочие, огромное спасибо!

Правда, у меня совершенно не получается их применить в своем рабочем файле. Думал, разберусь в алгоритме и допилю у себя сам, но нет. Стыдно :(

Пытался использовать решение Казанского:
В частности, не понимаю, по какому принципу макрос определяет, какую таблицу обновлять (ибо если я добавляю ещё 1 источник внешних данных, то с ним это не работает, также копирование модулей в мой рабочий файл аналогичный результат для таблицы не дает)
Думал, может QueryTables(1) определяет, но измена значения в скобке результата не принесло..

Огромная просьба прояснить этот момент, либо помочь добавить это решение в мою книгу (в ней уже есть 1 макрос на звуковой сигнал, функциональность которого очень важна, а также в ней с 1 интернет страницы тянется сразу 4 таблицы)

Файл по ссылке на дропбоксе, ибо здесь его не пропускает ограничение в 100кб (вроде удалил все, что не нужно, но все равно вес превышает):

https://www.dropbox.com/s/rks2zyz6qubg2fw/%D0%96%D0%BE%D1%80%D0%BE.xlsm?dl=0
Уведомление об ошибках с внешнего источника данных
 
Обновляет хорошо, спасибо

А вот с ошибками, походу, вопрос так и не решило. Если выдернуть интернет кабель, то вылазит ошибка, и пока не закроешь окошко, то пытаться опять обновлять не будет. Более того, нужно вручную будет опять запустить "Обновлялку"
Уведомление об ошибках с внешнего источника данных
 
Цитата
KL написал: Каким образом тянется таблица? Файл в студию.
Данные -> Получение внешних данных -> Из интернета

Цитата
Казанский написал: Сделайте обновление по таймеру, поищите по сайте Application.OnTime
Это, как я понимаю, нужно чтобы само обновление было прописано в VBA, а не так, как я сделал штатной функцией экселя? Если не сложно, сможете в моем файле показать, как это делать? С учетом того, чтобы была решена моя изначальная проблема.

Файл прикрепил
Уведомление об ошибках с внешнего источника данных
 
Добрый день!

Механизм работы:
Есть внешний источник данных с сайта в интернете. На ресурсе размещена динамически обновляемая таблица, которая тянется в эксель. Обновление в экселе ежеминутное (поставил бы чаще, но возможности такой в экселе не нашел).

Проблема:
Иногда сайт, с которого тянется таблица - лежит.
Иногда на сайте нету инфы в этой таблице.

В обеих этих случаях я получаю уведомление от экселя, что либо сайт лежит, либо что данных нету. И пока я не нажму "ок" - эксель не будет обновлять данные. А это большая проблема, потому что данные нужно собирать постоянно.

Что хочу:
Чтобы не выскакивало уведомление об ошибках получения данных - я о них знаю. Я хочу, чтобы эксель продолжал каждую минуту пытаться тянуть инфу с сайта.

На данный момент я просто юзаю сторонний софт, который тыкает по этой кнопке "ок" - но хотелось бы избавиться от этого костыля.

Я много дней мучал поиск, но похожей проблемы нигде не нашел, по-этому надеюсь на вашу помощь.
Заранее спасибо!
Страницы: 1
Наверх