| Предыдущая тема :: Следующая тема |
| Автор |
Сообщение |
dany Новичок


Зарегистрирован: Oct 11, 2011 Сообщения: 6 Рейтинг: +0/-0
|
Добавлено: Чт 05 Июл, 2012 10:06:00 Заголовок сообщения: VBA присвоить определеное количество тегов |
|
|
ситуация следующая изначально считываю значения из Exscel в Array K(p) (значений 300)затем прсваиваю эти значения из K(p) тегам при этом хочу присвоить ровHо столько солько захочет оператор (всегда от 0 и до...max. 300) проблема именно в том что я присваиваю значения всем,а как сказать например если 3 то только от 0 до двух остольное не делай
gTagDb.GetTag("Various_from_HMI\HMI_Coilpar_Indiv0coil_number") = K(0)
gTagDb.GetTag("Various_from_HMI\HMI_Coilpar_Indiv1coil_number") = K(1)
gTagDb.GetTag("Various_from_HMI\HMI_Coilpar_Indiv2coil_number") = K(2)gTagDb.GetTag("Various_from_HMI\HMI_Coilpar_Indiv3coil_number") = K(3)
gTagDb.GetTag("Various_from_HMI\HMI_Coilpar_Indiv4coil_number") = K(4)
gTagDb.GetTag("Various_from_HMI\HMI_Coilpar_Indiv5coil_number") = K(5)
gTagDb.GetTag("Various_from_HMI\HMI_Coilpar_Indiv6coil_number") = K(6)
gTagDb.GetTag("Various_from_HMI\HMI_Coilpar_Indiv7coil_number") = K(7)
gTagDb.GetTag("Various_from_HMI\HMI_Coilpar_Indiv8coil_number") = K(
gTagDb.GetTag("Various_from_HMI\HMI_Coilpar_Indiv9coil_number") = K(9)
gTagDb.GetTag("Various_from_HMI\HMI_Coilpar_Indiv10coil_number") = K(10) |
|
| Вернуться к началу |
|
 |
Eraser Эксперт


Зарегистрирован: Oct 05, 2005 Сообщения: 106 Рейтинг: +8/-0 Откуда: Харьков
|
Добавлено: Пн 09 Июл, 2012 6:36:51 Заголовок сообщения: |
|
|
| что мешает в сначала посчитать считанные значения из excel, а затем в цикле, от 0 до "количество элементов в массиве из excel", присваивать нужное количество? |
|
| Вернуться к началу |
|
 |
dany Новичок


Зарегистрирован: Oct 11, 2011 Сообщения: 6 Рейтинг: +0/-0
|
Добавлено: Пн 09 Июл, 2012 7:34:00 Заголовок сообщения: |
|
|
большое спасибо за ответ, я скоре всего не до конца описал проблему. из Excell считываю толко то что нужно т.е от 0 до 2 .
For lokK = 0 To Val
K(lokK) = mySheet.Cells(lokK + 23, K).Value
проблема в коммуникации, ведь в контроллер будут записаны все теги от 0 до 10. т.е от 0 до 2 со значениями а потом все с 0, но они будут записаны, пока это 10 тегов нет проблем а кода 1000.продлится вся передача минуты 3. поэтому и хочу в контроллер предать только теги со значениями. |
|
| Вернуться к началу |
|
 |
oldDad Site Admin


Зарегистрирован: May 05, 2005 Сообщения: 2773 Рейтинг: +89/-5
|
Добавлено: Пн 09 Июл, 2012 8:32:03 Заголовок сообщения: |
|
|
А кто мешает написать програму так, чтобы записывать в контроллер только то количество тэгов, которое необходимо? _________________ Обращайтесь к профессионалам. |
|
| Вернуться к началу |
|
 |
dany Новичок


Зарегистрирован: Oct 11, 2011 Сообщения: 6 Рейтинг: +0/-0
|
Добавлено: Пн 09 Июл, 2012 17:57:43 Заголовок сообщения: |
|
|
| в принципе не хватает знаний Visual Basic опробовал все что знал (непошло потому что глобальные теги невозможно обрабатывать как Array) и решил обратится за помощью к вам > специалистам< может кто знает простое и элнгантное решени проблемKи |
|
| Вернуться к началу |
|
 |
Eraser Эксперт


Зарегистрирован: Oct 05, 2005 Сообщения: 106 Рейтинг: +8/-0 Откуда: Харьков
|
Добавлено: Вт 10 Июл, 2012 7:39:02 Заголовок сообщения: |
|
|
может я опять не так понял задачу, но что мешает при считывании из excel считать только те тэги, что имеют отличные от 0 значения?
P.S. очень сумбурное описание задачи, мало что понятно |
|
| Вернуться к началу |
|
 |
dany Новичок


Зарегистрирован: Oct 11, 2011 Сообщения: 6 Рейтинг: +0/-0
|
Добавлено: Вт 10 Июл, 2012 8:26:40 Заголовок сообщения: |
|
|
я и считываю только те клетки в таблице которые со значениями, проблема дальше в присвоении этих значений глобалным тегм
gTagDb.GetTag("Various_from_HMI\HMI_Coilpar_Indiv0coil_number") = K(0) это выражение прописывает тег как в RS VIEW так и в контроллере.
задача чтоб в контроллер были прописаны например:
в первом случае 2 первых тега из возможных 10
во втором 4 первых тега из возможных 10
а в третьем все 10 из 10
вот код проги, может тоже внесет какую то ясность
| Код: | Sub read_2()
Dim myExcel As Excel.Application
Dim myWorkbook As Excel.Workbook
Dim mySheet As Excel.Worksheet
Dim L As Integer
Dim VL(0 To 300) As Variant
L = 12
Dim Z
Z = gTagDb.GetTag("Various_from_HMI\HMI_Coilpar_Common_disc_count") - 1
On Error GoTo exit_handler
Set myExcel = New Excel.Application
Set myWorkbook = myExcel.Workbooks.Open("E:\TEST.xls")
Set mySheet = myWorkbook.Sheets("Tab")
For lokL = 0 To Z
VL(lokL) = mySheet.Cells(lokL + 23, L).Value
Next lokL
gTagDb.GetTag("Various_from_HMI\HMI_Coilpar_Indiv0inverted") = VL(0)
gTagDb.GetTag("Various_from_HMI\HMI_Coilpar_Indiv1inverted") = VL(1)
gTagDb.GetTag("Various_from_HMI\HMI_Coilpar_Indiv2inverted") = VL(2)
gTagDb.GetTag("Various_from_HMI\HMI_Coilpar_Indiv3inverted") = VL(3)
gTagDb.GetTag("Various_from_HMI\HMI_Coilpar_Indiv4inverted") = VL(4)
gTagDb.GetTag("Various_from_HMI\HMI_Coilpar_Indiv5inverted") = VL(5)
gTagDb.GetTag("Various_from_HMI\HMI_Coilpar_Indiv6inverted") = VL(6)
gTagDb.GetTag("Various_from_HMI\HMI_Coilpar_Indiv7inverted") = VL(7)
gTagDb.GetTag("Various_from_HMI\HMI_Coilpar_Indiv8inverted") = VL(8)
gTagDb.GetTag("Various_from_HMI\HMI_Coilpar_Indiv9inverted") = VL(9)
exit_handler:
On Error Resume Next:
myWorkbook.Close
myExcel.Quit
Set mySheet = Nothing
Set myWorkbook = Nothing
Set myExcel = Nothing
End Sub
|
|
|
| Вернуться к началу |
|
 |
SpellBinder Частый гость


Зарегистрирован: Dec 10, 2006 Сообщения: 20 Рейтинг: +0/-1
|
Добавлено: Вт 10 Июл, 2012 12:41:55 Заголовок сообщения: |
|
|
| dany писал(а): | | проблема в коммуникации, ведь в контроллер будут записаны все теги от 0 до 10. т.е от 0 до 2 со значениями а потом все с 0, но они будут записаны, пока это 10 тегов нет проблем а кода 1000.продлится вся передача минуты 3. поэтому и хочу в контроллер предать только теги со значениями. |
1) Уточните: Из RSView вызывается код для обмена? |
|
| Вернуться к началу |
|
 |
