Здраствуйте, помогите пожалуйста!!! Есть диапазон ячеек B2:C11, принимающих данные от OPC/DDE сервера по ссылкам opcserver|node!ItemX (где X - номер переменной). Надо сохранять этот диапазон в другом файле (только значения), по событию(таймер) - каждые 20сек. В связи сэтим два вопроса: 1. Возможно ли макрос запускать по таймеру? Написал часть кода макроса:
[/vba] На строке ActiveSheet.Paste останавливается. В чем причина не знаю, я видимо плохо знаю excel. Всем откликнувшимся буду признателен.
Здраствуйте, помогите пожалуйста!!! Есть диапазон ячеек B2:C11, принимающих данные от OPC/DDE сервера по ссылкам opcserver|node!ItemX (где X - номер переменной). Надо сохранять этот диапазон в другом файле (только значения), по событию(таймер) - каждые 20сек. В связи сэтим два вопроса: 1. Возможно ли макрос запускать по таймеру? Написал часть кода макроса:
Немного не понял вопроса, возможно нужно как-то так: [vba]
Code
Sub a() Workbooks.Open Filename:="D:\meteo\GazAnalizS2.xls" Workbooks("GazAnalizS.xls").Sheets(1).Range("B2:С11").Value = _ Workbooks("GazAnalizS2.xls").Sheets(1).Range("B2:С11").Value Workbooks("GazAnalizS2.xls").Close End Sub
[/vba] Макрос не проверял
Немного не понял вопроса, возможно нужно как-то так: [vba]
Code
Sub a() Workbooks.Open Filename:="D:\meteo\GazAnalizS2.xls" Workbooks("GazAnalizS.xls").Sheets(1).Range("B2:С11").Value = _ Workbooks("GazAnalizS2.xls").Sheets(1).Range("B2:С11").Value Workbooks("GazAnalizS2.xls").Close End Sub
Но это второй вопрос, а первый я не совсем точно сформулировал. Попробую еще раз: Существует файл GazAnalizS.xls с диапазоном ссылок DDE, он должен быть активным. Другое приложение не может получить к нему доступ по ODBC, поэтому мне надо сохранять значения диапазона в другом файле GazAnalizS2.xlsс периодом 10сек. Т.е. насколько я понимаю надо из файла GazAnalizS.xls каждую 10-ю секунду запускать этот макрос Я понял, что вообще никак в Excel, не могу запустит в цикл написанный с помощью Вас макрос, помогите пожалуйста, спасибо всем и очень надеюсь на пояснения от Serge007
Спасибо всем, макрос заработал в таком виде:
[vba]
Код
Sub sd3() ' ' sd3 Макрос ' Макрос записан 21.04.2012 '
Но это второй вопрос, а первый я не совсем точно сформулировал. Попробую еще раз: Существует файл GazAnalizS.xls с диапазоном ссылок DDE, он должен быть активным. Другое приложение не может получить к нему доступ по ODBC, поэтому мне надо сохранять значения диапазона в другом файле GazAnalizS2.xlsс периодом 10сек. Т.е. насколько я понимаю надо из файла GazAnalizS.xls каждую 10-ю секунду запускать этот макрос Я понял, что вообще никак в Excel, не могу запустит в цикл написанный с помощью Вас макрос, помогите пожалуйста, спасибо всем и очень надеюсь на пояснения от Serge007Andy
надо из файла GazAnalizS.xls каждую 10-ю секунду запускать этот макрос Я понял, что вообще никак в Excel, не могу запустит в цикл написанный с помощью Вас макрос, помогите пожалуйста, надеюсь на пояснения от Serge007
Sub Andy() Application.ScreenUpdating = False 'отключаем перерисовку экрана для скорости Windows("GazAnalizS.xls").Activate ' делаем активной книгу GazAnalizS.xls Range("B2:c11").Copy ' копируем диапазон B2:c11 Workbooks.Open Filename:= "D:\meteo\GazAnalizS2.xls" 'Открываем файл GazAnalizS2 Range("B2:c11").Select ' выделяем диапазон вставки Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False ' вставляем из буфера скопированное Application.CutCopyMode = False ' очищаем буфер обмена ActiveWorkbook.Save ' сохраняем текущую книгу ActiveWindow.Close' закрываем активное окно Application.ScreenUpdating = True' включаем перерисовку экрана Application.OnTime Now + TimeValue("00:00:10"), "Andy" 'запускаем макрос каждые 10 секунд End Sub
[/vba]
Quote (Andy)
надо из файла GazAnalizS.xls каждую 10-ю секунду запускать этот макрос Я понял, что вообще никак в Excel, не могу запустит в цикл написанный с помощью Вас макрос, помогите пожалуйста, надеюсь на пояснения от Serge007
Благодарю Serge_007! Спасибо Формуляр, Boroda за пояснения! Все заработало! Для корректной работы макроса, я хотел бы разобраться с тем как контроллировать в excel состояние перезаписываемого файла (открыт/закрыт), в моем случае "GazAnalizS2.xls" , т.к. в случае если к файлу обращается другое приложение, макрос при попытке открыть и перезаписать файл в этот момент, выдает ошибку и останавливается (в моем случае это мало вероятно, но все же). Наверно это достойно отдельной темы, но я не хочу открывать ее с пустыми руками и прошу рекомендаций, вообще-то задача стандартная, подскажите источники.
Благодарю Serge_007! Спасибо Формуляр, Boroda за пояснения! Все заработало! Для корректной работы макроса, я хотел бы разобраться с тем как контроллировать в excel состояние перезаписываемого файла (открыт/закрыт), в моем случае "GazAnalizS2.xls" , т.к. в случае если к файлу обращается другое приложение, макрос при попытке открыть и перезаписать файл в этот момент, выдает ошибку и останавливается (в моем случае это мало вероятно, но все же). Наверно это достойно отдельной темы, но я не хочу открывать ее с пустыми руками и прошу рекомендаций, вообще-то задача стандартная, подскажите источники.Andy
Попробуйте по такой схеме (в A1 записан путь к проверяемому файлу):
[vba]
Code
Sub Test() MsgBox IsOpen([A1]) End Sub
Function IsOpen(File$) As Boolean Dim FN% FN = FreeFile On Error Resume Next Open File For Random Access Read Write Lock Read Write As #FN Close #FN IsOpen = Err End Function
[/vba]
Попробуйте по такой схеме (в A1 записан путь к проверяемому файлу):
[vba]
Code
Sub Test() MsgBox IsOpen([A1]) End Sub
Function IsOpen(File$) As Boolean Dim FN% FN = FreeFile On Error Resume Next Open File For Random Access Read Write Lock Read Write As #FN Close #FN IsOpen = Err End Function
Боюсь, Ваша хотелка за пределами Эксель. Копировать каждые 10 сек - можно, скопировать и сохранить открытую книгу - вероятно, а вот открыть, скопировать, сохранить, закрыть... Да еще чтобы стороннее приложение успело отработать...
Боюсь, Ваша хотелка за пределами Эксель. Копировать каждые 10 сек - можно, скопировать и сохранить открытую книгу - вероятно, а вот открыть, скопировать, сохранить, закрыть... Да еще чтобы стороннее приложение успело отработать...RAN
Спасибо Hugo, проверю! RAN, тестовый файл маленький 25К, цикл открытие-запись-закрытие не > 1 сек. реальный в 3 раза больше, но цикл примерно такой же. Цикл обращения стороннего приложения (SQL server), так же около 1 сек.
Спасибо Hugo, проверю! RAN, тестовый файл маленький 25К, цикл открытие-запись-закрытие не > 1 сек. реальный в 3 раза больше, но цикл примерно такой же. Цикл обращения стороннего приложения (SQL server), так же около 1 сек.Andy