powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Накапливание данных
32 сообщений из 32, показаны все 2 страниц
Накапливание данных
    #36681914
Алекс82
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Из сторонней программы в Excel передаются числовые значения с интервалом 5 сек. в ячейку A1 т.е значение в ячейке каждый раз обновляется.
Помогите написать макрос, чтобы Excel заносил каждое новое число в ячейку ниже (происходило бы накапливание данных - каждое новое число заносилось в свою ячейку тем самым заполнялся столбец).

Спасибо!
...
Рейтинг: 0 / 0
Накапливание данных
    #36681934
sergeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Можно попробовать такой вариант.
К сожалению не записал автора рекомендаций, но, неизвестный, респект тебе:)
----------
отлавливание внешнего изменения ячейки

1. Откройте Excel
2. Кликните правой клавишей мыши по свободному пространству на линии меню Excel
3. Удостоверьтесь, что линия Control Toolbox отмечена птичкой
4. На панели Control Toolbox кликните по иконочке с молоточком и гаечным ключом
5. Найдите в появившемся списке RefEdit.ctrl
6. Кликните по этому имени
7. Положите его курсором на лист Excela (проведите по листу курсором с нажатой клавишей мыши)
8. Кликните правой клавишей по положенному на лист контролю
9. Найдите в меню линию Properties
10. Кликните по ней
11. Найдите в списке свойств свойство LinkedCell
12. Напечатайте во второй колоночке A1
13. Закройте панель свойств, кликнув на крестик в правом верхнем углу панели.
14. На панели Control Toolbox кликните по иконочке с угольником, линейкой и карандашом
15. Нажмите Alt-F11
16. В кодовом окне для того листа, на который вы посадили RefEdit, откройте левый верхний комбобокс
17. Выберете RefEdit1
18. В кодовом окне для того листа, на который вы посадили RefEdit, откройте правый верхний комбобокс
18. Выберете Change
19. Внутри процедуры события RefEdit1_Change напишите:

Range("B1").Value = Range("A1").Value

20. Вернитесь в лист Excel
21. При необходимости, на панели Control Toolbox кликните по иконочке с угольником, линейкой и карандашом еще раз, чтобы выйти из режима дизайна, если вы еще в нем.
22. Напечатайте что-нибудь в клеточку A1
23. Наблюдайте за содержимым B1
---------
...
Рейтинг: 0 / 0
Накапливание данных
    #36683005
Алекс82
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sergeyvg, спасибо большое! очень доходчиво написано.
но обновление идет только в одной ячейке, а как сделать чтобы каждое новое значение записывалось в новую ячейку т.е. чтобы формировался столбец из значений.
...
Рейтинг: 0 / 0
Накапливание данных
    #36683160
Hugo121
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Алекс82,

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Cells.Count >  1  Then Exit Sub
Dim iLastRow As Long
Application.EnableEvents = False
If Target = [a1] Then
iLastRow = Cells(Rows.Count,  1 ).End(xlUp).Row +  1 
[a1].Copy Cells(iLastRow,  1 )
End If
Application.EnableEvents = True
End Sub
...
Рейтинг: 0 / 0
Накапливание данных
    #36683189
Hugo121
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ну и это перерабатываем так:

Код: plaintext
1.
2.
3.
4.
5.
Private Sub RefEdit1_Change()
Dim iLastRow As Long
iLastRow = Cells(Rows.Count,  1 ).End(xlUp).Row +  1 
[a1].Copy Cells(iLastRow,  1 )
End Sub
...
Рейтинг: 0 / 0
Накапливание данных
    #36683220
Hugo121
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ну и пример наконец :)
...
Рейтинг: 0 / 0
Накапливание данных
    #36683262
Алекс82
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hugo121, ну просто супер!
Всё отлично работает.

Спасибо Вам большое за помощь!
...
Рейтинг: 0 / 0
Накапливание данных
    #36683300
Алекс82
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в ручном режиме работает отлично, но с OPCtoDDE при получении нового значения обновляются все ячейки и в них появляются одни и те же числа.
...
Рейтинг: 0 / 0
Накапливание данных
    #36683345
Hugo121
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Алекс82, не верю :)
А так?:
Код: plaintext
1.
2.
3.
Private Sub RefEdit1_Change()
Cells(Cells(Rows.Count,  1 ).End(xlUp).Row +  1 ,  1 ) = CDbl(RefEdit1)
End Sub
...
Рейтинг: 0 / 0
Накапливание данных
    #36683399
Алекс82
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hugo121,
попробывал: http://imagepost.ru/?v=150/Clipboard01.gif
Модератор:
Рекламные ссылки будут удаляться.
...
Рейтинг: 0 / 0
Накапливание данных
    #36683416