SpellBinder Частый гость


Зарегистрирован: Dec 10, 2006 Сообщения: 20 Рейтинг: +0/-1
|
Добавлено: Вт 10 Июл, 2012 12:45:20 Заголовок сообщения: |
|
|
| dany писал(а): | gTagDb.GetTag("Various_from_HMI\HMI_Coilpar_Indiv0coil_number") = K(0) это выражение прописывает тег как в RS VIEW так и в контроллере.
[/code] |
Нужно организовать обмен из Excel в контроллер, используйте DDE обмен и через RSLinx. |
|
| Вернуться к началу |
|
 |
Eraser Эксперт


Зарегистрирован: Oct 05, 2005 Сообщения: 106 Рейтинг: +8/-0 Откуда: Харьков
|
Добавлено: Вт 10 Июл, 2012 13:23:50 Заголовок сообщения: |
|
|
может так:
| Код: | For lokL = 0 To Z
'Здесь проверяйте, есть ли значение в той ячейке, которую вы собираетесь считать
if mySheet.Cells(lokL + 23, L).Value <> 0 'или какое там вам нужно условие
then VL(lokL) = mySheet.Cells(lokL + 23, L).Value
endif
Next lokL |
так у вас в массиве будет только непустые значения, ну а затем уже присваиваете.
НО, если вам нужно что бы каждый элемент массива был точно на своем обычном месте, то тогда проверку можно делать перед присваиванием, и при этом старые значения не потеряются:
| Код: | if VL(0) <>0 then gTagDb.GetTag("Various_from_HMI\HMI_Coilpar_Indiv0inverted") = VL(0)
endif |
а вообще присваивание тоже можно и нужно делать в цикле
| Код: | for i =0 to 9
gTagDb.GetTag("Various_from_HMI\HMI_Coilpar_Indiv"+Cstr(i)+"inverted") = VL(i)
next i |
|
|
| Вернуться к началу |
|
 |
