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

Вход

Регистрация

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

 

= Мир MS Excel/Распределение по столбцам значений принимаемых по RS232 - Мир MS Excel

Старая форма входа
  • Страница 1 из 2
  • 1
  • 2
  • »
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Распределение по столбцам значений принимаемых по RS232 (Макросы/Sub)
Распределение по столбцам значений принимаемых по RS232
kkol Дата: Пятница, 16.01.2015, 13:19 | Сообщение № 1
Группа: Пользователи
Ранг: Новичок
Сообщений: 17
Репутация: 0 ±
Замечаний: 20% ±

Excel 2010
Доброго всем дня.
Я создаю электронное устройство на микропроцессоре которое передает в EXCEL 18 битные данные по RS232 to USB адаптеру.
По этой причине начал изучать VBA но знаний катастрофически не хватает и застрял на банальном вопросе...

Я добился пока того что устойчиво принимаю и вывожу в столбец данные по одному каналу.
Суть вопроса в том что каналов у меня 4 и я застрял на том что не могу каналы записывать в разные столбцы.

Вот как у меня это выглядит:

[vba]
Код
Case EVT_DATA
For i = 0 To 9
Next i

'выводим в столбец А четыре принятых байта.
'первые три байта - А1,А2,А3 - числовое значение какого либо канала
'четвертый байт А4 - идентификатор канала

cell_idx = cell_idx + 1 'увеличиваем число строки
Cells(cell_idx, 1) = data
If cell_idx = 4 Then
cell_idx = 0
z = Cells(3, 1) * 256 * 256 + Cells(2, 1) * 256 + Cells(1, 1) ' склеиваем первые три байта для восстановления 18 битного принятого значения
For y = 0 To 9
Next y
cell_idy = cell_idy + 1 'увеличиваем число строки
Cells(cell_idy, 3).Value = ((z * 0.015625) / 1000) * 35.162 ' заполняем столбец С принятыми данными из канала 1
End If

Структура передаваемых данных такая:
Сначала идут три байта данных. Четвертый байт - идентификатор канала:

12 241 0 96 [пауза 200мс] 25 126 0 97 [пауза 200мс] 251 211 0 98 [пауза 200мс]
85 67 0 99 [пауза 200мс] 62 36 1 96 [пауза 200мс] 156 127 1 97 [пауза 200мс]
251 211 0 98 [пауза 200мс] и т.д.

Я подумал что можно добавить переменную cell_y (например) и ей присваивать значение в зависимости от
четвертого бита. Но у меня выдает ошибку при таком варианте:

cell_idx = cell_idx + 1 'увеличиваем число строки
Cells(cell_idx, 1) = data
If cell_idx = 4 Then
cell_idx = 0
If Cells(4, 1).Value = 96 Then
cell_y = 2
End If

If Cells(4, 1).Value = 97 Then
cell_y = 3
End If

If Cells(4, 1).Value = 98 Then
cell_y = 4
End If

If Cells(4, 1).Value = 99 Then
cell_y = 5
End If

z = Cells(3, 1) * 256 * 256 + Cells(2, 1) * 256 + Cells(1, 1) ' склеиваем первые три байта для восстановления 18 битного принятого значения
For y = 0 To 9
Next y
cell_idy = cell_idy + 1 'увеличиваем число строки
Cells(cell_idy, cell_y).Value = ((z * 0.015625) / 1000) * 35.162 ' заполняем столбец С принятыми данными из канала 1
End If
[/vba]

Естественно я понимаю что что то неправильно делаю.
Прошу помочь решить проблему....

[moder]Добрый день, оформляйте коды тегами
кнопка #[/moder]


kkol#list.ru

Сообщение отредактировал kkol - Пятница, 16.01.2015, 14:09
 
Ответить
СообщениеДоброго всем дня.
Я создаю электронное устройство на микропроцессоре которое передает в EXCEL 18 битные данные по RS232 to USB адаптеру.
По этой причине начал изучать VBA но знаний катастрофически не хватает и застрял на банальном вопросе...