Hugo121
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Алекс82, а какой лист в этот момент активен? Если другой, код надо чуть подправить.
...
Рейтинг: 0 / 0
Накапливание данных
    #36683432
Hugo121
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Может чуть перегнул, но для надёжности:

Код: plaintext
1.
2.
3.
Private Sub RefEdit1_Change()
ThisWorkbook.Sheets( 1 ).Cells(ThisWorkbook.Sheets( 1 ).Cells(ThisWorkbook.Sheets( 1 ).Rows.Count,  1 ).End(xlUp).Row +  1 ,  1 ) = CDbl(ThisWorkbook.Sheets( 1 ).RefEdit1)
End Sub
...
Рейтинг: 0 / 0
Накапливание данных
    #36683442
Алекс82
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hugo121, активен лист Sheet1

модератору: рекламные ссылки у меня уже прописаны в сообщении, я их не вставлял.
Каждый раз приходится удалять в предыдущем сообщении забыл удалить.
...
Рейтинг: 0 / 0
Накапливание данных
    #36683444
Hugo121
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Алекс82,
а это вирус...!!!
...
Рейтинг: 0 / 0
Накапливание данных
    #36683450
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hugo121Алекс82,
а это вирус...!!!
+1
...
Рейтинг: 0 / 0
Накапливание данных
    #36683452
Алекс82
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hugo121Может чуть перегнул, но для надёжности:

Код: plaintext
1.
2.
3.
Private Sub RefEdit1_Change()
ThisWorkbook.Sheets( 1 ).Cells(ThisWorkbook.Sheets( 1 ).Cells(ThisWorkbook.Sheets( 1 ).Rows.Count,  1 ).End(xlUp).Row +  1 ,  1 ) = CDbl(ThisWorkbook.Sheets( 1 ).RefEdit1)
End Sub


не, та же ошибка появляется.
...
Рейтинг: 0 / 0
Накапливание данных
    #36683459
Hugo121
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Алекс82,
я бы у Вас файл попросил, но теперь уж лучше сперва полечитесь ... :)
...
Рейтинг: 0 / 0
Накапливание данных
    #36683475
Алекс82
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hugo121Алекс82,
я бы у Вас файл попросил, но теперь уж лучше сперва полечитесь ... :)

ясно...nod32 всё же...
пока я проверяю систему может подскажите другой путь (не используя стороннюю программу OPCtoDDE тем более платную) для извлечения данных с opc-сервера.
...
Рейтинг: 0 / 0
Накапливание данных
    #36683486
Hugo121
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Алекс82, Я пас насчёт замены. Так может после лечения и это заработает.
...
Рейтинг: 0 / 0
Накапливание данных
    #36683536
Алекс82
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hugo121,

похоже проблема в том что у меня в ячейке A1 стоит формула которая связывает OPC-сервер
=OPCtoDDE|OPCDataStore.TOPCElemerServer.2!'COM1.ИРТ 5920(30)[1].Канал 1'

и при остановке сервера получается картина, т.е. копируются постоянно не числа, а эта формула поэтому во всех ячейках одни данные. может как то преобразовывать в числа.
...
Рейтинг: 0 / 0
Накапливание данных
    #36683543
Алекс82
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
извините, опять проглядел ссылки

к предыдущему сообщению, такая картина получается при остановке OPC-сервера http://imagepost.ru/?v=150/pBlUvnAE7r_Clipboard01.gif
...
Рейтинг: 0 / 0
Накапливание данных
    #36683563
Hugo121
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Алекс82,
я думал, у вас значение ячейке присваивается макросом.
В этом случае, может завести глобальную переменную, и отслеживать её изменение, и писать в столбец только изменённые данные, если конечно так можно по задаче, т.е. если повторов быть не должно.
...
Рейтинг: 0 / 0
Накапливание данных
    #36683644
Алекс82
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hugo121,
помогите пожалуйста добавить вторую ячейку B1 в макрос (те же функции как и у A1), чтобы можно было бы снимать данные со второго прибора в одном листе Excel.
...
Рейтинг: 0 / 0
Накапливание данных
    #36683814
Hugo121
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Алекс82, так заработало? А то зачем аналогично делать вторую ячейку, если эта не работает?
...
Рейтинг: 0 / 0
Накапливание данных
    #36683907
Hugo121
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сделал, раз нет ответа :)
Добавил ещё один RefEdit и код к нему. В принципе, всё аналогично, только 1 заменил на 2.
И ещё добавил фильтр на цифровые значения, т.е. на текст реагировать не будет, так что может этой поправки и хватит.
...
Рейтинг: 0 / 0
Накапливание данных
    #36684086
