Марк Рябов
Заглянувший
Всего сообщений: 4
Дата регистрации: 06.05.2023
|
Создано:
24.05.2023 20:15:31
|
|
Здравствуйте.
Столкнулся с проблемой, что не выполняется условие в макросе.
Код |
---|
Set spBranch=Rastr.Tables("vetv") 'обращение к таблице Ветви в RastrWin3
Set spNode=Rastr.Tables("node") 'обращение к таблице Узлы в RastrWin3
Set sptip=spBranch.Cols("tip") 'обращение к столбцу Тип в таблице Ветви RastrWin3
Set spPbeg=spBranch.Cols("pl_ip")'обращение к столбцу P_нач в таблице Ветви RastrWin3
Set spPend=spBranch.Cols("pl_ip")'обращение к столбцу P_нач в таблице Ветви RastrWin3
Set spNbeg=spBranch.Cols("ip")'обращение к столбцу N_нач в таблице Ветви RastrWin3
Set spNend=spBranch.Cols("iq")'обращение к столбцу N_кон в таблице Ветви RastrWin3
Set spUhom=spNode.Cols("uhom") 'обращение к столбцу Uном в таблице Узлы RastrWin3
Set spNy=spNode.Cols("ny") 'обращение к столбцу Номер в таблице Узлы RastrWin3
ResultName1= "Unom_branch" 'задание переменной с именем "Uном_ветв"
if spBranch.Cols.Find(ResultName1) < 0 Then 'Условие если в таблице Ветви найден столбец с названием, которое содержит переменная, то не добавлять столбец.
spBranch.Cols.Add ResultName1, PR_REAL 'Если условие не выполняется добавить столбец
end if 'окончание условия
Set spUhomBranch=spBranch.Cols(ResultName1) 'обращение к созданному столбцу Unom_branch в таблице Ветви RastrWin3
ResultName2= "Pmax" 'задание переменной с именем "Pmax"
if spBranch.Cols.Find(ResultName2) < 0 Then 'Условие если в таблице Ветви найден столбец с названием, которое содержит переменная, то не добавлять столбец.
spBranch.Cols.Add ResultName2, PR_REAL 'Если условие не выполняется добавить столбец
end if 'окончание условия
Set spPmaxBranch=spBranch.Cols(ResultName2) 'обращение к созданному столбцу Pmax в таблице Ветви RastrWin3
for i=0 to spBranch.Size - 1 'цикл for от 0 элемента до конца таблице Ветви
for j=0 to spNode.Size - 1 'цикл for от 0 элемента до конца таблице Узлы
if sptip.Z(i)=0 and spNbeg.Z(i)=spNy.Z(j) or spNend.Z(i)=spNy.Z(j) Then 'если Тип ветви - линия и номер начала или конца узла из таблицы Ветви совпадает с номером узла из таблицы Узлы, то присваивается номинальное напряжение ветви
spUhomBranch.Z(i)=spUhom.Z(j)
end if
next
next
for i=0 to spBranch.Size - 1 'цикл for от 0 элемента до конца таблице Ветви
if spUhomBranch.Z(i)=110 and sptip.Z(i)=0 Then 'если напряжение ветви равно 110 кВ то присвоить ячейке Pmax значение 42
spPmaxBranch.Z(i)=42
elseif spUhomBranch.Z(i)=220 and sptip.Z(i)=0 Then 'или если напряжение ветви равно 110 кВ то присвоить ячейке Pmax значение 162
spPmaxBranch.Z(i)=162
end if 'конец условия
next
|
Исходя из полученных результатов в файле Excel, не выполняется.
Вот выведенные результаты в Excel https://wampi.ru/image/RVn91Qs
Подскажите, пожалуйста, что я делаю не так.
|
Марк Рябов
Заглянувший
Всего сообщений: 4
Дата регистрации: 06.05.2023
|
Создано:
24.05.2023 23:09:52
|
Прошу прощения, перезагрузил компьютер, всё заработало!
|
Vikus Kisl
Посетитель
Всего сообщений: 30
Дата регистрации: 07.10.2022
|
Создано:
25.05.2023 01:59:17
|
Марк!
Вы всё делаете правильно, просто это известный и старинный косяк RastrWin! Этот ПВК не корректно работает с памятью, что бы понятней - вытеснение ранних записей новыми, ....
ранее у меня на W7 комп вообще иногда тупо колом становился при одновременном открытии например 3...4 вариантов схем-режимов или было произведено например более 20...25 расчётов ...
было 1+2 Гб оперативки, поставил 4+4 Гб стало гораздо реже... но суть в том, это напоминает DOS 3.4 ... 6.22 когда были танцы с бубном с верхней памятью, однако MachCad 2.0 работал без сбоев, а вот ТКЗ сбоила...
сейчас W11 с 16 Гб, пока таких косяков не наблюдалось хотя прога старая 3.17...
так что если комп слабый, то единственный вариант - это перегружаться...
|
Станислав Богданов
Модератор
Всего сообщений: 61
Дата регистрации: 11.10.2012
|
Создано:
25.05.2023 12:01:59
|
Код рабочий, проблему надо искать в передаче данных в Excel.
Если чуть оптимизировать код, убрать вспомогательные столбцы, использовать выборки, то получим:
Код |
---|
Set spBranch=Rastr.Tables("vetv")
ResultName2= "Pmax"
if spBranch.Cols.Find(ResultName2) < 0 Then
spBranch.Cols.Add ResultName2, PR_REAL
end if
Set spPmaxBranch=spBranch.Cols(ResultName2)
spBranch.SetSel("tip=0&ip.uhom~110")
spPmaxBranch.Calc 42
spBranch.SetSel("tip=0&ip.uhom~220")
spPmaxBranch.Calc 162
|
|