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

Страницы: 1
Время изменения не сохраненного (!) файла, открыл файл - через 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, но тогда этот звук проигрывается каждый раз, когда что-то меняется вручную на листе.
Обновлять данные из закрытого файла
 
Есть Файл "NewExcelFile.xls", который отдельным скриптом раз в минуту (или другое время) обновляется (а точнее переписывается)

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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