Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/копирование диапазона ячеек с ссылками DDE в файл по таймеру - Мир MS Excel

  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_, DrMini  
копирование диапазона ячеек с ссылками DDE в файл по таймеру
Andy Дата: Пятница, 20.04.2012, 16:15 | Сообщение № 1
Группа: Пользователи
Ранг: Прохожий
Сообщений: 5
Репутация: 0 ±
Замечаний: 0% ±

Здраствуйте, помогите пожалуйста!!!
Есть диапазон ячеек B2:C11, принимающих данные от OPC/DDE сервера по ссылкам opcserver|node!ItemX (где X - номер переменной).
Надо сохранять этот диапазон в другом файле (только значения), по событию(таймер) - каждые 20сек.
В связи сэтим два вопроса:
1. Возможно ли макрос запускать по таймеру?
Написал часть кода макроса:

[vba]
Code
Workbooks.Open Filename:="D:\meteo\GazAnalizS2.xls"
Windows("GazAnalizS.xls").Activate
Range("B2:С <img src="http://s5.ucoz.net/sm/1/sad.gif" border="0" align="absmiddle" alt="sad" /> 11").Select
Selection.Copy
Windows("GazAnalizS2.xls").Activate
Application.CutCopyMode = False
ActiveSheet.Paste
ActiveWorkbook.Save
ActiveWindow.Close
End Sub
[/vba]
На строке ActiveSheet.Paste останавливается.
В чем причина не знаю, я видимо плохо знаю excel. sad
Всем откликнувшимся буду признателен.
 
Ответить
СообщениеЗдраствуйте, помогите пожалуйста!!!
Есть диапазон ячеек B2:C11, принимающих данные от OPC/DDE сервера по ссылкам opcserver|node!ItemX (где X - номер переменной).
Надо сохранять этот диапазон в другом файле (только значения), по событию(таймер) - каждые 20сек.
В связи сэтим два вопроса:
1. Возможно ли макрос запускать по таймеру?
Написал часть кода макроса:

[vba]
Code
Workbooks.Open Filename:="D:\meteo\GazAnalizS2.xls"
Windows("GazAnalizS.xls").Activate
Range("B2:С <img src="http://s5.ucoz.net/sm/1/sad.gif" border="0" align="absmiddle" alt="sad" /> 11").Select
Selection.Copy
Windows("GazAnalizS2.xls").Activate
Application.CutCopyMode = False
ActiveSheet.Paste
ActiveWorkbook.Save
ActiveWindow.Close
End Sub
[/vba]
На строке ActiveSheet.Paste останавливается.
В чем причина не знаю, я видимо плохо знаю excel. sad
Всем откликнувшимся буду признателен.

Автор - Andy
Дата добавления - 20.04.2012 в 16:15
Serge_007 Дата: Пятница, 20.04.2012, 16:35 | Сообщение № 2
Группа: Админы
Ранг: Местный житель
Сообщений: 16475
Репутация: 2749 ±
Замечаний: ±

Excel 2016
Quote (Andy)
Возможно ли макрос запускать по таймеру?

[vba]
Code
Application.OnTime Now + TimeValue("00:00:20"), "Название макроса"
[/vba]

ЗЫ Если оформлять код тегами кода, то смайлов в нём не будет.
Можно так же снять галку "Включить смайлы" в опциях сообщения.


ЮMoney:41001419691823 | WMR:126292472390
 
Ответить
Сообщение
Quote (Andy)
Возможно ли макрос запускать по таймеру?

[vba]
Code
Application.OnTime Now + TimeValue("00:00:20"), "Название макроса"
[/vba]

ЗЫ Если оформлять код тегами кода, то смайлов в нём не будет.
Можно так же снять галку "Включить смайлы" в опциях сообщения.

Автор - Serge_007
Дата добавления - 20.04.2012 в 16:35
Jhonson Дата: Пятница, 20.04.2012, 16:53 | Сообщение № 3
Группа: Друзья
Ранг: Ветеран
Сообщений: 514
Репутация: 169 ±
Замечаний: 0% ±

Немного не понял вопроса, возможно нужно как-то так:
[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
[/vba]
Макрос не проверял

Автор - Jhonson
Дата добавления - 20.04.2012 в 16:53
Формуляр Дата: Пятница, 20.04.2012, 17:08 | Сообщение № 4
Группа: Друзья
Ранг: Ветеран
Сообщений: 832
Репутация: 255 ±
Замечаний: 0% ±

Excel 2003, 2013
Quote (Andy)
На строке ActiveSheet.Paste останавливается. В чем причина не знаю, я видимо плохо знаю excel.

Quote (Andy)
Application.CutCopyMode = False
- чистит буфер копирования (думаю, перед paste это ни к чему smile


Excel 2003 EN, 2013 EN

Сообщение отредактировал Формуляр - Пятница, 20.04.2012, 17:09
 
Ответить
Сообщение
Quote (Andy)
На строке ActiveSheet.Paste останавливается. В чем причина не знаю, я видимо плохо знаю excel.

Quote (Andy)
Application.CutCopyMode = False
- чистит буфер копирования (думаю, перед paste это ни к чему smile

Автор - Формуляр
Дата добавления - 20.04.2012 в 17:08
_Boroda_ Дата: Пятница, 20.04.2012, 22:33 | Сообщение № 5
Группа: Админы
Ранг: Местный житель
Сообщений: 16895
Репутация: 6612 ±
Замечаний: ±

2003; 2007; 2010; 2013 RUS
Quote (Формуляр)
Цитата, Andy писал(а):
Application.CutCopyMode = False
- чистит буфер копирования (думаю, перед paste это ни к чему

Абсолютно согласен, а вот после вставки можно поставить.
Итог:
Application.CutCopyMode = False
ActiveSheet.Paste
поменяйте местами эти строки


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
Сообщение
Quote (Формуляр)
Цитата, Andy писал(а):
Application.CutCopyMode = False
- чистит буфер копирования (думаю, перед paste это ни к чему

Абсолютно согласен, а вот после вставки можно поставить.
Итог:
Application.CutCopyMode = False
ActiveSheet.Paste
поменяйте местами эти строки

Автор - _Boroda_
Дата добавления - 20.04.2012 в 22:33
Andy Дата: Суббота, 21.04.2012, 18:52 | Сообщение № 6
Группа: Пользователи
Ранг: Прохожий
Сообщений: 5
Репутация: 0 ±
Замечаний: 0% ±

Спасибо всем, макрос заработал в таком виде:

[vba]
Код
Sub sd3()
'
' sd3 Макрос
' Макрос записан 21.04.2012
'

'
Workbooks.Open Filename:="D:\meteo\GazAnalizS2.xls"
Windows("GazAnalizS.xls").Activate
Range("B2:C11").Select
Selection.Copy
Windows("GazAnalizS2.xls").Activate
' ActiveSheet.Paste
Range("B2:C11").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False
ActiveWorkbook.Save
ActiveWindow.Close

End Sub
[/vba]

Но это второй вопрос, а первый я не совсем точно сформулировал.
Попробую еще раз:
Существует файл GazAnalizS.xls с диапазоном ссылок DDE, он должен быть активным.
Другое приложение не может получить к нему доступ по ODBC, поэтому мне надо сохранять значения диапазона
в другом файле GazAnalizS2.xlsс периодом 10сек.
Т.е. насколько я понимаю надо из файла GazAnalizS.xls каждую 10-ю секунду запускать этот макрос
Я понял, что вообще никак в Excel, не могу запустит в цикл написанный с помощью Вас макрос,
помогите пожалуйста, спасибо всем и очень надеюсь на пояснения от Serge007
 
Ответить
СообщениеСпасибо всем, макрос заработал в таком виде:

[vba]
Код
Sub sd3()
'
' sd3 Макрос
' Макрос записан 21.04.2012
'

'
Workbooks.Open Filename:="D:\meteo\GazAnalizS2.xls"
Windows("GazAnalizS.xls").Activate
Range("B2:C11").Select
Selection.Copy
Windows("GazAnalizS2.xls").Activate
' ActiveSheet.Paste
Range("B2:C11").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False
ActiveWorkbook.Save
ActiveWindow.Close

End Sub
[/vba]

Но это второй вопрос, а первый я не совсем точно сформулировал.
Попробую еще раз:
Существует файл GazAnalizS.xls с диапазоном ссылок DDE, он должен быть активным.
Другое приложение не может получить к нему доступ по ODBC, поэтому мне надо сохранять значения диапазона
в другом файле GazAnalizS2.xlsс периодом 10сек.
Т.е. насколько я понимаю надо из файла GazAnalizS.xls каждую 10-ю секунду запускать этот макрос
Я понял, что вообще никак в Excel, не могу запустит в цикл написанный с помощью Вас макрос,
помогите пожалуйста, спасибо всем и очень надеюсь на пояснения от Serge007

Автор - Andy
Дата добавления - 21.04.2012 в 18:52
Serge_007 Дата: Воскресенье, 22.04.2012, 17:12 | Сообщение № 7
Группа: Админы
Ранг: Местный житель
Сообщений: 16475
Репутация: 2749 ±
Замечаний: ±

Excel 2016
Quote (Andy)
надо из файла GazAnalizS.xls каждую 10-ю секунду запускать этот макрос
Я понял, что вообще никак в Excel, не могу запустит в цикл написанный с помощью Вас макрос,
помогите пожалуйста, надеюсь на пояснения от Serge007
Я же Вам уже ответил как это сделать.

[vba]
Code
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]


ЮMoney:41001419691823 | WMR:126292472390
 
Ответить
Сообщение
Quote (Andy)
надо из файла GazAnalizS.xls каждую 10-ю секунду запускать этот макрос
Я понял, что вообще никак в Excel, не могу запустит в цикл написанный с помощью Вас макрос,
помогите пожалуйста, надеюсь на пояснения от Serge007
Я же Вам уже ответил как это сделать.

[vba]
Code
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]

Автор - Serge_007
Дата добавления - 22.04.2012 в 17:12
Andy Дата: Вторник, 24.04.2012, 11:15 | Сообщение № 8
Группа: Пользователи
Ранг: Прохожий
Сообщений: 5
Репутация: 0 ±
Замечаний: 0% ±

Благодарю Serge_007!
Спасибо Формуляр, Boroda за пояснения!
Все заработало!
Для корректной работы макроса, я хотел бы разобраться с тем как контроллировать в excel состояние перезаписываемого файла (открыт/закрыт), в моем случае "GazAnalizS2.xls" , т.к. в случае если к файлу обращается другое приложение, макрос при попытке открыть и перезаписать файл в этот момент, выдает ошибку и останавливается (в моем случае это мало вероятно, но все же).
Наверно это достойно отдельной темы, но я не хочу открывать ее с пустыми руками и прошу рекомендаций, вообще-то задача стандартная, подскажите источники.
 
Ответить
СообщениеБлагодарю Serge_007!
Спасибо Формуляр, Boroda за пояснения!
Все заработало!
Для корректной работы макроса, я хотел бы разобраться с тем как контроллировать в excel состояние перезаписываемого файла (открыт/закрыт), в моем случае "GazAnalizS2.xls" , т.к. в случае если к файлу обращается другое приложение, макрос при попытке открыть и перезаписать файл в этот момент, выдает ошибку и останавливается (в моем случае это мало вероятно, но все же).
Наверно это достойно отдельной темы, но я не хочу открывать ее с пустыми руками и прошу рекомендаций, вообще-то задача стандартная, подскажите источники.

Автор - Andy
Дата добавления - 24.04.2012 в 11:15
Andy Дата: Вторник, 24.04.2012, 11:46 | Сообщение № 9
Группа: Пользователи
Ранг: Прохожий
Сообщений: 5
Репутация: 0 ±
Замечаний: 0% ±

Здраствуйте!
Забыл привести текст ошибки при останове макроса.
Вот он:
Run-time error '1004'
Метод PasteSpecial из класса Range завершен не верно
 
Ответить
СообщениеЗдраствуйте!
Забыл привести текст ошибки при останове макроса.
Вот он:
Run-time error '1004'
Метод PasteSpecial из класса Range завершен не верно

Автор - Andy
Дата добавления - 24.04.2012 в 11:46
Hugo Дата: Вторник, 24.04.2012, 11:49 | Сообщение № 10
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3854
Репутация: 814 ±
Замечаний: 0% ±

365
Попробуйте по такой схеме (в 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]


webmoney: E265281470651 Z422237915069
USDT TRC20: TN8XeEF17o5KPBD9pNwYzNyruycuAc2mVD
 
Ответить
СообщениеПопробуйте по такой схеме (в 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]

Автор - Hugo
Дата добавления - 24.04.2012 в 11:49
RAN Дата: Вторник, 24.04.2012, 12:02 | Сообщение № 11
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
Боюсь, Ваша хотелка за пределами Эксель.
Копировать каждые 10 сек - можно, скопировать и сохранить открытую книгу - вероятно, а вот открыть, скопировать, сохранить, закрыть...
Да еще чтобы стороннее приложение успело отработать...


Быть или не быть, вот в чем загвоздка!
 
Ответить
СообщениеБоюсь, Ваша хотелка за пределами Эксель.
Копировать каждые 10 сек - можно, скопировать и сохранить открытую книгу - вероятно, а вот открыть, скопировать, сохранить, закрыть...
Да еще чтобы стороннее приложение успело отработать...

Автор - RAN
Дата добавления - 24.04.2012 в 12:02
Andy Дата: Вторник, 24.04.2012, 12:55 | Сообщение № 12
Группа: Пользователи
Ранг: Прохожий
Сообщений: 5
Репутация: 0 ±
Замечаний: 0% ±

Спасибо Hugo, проверю!
RAN, тестовый файл маленький 25К, цикл открытие-запись-закрытие не > 1 сек. реальный в 3 раза больше, но цикл примерно такой же. Цикл обращения стороннего приложения (SQL server), так же около 1 сек.
 
Ответить
СообщениеСпасибо Hugo, проверю!
RAN, тестовый файл маленький 25К, цикл открытие-запись-закрытие не > 1 сек. реальный в 3 раза больше, но цикл примерно такой же. Цикл обращения стороннего приложения (SQL server), так же около 1 сек.

Автор - Andy
Дата добавления - 24.04.2012 в 12:55
RRR Дата: Четверг, 16.01.2020, 10:58 | Сообщение № 13
Группа: Пользователи
Ранг: Прохожий
Сообщений: 3
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016
А возможно выводить через DDE, новые строки в ранее созданную таблицу вывода DDE?
 
Ответить
СообщениеА возможно выводить через DDE, новые строки в ранее созданную таблицу вывода DDE?

Автор - RRR
Дата добавления - 16.01.2020 в 10:58
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2025 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!