Я добился пока того что устойчиво принимаю и вывожу в столбец данные по одному каналу.
Суть вопроса в том что каналов у меня 4 и я застрял на том что не могу каналы записывать в разные столбцы.

Вот как у меня это выглядит:

[vba]
Код
Case EVT_DATA
For i = 0 To 9
Next i

'выводим в столбец А четыре принятых байта.
'первые три байта - А1,А2,А3 - числовое значение какого либо канала
'четвертый байт А4 - идентификатор канала

cell_idx = cell_idx + 1 'увеличиваем число строки
Cells(cell_idx, 1) = data
If cell_idx = 4 Then
cell_idx = 0
z = Cells(3, 1) * 256 * 256 + Cells(2, 1) * 256 + Cells(1, 1) ' склеиваем первые три байта для восстановления 18 битного принятого значения
For y = 0 To 9
Next y
cell_idy = cell_idy + 1 'увеличиваем число строки
Cells(cell_idy, 3).Value = ((z * 0.015625) / 1000) * 35.162 ' заполняем столбец С принятыми данными из канала 1
End If

Структура передаваемых данных такая:
Сначала идут три байта данных. Четвертый байт - идентификатор канала:

12 241 0 96 [пауза 200мс] 25 126 0 97 [пауза 200мс] 251 211 0 98 [пауза 200мс]
85 67 0 99 [пауза 200мс] 62 36 1 96 [пауза 200мс] 156 127 1 97 [пауза 200мс]
251 211 0 98 [пауза 200мс] и т.д.

Я подумал что можно добавить переменную cell_y (например) и ей присваивать значение в зависимости от
четвертого бита. Но у меня выдает ошибку при таком варианте:

cell_idx = cell_idx + 1 'увеличиваем число строки
Cells(cell_idx, 1) = data
If cell_idx = 4 Then
cell_idx = 0
If Cells(4, 1).Value = 96 Then
cell_y = 2
End If

If Cells(4, 1).Value = 97 Then
cell_y = 3
End If

If Cells(4, 1).Value = 98 Then
cell_y = 4
End If

If Cells(4, 1).Value = 99 Then
cell_y = 5
End If

z = Cells(3, 1) * 256 * 256 + Cells(2, 1) * 256 + Cells(1, 1) ' склеиваем первые три байта для восстановления 18 битного принятого значения
For y = 0 To 9
Next y
cell_idy = cell_idy + 1 'увеличиваем число строки
Cells(cell_idy, cell_y).Value = ((z * 0.015625) / 1000) * 35.162 ' заполняем столбец С принятыми данными из канала 1
End If
[/vba]

Естественно я понимаю что что то неправильно делаю.
Прошу помочь решить проблему....

[moder]Добрый день, оформляйте коды тегами
кнопка #[/moder]

Автор - kkol
Дата добавления - 16.01.2015 в 13:19
Hugo Дата: Пятница, 16.01.2015, 13:35 | Сообщение № 2
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3255
Репутация: 707 ±
Замечаний: 0% ±

2019
Думаю достаточно
[vba]
Код
cell_y = Cells(4, 1) - 94
[/vba]
а
[vba]
Код
For i = 0 To 9
Next i
[/vba]
исключительно для паузы? И сколько это будет?

Остальное не понял - нужен какой-то пример в файле.


excel@nxt.ru
webmoney: E265281470651 Z422237915069


Сообщение отредактировал Hugo - Пятница, 16.01.2015, 13:36
 
Ответить
СообщениеДумаю достаточно
[vba]
Код
cell_y = Cells(4, 1) - 94
[/vba]
а
[vba]
Код
For i = 0 To 9
Next i
[/vba]
исключительно для паузы? И сколько это будет?

Остальное не понял - нужен какой-то пример в файле.

Автор - Hugo
Дата добавления - 16.01.2015 в 13:35
kkol Дата: Пятница, 16.01.2015, 13:59 | Сообщение № 3
Группа: Пользователи
Ранг: Новичок
Сообщений: 17
Репутация: 0 ±
Замечаний: 20% ±

Excel 2010
Ой, ответили.... Ура!!! Спасибо огромное!