Алекс82
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
да заработало, с файлом Refedit_Change_Hidden.xls обновление заработало нормально.
с файлом Refedit_Change_Hidden2.xls обновление нет т.е. не работает функции для A1 и B1. может исключить фильтр ?
...
Рейтинг: 0 / 0
Накапливание данных
    #36684092
Алекс82
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
попытался изменить код в Refedit_Change_Hidden.xls (создал предварительно второй RefEdit.Ctrl назвал RefEdit2 указал ссылку на ячейку B1)
вот что получилось:
Option Explicit

Private Sub RefEdit1_Change()
Dim iLastRow As Long
iLastRow = Cells(Rows.Count, 1).End(xlUp).Row + 1
[a1].Copy Cells(iLastRow, 1)
End Sub

Private Sub RefEdit2_Change()
Dim iLastRow As Long
iLastRow = Cells(Rows.Count, 1).End(xlUp).Row + 1
[B1].Copy Cells(iLastRow, 1)
End Sub


но похоже что то не так сделал, не работает макрос.
...
Рейтинг: 0 / 0
Накапливание данных
    #36684106
Алекс82
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
интуитивно изменил макрос, на
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
Option Explicit

Private Sub RefEdit1_Change()
Dim iLastRow As Long
iLastRow = Cells(Rows.Count,  1 ).End(xlUp).Row +  1 
[a1].Copy Cells(iLastRow,  1 )
End Sub


'Private Sub Worksheet_Change(ByVal Target As Range)
'If Target.Cells.Count > 1 Then Exit Sub
'Dim iLastRow As Long
'Application.EnableEvents = False
'If Target = [a1] Then
'iLastRow = Cells(Rows.Count, 1).End(xlUp).Row + 1
'[a1].Copy Cells(iLastRow, 1)
'End If
'Application.EnableEvents = True
'End Sub
'

Sub tt()
[a1] =  10 
End Sub

Private Sub RefEdit2_Change()
Dim iLastRow As Long
iLastRow = Cells(Rows.Count,  2 ).End(xlUp).Row +  1 
[b1].Copy Cells(iLastRow,  2 )
End Sub


'Private Sub Worksheet_Change(ByVal Target As Range)
'If Target.Cells.Count > 1 Then Exit Sub
'Dim iLastRow As Long
'Application.EnableEvents = False
'If Target = [b1] Then
'iLastRow = Cells(Rows.Count, 2).End(xlUp).Row + 1
'[b1].Copy Cells(iLastRow, 2)
'End If
'Application.EnableEvents = True
'End Sub
'

Sub tt1()
[b1] =  10 
End Sub

вроде обновляется в двух ячейках. только не пойму что означает [a1] = 10?
...
Рейтинг: 0 / 0
Накапливание данных
    #36684389
Hugo121
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Алекс82,
привет! В выходной работаем? :)

Sub tt() - это я тестил, как будет работать, если кодом данные заносить, так что это для работы лишнее.
iLastRow = Cells(Rows.Count, 1).End(xlUp).Row + 1 - это по первому столбцу определяем последнюю ячейку, соотв. сменив на 2 - проверим по втрому.
Фильтр можешь отключить, удалив строку
If IsNumeric(ThisWorkbook.Sheets(1).RefEditN) Then _
Так там не цифры заносятся в ячейки?
...
Рейтинг: 0 / 0
Накапливание данных
    #36684745
Алекс82
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hugo121, пришлось сменить программу которая передаёт данные с OPC сервера в ячейки Excel - и всё заработало!

Насчёт фильтра удалил, но опять ошибка 13.
Ладно, не буду отвлекать Вас, тем более, что вроде пока работает с переправленным первоначальным макросом.

Ещё раз огромное спасибо!

Чтобы написать этот код мне бы месяц понадобился...
...
Рейтинг: 0 / 0
Накапливание данных
    #36684813
Hugo121
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Алекс82,
ну и хорошо.
По поводу втрого кода - мне он больше нравится.
Там может дело в CDbl (ThisWorkbook.Sheets(1).RefEdit2) - если у Вас данные текстовые, или цифры, но десятичный разделитель не совпадает с разделителем Экселя, то CDbl не сработает.
Наладить несложно - просто CDbl убираем, и получаем в ячеках текст из RefEdit.
...
Рейтинг: 0 / 0
Накапливание данных
    #36880527
Алекс82
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пришлось снова возвратиться к этой теме.
Столкнулся с тем что если вводишь одно и тоже число подряд обновления не происходит добавление значения в ячейку.
Подскажите пожалуйста как поправить код.
...
Рейтинг: 0 / 0
32 сообщений из 32, показаны все 2 страниц
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Накапливание данных
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]