dany Новичок


Зарегистрирован: Oct 11, 2011 Сообщения: 6 Рейтинг: +0/-0
|
Добавлено: Вт 10 Июл, 2012 20:17:55 Заголовок сообщения: |
|
|
SpellBinder
В настоящий момент код вызывается из RS View хотя с DDE попробовать конечно можно, но времяни маловато, если у вас есть желание описать, то я был бы очень признателен. или ссылочку
Eraser
Вам отдельное спасибо за код
| Код: |
gTagDb.GetTag("Various_from_HMI\HMI_Coilpar_Indiv"+Cstr(i)+"inverted") = VL(i)
|
именно это я и искал |
|
| Вернуться к началу |
|
 |
Eraser Эксперт


Зарегистрирован: Oct 05, 2005 Сообщения: 106 Рейтинг: +8/-0 Откуда: Харьков
|
Добавлено: Ср 11 Июл, 2012 6:41:32 Заголовок сообщения: |
|
|
Да пожалуйста, хотя, честно говоря, я не ожидал что человек, умеющий передавать тэги между приложениями, не знает как обрабатывать множество значений в цикле, с подстановкой переменной цикла в имя.
Но, в любом случае, рад что смог помочь |
|
| Вернуться к началу |
|
 |
SpellBinder Частый гость


Зарегистрирован: Dec 10, 2006 Сообщения: 20 Рейтинг: +0/-1
|
Добавлено: Ср 11 Июл, 2012 14:33:18 Заголовок сообщения: |
|
|
| dany писал(а): | | хотя с DDE попробовать конечно можно, но времяни маловато, именно это я и искал |
См. в личке |
|
| Вернуться к началу |
|
 |
|