[vba]
Код
For i = 0 To 9
Next i
[/vba]
Только не смейтесь пожалуйста - я не знаю для чего это....! Просто это ихз примера какогото осталось.

[vba]
Код
cell_y = Cells(4, 1) - 94
[/vba]
А здесь присваивание переменной cell_y значения из ячейки А4?
А что такое - 94?

И ещё я забыл спросить, вот такое написание правильное?
[vba]
Код
Cells(cell_idy,cell_y).Value =............
[/vba]
У меня почему то выдает ошибку когда я в скобках пишу две переменные как указатели адреса ячейки.

И ещё раз прошу не смеятся над моим файлом. Прилагаю.
В этом файле есть кнопки которыми я передаю в устройство значения на ЦАП и АЦП.
Файл полностью экспериментальный. Прошу прощения что нет упорядоченного представления.
Для связи с RS232 я использую модуль StrokeReader.

Добавил чуть позже: У меня почему то неразрешено открывать личные сообщения...
К сообщению приложен файл: 10_01_2015_4.xlsm (97.1 Kb)


kkol#list.ru

Сообщение отредактировал kkol - Пятница, 16.01.2015, 14:12
 
Ответить
СообщениеОй, ответили.... Ура!!! Спасибо огромное!

[vba]
Код
For i = 0 To 9
Next i
[/vba]
Только не смейтесь пожалуйста - я не знаю для чего это....! Просто это ихз примера какогото осталось.

[vba]
Код
cell_y = Cells(4, 1) - 94
[/vba]
А здесь присваивание переменной cell_y значения из ячейки А4?
А что такое - 94?

И ещё я забыл спросить, вот такое написание правильное?
[vba]
Код
Cells(cell_idy,cell_y).Value =............
[/vba]
У меня почему то выдает ошибку когда я в скобках пишу две переменные как указатели адреса ячейки.

И ещё раз прошу не смеятся над моим файлом. Прилагаю.
В этом файле есть кнопки которыми я передаю в устройство значения на ЦАП и АЦП.
Файл полностью экспериментальный. Прошу прощения что нет упорядоченного представления.
Для связи с RS232 я использую модуль StrokeReader.

Добавил чуть позже: У меня почему то неразрешено открывать личные сообщения...

Автор - kkol
Дата добавления - 16.01.2015 в 13:59
Hugo Дата: Пятница, 16.01.2015, 14:18 | Сообщение № 4
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3255
Репутация: 707 ±
Замечаний: 0% ±

2019
1.Этот цикл конечно создаёт некую паузу... Но думаю измерить эту долю милимикросекунды будет затруднительно.
2.Присваивание переменной cell_y значения из ячейки А4-94, т.е. если в A4 только значения 96/97/98/99, то в результате получите что хотели одним действием, а не кучей.
3. Написание правильное? - да. Но нужно видеть что в переменных.

Файл смотреть сейчас некогда - обед на носу :)


excel@nxt.ru
webmoney: E265281470651 Z422237915069
 
Ответить
Сообщение1.Этот цикл конечно создаёт некую паузу... Но думаю измерить эту долю милимикросекунды будет затруднительно.
2.Присваивание переменной cell_y значения из ячейки А4-94, т.е. если в A4 только значения 96/97/98/99, то в результате получите что хотели одним действием, а не кучей.
3. Написание правильное? - да. Но нужно видеть что в переменных.

Файл смотреть сейчас некогда - обед на носу :)

Автор - Hugo
Дата добавления - 16.01.2015 в 14:18
kkol Дата: Пятница, 16.01.2015, 21:03 | Сообщение № 5
Группа: Пользователи
Ранг: Новичок
Сообщений: 17
Репутация: 0 ±
Замечаний: 20% ±

Excel 2010
Доброго вечера всем.
Так и не работает....
Не знаю почему но вот эта строка подсвечивается желым...
[vba]
Код

Private Sub StrokeReader1_CommEvent(ByVal Evt As StrokeReaderLib.Event, ByVal data As Variant) 'ByVal data As
Dim s As String
Dim z As Long

Select Case Evt

       Case EVT_DISCONNECT
           MsgBox "USB-àäàïòåð îòñîåäèíåí îò ÏÊ" 'Åñëè USB-àäàïòåð îòñîåäèíåí îò ÏÊ

       Case EVT_CONNECT  'Óâåäîìëåíèå ïðè ñîåäèíåíèè ñ àïïàðàòíûì ïîðòîì èëè ïðè ïåðåñîåäèíåíèè ñ
           MsgBox "USB-àäàïòåð ïîäñîåäèíåí ê ÏÊ" ' USB-àäàïòåðîì RS232 èëè RS485, òîëüêî ÷òî ïîäêëþ÷åííûì ê øèíå

Case EVT_DATA
          
       cell_idx = cell_idx + 1    
       Cells(cell_idx, 1) = data ' вот эта строка подсвечивается желтым
          
    cell_y = Cells(4, 1).Value - 95
    Range("a11") = cell_y    

If cell_idx = 4 Then
       cell_idx = 0
End If

       z = Cells(3, 1) * 256 * 256 + Cells(2, 1) * 256 + Cells(1, 1)    

       cell_idy = cell_idy + 1    
       Cells(cell_idy, cell_y).Value = ((z * 0.015625) / 1000) * 35.162     

End Select

End Sub
[/vba]

Как только начинается прием данных выскакивает ошибка....


kkol#list.ru

Сообщение отредактировал kkol - Пятница, 16.01.2015, 21:04
 
Ответить
СообщениеДоброго вечера всем.
Так и не работает....
Не знаю почему но вот эта строка подсвечивается желым...
[vba]
Код

Private Sub StrokeReader1_CommEvent(ByVal Evt As StrokeReaderLib.Event, ByVal data As Variant) 'ByVal data As
Dim s As String
Dim z As Long

Select Case Evt

       Case EVT_DISCONNECT
           MsgBox "USB-àäàïòåð îòñîåäèíåí îò ÏÊ" 'Åñëè USB-àäàïòåð îòñîåäèíåí îò ÏÊ

       Case EVT_CONNECT  'Óâåäîìëåíèå ïðè ñîåäèíåíèè ñ àïïàðàòíûì ïîðòîì èëè ïðè ïåðåñîåäèíåíèè ñ
           MsgBox "USB-àäàïòåð ïîäñîåäèíåí ê ÏÊ" ' USB-àäàïòåðîì RS232 èëè RS485, òîëüêî ÷òî ïîäêëþ÷åííûì ê øèíå

Case EVT_DATA
          
       cell_idx = cell_idx + 1    
       Cells(cell_idx, 1) = data ' вот эта строка подсвечивается желтым
          
    cell_y = Cells(4, 1).Value - 95
    Range("a11") = cell_y    

If cell_idx = 4 Then
       cell_idx = 0
End If

       z = Cells(3, 1) * 256 * 256 + Cells(2, 1) * 256 + Cells(1, 1)    

       cell_idy = cell_idy + 1    
       Cells(cell_idy, cell_y).Value = ((z * 0.015625) / 1000) * 35.162     

End Select

End Sub
[/vba]

Как только начинается прием данных выскакивает ошибка....

Автор - kkol
Дата добавления - 16.01.2015 в 21:03
alex77755 Дата: Пятница, 16.01.2015, 21:32 | Сообщение № 6
Группа: Проверенные
Ранг: Обитатель
Сообщений: 362
Репутация: 64 ±
Замечаний: 0% ±

А что в data?
Перед строкой с ошибкай попробуй распечатать:
[vba]
Код
debug.print  data
[/vba]


Могу помочь в VB6, VBA
Alex77755@mail.ru
 
Ответить
СообщениеА что в data?
Перед строкой с ошибкай попробуй распечатать:
[vba]
Код
debug.print  data
[/vba]

Автор - alex77755
Дата добавления - 16.01.2015 в 21:32
kkol Дата: Пятница, 16.01.2015, 22:26 | Сообщение № 7
Группа: Пользователи
Ранг: Новичок
Сообщений: 17
Репутация: 0 ±
Замечаний: 20% ±

Excel 2010
Перед строкой с ошибкай попробуй распечатать:

Alex, спасибо!
Если бы я знал что такое распечатать перед строкой.... Где и что я увижу?
Не хочу сильно грузить вас своими проблемами.... Я прекрасно понимаю что это уровень песочницы.

Это наверно будет вот так?
[vba]
Код
debug.print  data Cells(cell_idx, 1) = data
[/vba]



kkol#list.ru
 
Ответить
Сообщение
Перед строкой с ошибкай попробуй распечатать:

Alex, спасибо!
Если бы я знал что такое распечатать перед строкой.... Где и что я увижу?
Не хочу сильно грузить вас своими проблемами.... Я прекрасно понимаю что это уровень песочницы.

Это наверно будет вот так?
[vba]
Код
debug.print  data Cells(cell_idx, 1) = data
[/vba]


Автор - kkol
Дата добавления - 16.01.2015 в 22:26
alex77755 Дата: Пятница, 16.01.2015, 22:39 | Сообщение № 8
Группа: Проверенные
Ранг: Обитатель
Сообщений: 362
Репутация: 64 ±
Замечаний: 0% ±

Я же сказал: перед строкой с ошибкой просто добавить строку
[vba]
Код
debug.print  data
Cells(cell_idx, 1) = data
[/vba]
Скорей всего она тоже подсветится желтым.
Значит надо смотреть в локальных данных что там в переменной


Могу помочь в VB6, VBA
Alex77755@mail.ru
 
Ответить
СообщениеЯ же сказал: перед строкой с ошибкой просто добавить строку
[vba]
Код
debug.print  data
Cells(cell_idx, 1) = data
[/vba]
Скорей всего она тоже подсветится желтым.
Значит надо смотреть в локальных данных что там в переменной

Автор - alex77755
Дата добавления - 16.01.2015 в 22:39
alex77755 Дата: Пятница, 16.01.2015, 22:44 | Сообщение № 9
Группа: Проверенные
Ранг: Обитатель
Сообщений: 362
Репутация: 64 ±
Замечаний: 0% ±

Какую ошибку выдаёт? 13?


Могу помочь в VB6, VBA
Alex77755@mail.ru
 
Ответить
СообщениеКакую ошибку выдаёт? 13?

Автор - alex77755
Дата добавления - 16.01.2015 в 22:44
kkol Дата: Суббота, 17.01.2015, 20:05 | Сообщение № 10
Группа: Пользователи
Ранг: Новичок
Сообщений: 17
Репутация: 0 ±
Замечаний: 20% ±

Excel 2010
Какую ошибку выдаёт? 13?


Добрый вечер Алекс,
Да именно такую ошибку.
В принципе я нашел почему не работает - но вот причина не ясна. Я писал что использую модуль StrokeReader для управления RS232.
Там есть выбор типа принимаемых данных -
BINARY = 0,
TEXT = 1
BINARYJS = 2
Я ставлю BINARY = 0 и тут то возникает ошибка.
Если же я ставлю BINARYJS = 2 то все работает корректно.

Странно, но я же передаю последовательно 4 байта...
[vba]
Код

Вот описание опций:
Если DataMode = BINARY, пользовательское приложение будет получать массив байтов (COM/OLE: SAFEARRAY of BYTE).

Режим BINARYJS предназначен для совместимости с Javascript при передаче массивов двоичных данных (COM/OLE: SAFEARRAY of VARIANT of BYTE). Переданные данные могут быть преобразованы в массив с помощью класса VBArray.
[/vba]
.


kkol#list.ru
 
Ответить
Сообщение
Какую ошибку выдаёт? 13?


Добрый вечер Алекс,
Да именно такую ошибку.
В принципе я нашел почему не работает - но вот причина не ясна. Я писал что использую модуль StrokeReader для управления RS232.
Там есть выбор типа принимаемых данных -
BINARY = 0,
TEXT = 1
BINARYJS = 2
Я ставлю BINARY = 0 и тут то возникает ошибка.
Если же я ставлю BINARYJS = 2 то все работает корректно.

Странно, но я же передаю последовательно 4 байта...
[vba]
Код

Вот описание опций:
Если DataMode = BINARY, пользовательское приложение будет получать массив байтов (COM/OLE: SAFEARRAY of BYTE).

Режим BINARYJS предназначен для совместимости с Javascript при передаче массивов двоичных данных (COM/OLE: SAFEARRAY of VARIANT of BYTE). Переданные данные могут быть преобразованы в массив с помощью класса VBArray.
[/vba]
.

Автор - kkol
Дата добавления - 17.01.2015 в 20:05
Hugo Дата: Воскресенье, 18.01.2015, 00:41 | Сообщение № 11
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3255
Репутация: 707 ±
Замечаний: 0% ±

2019
Если data - одномерный массив, то попробуйте так:
[vba]
Код
    Cells(cell_idx, 1).Resize(, UBound(data) + 1) = data
[/vba]
Выгрузит массив в строку.


excel@nxt.ru
webmoney: E265281470651 Z422237915069
 
Ответить
СообщениеЕсли data - одномерный массив, то попробуйте так:
[vba]
Код
    Cells(cell_idx, 1).Resize(, UBound(data) + 1) = data
[/vba]
Выгрузит массив в строку.

Автор - Hugo
Дата добавления - 18.01.2015 в 00:41
kkol Дата: Воскресенье, 18.01.2015, 13:13 | Сообщение № 12
Группа: Пользователи
Ранг: Новичок
Сообщений: 17
Репутация: 0 ±
Замечаний: 20% ±

Excel 2010
Если data - одномерный массив, то попробуйте так:

Я в шоке!!!
Мистр Hugo, спасибо огромное!!!!!
То что вы сделали одной строкой, я даже представить не мог! Сейчас я получаю сразу 4 байта одним массивом, а ваше выражение распределяет это по четырем ячейкам!!!

Вот как это выглядит:
[vba]
Код
106    251    0    98
231    254    0    98
100    2    1    98
227    5    1    98
97    9    1    98
223    12    1    98
92    16    1    98
[/vba]

Теперь буду думать как объединить и вывести в нужный столбец результат.
Ещё раз Огромное всем спасибо за помощь!!!!


kkol#list.ru
 
Ответить
Сообщение
Если data - одномерный массив, то попробуйте так:

Я в шоке!!!
Мистр Hugo, спасибо огромное!!!!!
То что вы сделали одной строкой, я даже представить не мог! Сейчас я получаю сразу 4 байта одним массивом, а ваше выражение распределяет это по четырем ячейкам!!!

Вот как это выглядит:
[vba]
Код
106    251    0    98
231    254    0    98
100    2    1    98
227    5    1    98
97    9    1    98
223    12    1    98
92    16    1    98
[/vba]

Теперь буду думать как объединить и вывести в нужный столбец результат.
Ещё раз Огромное всем спасибо за помощь!!!!

Автор - kkol
Дата добавления - 18.01.2015 в 13:13
Hugo Дата: Воскресенье, 18.01.2015, 14:27 | Сообщение № 13
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3255
Репутация: 707 ±
Замечаний: 0% ±

2019
Вам нужно было в окне Locals посмотреть что содержит переменная data - и затем подумать как выгрузить этот массив в строку. Можно и циклом по массиву и ячейкам - но с resize быстрее.


excel@nxt.ru
webmoney: E265281470651 Z422237915069
 
Ответить
СообщениеВам нужно было в окне Locals посмотреть что содержит переменная data - и затем подумать как выгрузить этот массив в строку. Можно и циклом по массиву и ячейкам - но с resize быстрее.

Автор - Hugo
Дата добавления - 18.01.2015 в 14:27
kkol Дата: Понедельник, 16.03.2015, 20:40 | Сообщение № 14
Группа: Пользователи
Ранг: Новичок
Сообщений: 17
Репутация: 0 ±
Замечаний: 20% ±

Excel 2010
Добрый вечер народ.
Очередной ступор случился....

Все получалось ровно до того момента пока не сделал автоматическую передачу данных в EXCEL.
То есть когда из EXCEL я посылаю комбинацию переменных, устройство начинает в ответ передавать каждые 500 миллисекунд данные.
Первые три 8 байта данные и четвертым идентификатор посылки.

Не знаю что случилось, но EXCEL сразу выдает ошибку "basic runtime error 1004". До этого, все принималось нормально, когда была одноразовая передача. Теперь какоето шаманство. Ведь вроде все осталось как прежде, но вот не хочет ни в какую. Я уже в мистику начинаю верить...
Помогите пожалуйста понять в чем проблема.
Прилагаю файл который использую в экспериментах...

При выборе ДЕБАГ - указывает на строку в которой ошибка:
[vba]
Код
Cells(cell_str, cell_y).Value = z
[/vba]
К сообщению приложен файл: 04_11_03_2015_1.xlsm (99.6 Kb)


kkol#list.ru
 
Ответить
СообщениеДобрый вечер народ.
Очередной ступор случился....

Все получалось ровно до того момента пока не сделал автоматическую передачу данных в EXCEL.
То есть когда из EXCEL я посылаю комбинацию переменных, устройство начинает в ответ передавать каждые 500 миллисекунд данные.
Первые три 8 байта данные и четвертым идентификатор посылки.

Не знаю что случилось, но EXCEL сразу выдает ошибку "basic runtime error 1004". До этого, все принималось нормально, когда была одноразовая передача. Теперь какоето шаманство. Ведь вроде все осталось как прежде, но вот не хочет ни в какую. Я уже в мистику начинаю верить...
Помогите пожалуйста понять в чем проблема.
Прилагаю файл который использую в экспериментах...

При выборе ДЕБАГ - указывает на строку в которой ошибка:
[vba]
Код
Cells(cell_str, cell_y).Value = z
[/vba]

Автор - kkol
Дата добавления - 16.03.2015 в 20:40
kkol Дата: Вторник, 17.03.2015, 19:49 | Сообщение № 15
Группа: Пользователи
Ранг: Новичок
Сообщений: 17
Репутация: 0 ±
Замечаний: 20% ±

Excel 2010
Привет народ.
Потихоньку разобрался что конкретно не работает.
Вот этот кусок не работает:
[vba]
Код
     cell_idy = cell_idy + 1
       If cell_idy = 5 Then
       cell_idy = 0
       cell_str = cell_str + 1
       End If
Cells(cell_str, cell_y).Value = z
[/vba]
Это счетчик для строк. Когда пять переменных записано - номер строки увеличивается.

Подскажите пожалуйста, как этот счетчик реализовать?


kkol#list.ru

Сообщение отредактировал kkol - Вторник, 17.03.2015, 19:50
 
Ответить
СообщениеПривет народ.
Потихоньку разобрался что конкретно не работает.
Вот этот кусок не работает:
[vba]
Код
     cell_idy = cell_idy + 1
       If cell_idy = 5 Then
       cell_idy = 0
       cell_str = cell_str + 1
       End If
Cells(cell_str, cell_y).Value = z
[/vba]
Это счетчик для строк. Когда пять переменных записано - номер строки увеличивается.

Подскажите пожалуйста, как этот счетчик реализовать?

Автор - kkol
Дата добавления - 17.03.2015 в 19:49
nilem Дата: Среда, 18.03.2015, 09:27 | Сообщение № 16
Группа: Авторы
Ранг: Старожил
Сообщений: 1613
Репутация: 563 ±
Замечаний: 0% ±

Excel 2013, 2016
в этой строке
[vba]
Код
Cells(cell_str, cell_y).Value = z
[/vba]
возможно, вместо cell_y нужно cell_idy
попробуйте изменить


Яндекс.Деньги 4100159601573
 
Ответить
Сообщениев этой строке
[vba]
Код
Cells(cell_str, cell_y).Value = z
[/vba]
возможно, вместо cell_y нужно cell_idy
попробуйте изменить

Автор - nilem
Дата добавления - 18.03.2015 в 09:27
Hugo Дата: Среда, 18.03.2015, 10:25 | Сообщение № 17
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3255
Репутация: 707 ±
Замечаний: 0% ±

2019
cell_str, cell_y чему равны в момент ошибки?


excel@nxt.ru
webmoney: E265281470651 Z422237915069
 
Ответить
Сообщениеcell_str, cell_y чему равны в момент ошибки?

Автор - Hugo
Дата добавления - 18.03.2015 в 10:25
kkol Дата: Среда, 18.03.2015, 10:45 | Сообщение № 18
Группа: Пользователи
Ранг: Новичок
Сообщений: 17
Репутация: 0 ±
Замечаний: 20% ±

Excel 2010
Спасибо огромное за ответ. Попробую после работы вечером поменять.

Вчера поздно вечером, я заметил такую вещь - если написать вот так:
[vba]
Код
     ' cell_idy = cell_idy + 1
      ' If cell_idy = 5 Then
      ' cell_idy = 0
     cell_str = cell_str + 1
     '  End If
Cells(cell_str, cell_y).Value = z
[/vba]
То есть если счетчик строк каждый раз изменяется, то все работает.
Правда при этом данные пишутся наискосок. Но это и понятно.

Если же счетчик строк меняется по условию - то тут то и возникает ошибка 1004.
В интернете я поискал что это такое - я так понял что это несоответствие типа данных.
И я сейчас ломаю голову - как их привести в соответствие.
Может их как то хитро объявлять надо?


kkol#list.ru
 
Ответить
СообщениеСпасибо огромное за ответ. Попробую после работы вечером поменять.

Вчера поздно вечером, я заметил такую вещь - если написать вот так:
[vba]
Код
     ' cell_idy = cell_idy + 1
      ' If cell_idy = 5 Then
      ' cell_idy = 0
     cell_str = cell_str + 1
     '  End If
Cells(cell_str, cell_y).Value = z
[/vba]
То есть если счетчик строк каждый раз изменяется, то все работает.
Правда при этом данные пишутся наискосок. Но это и понятно.

Если же счетчик строк меняется по условию - то тут то и возникает ошибка 1004.
В интернете я поискал что это такое - я так понял что это несоответствие типа данных.
И я сейчас ломаю голову - как их привести в соответствие.
Может их как то хитро объявлять надо?

Автор - kkol
Дата добавления - 18.03.2015 в 10:45
kkol Дата: Среда, 18.03.2015, 10:53 | Сообщение № 19
Группа: Пользователи
Ранг: Новичок
Сообщений: 17
Репутация: 0 ±
Замечаний: 20% ±

Excel 2010
cell_str, cell_y чему равны в момент ошибки?


Здравствуйте Hugo.
В момент ошибки я не смог посмотреть - не получается. Может просто не знаю как смотреть?
Но если я делаю тупо заменив переменную строки на цифру:
[vba]
Код
Cells(2, cell_y).Value = z
[/vba]
То обе переменные изменяются корректно. То есть номер строки увеличивается на единицу, а счетчик от 0 до 5 отрабатывает цикл то же корректно.


kkol#list.ru
 
Ответить
Сообщение
cell_str, cell_y чему равны в момент ошибки?


Здравствуйте Hugo.
В момент ошибки я не смог посмотреть - не получается. Может просто не знаю как смотреть?
Но если я делаю тупо заменив переменную строки на цифру:
[vba]
Код
Cells(2, cell_y).Value = z
[/vba]
То обе переменные изменяются корректно. То есть номер строки увеличивается на единицу, а счетчик от 0 до 5 отрабатывает цикл то же корректно.

Автор - kkol
Дата добавления - 18.03.2015 в 10:53
nilem Дата: Среда, 18.03.2015, 10:55 | Сообщение № 20
Группа: Авторы
Ранг: Старожил
Сообщений: 1613
Репутация: 563 ±
Замечаний: 0% ±

Excel 2013, 2016
может, проще будет в ТимВьювере посмотреть? Есть такая возможность?


Яндекс.Деньги 4100159601573
 
Ответить
Сообщениеможет, проще будет в ТимВьювере посмотреть? Есть такая возможность?

Автор - nilem
Дата добавления - 18.03.2015 в 10:55
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Распределение по столбцам значений принимаемых по RS232 (Макросы/Sub)
  • Страница 1 из 2
  • 1
  • 2
  • »
Поиск:

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