Марк Рябов
Заглянувший
Всего сообщений: 4
Дата регистрации: 06.05.2023
|
Создано:
06.05.2023 22:17:30
|
|
Здравствуйте, пишу макрос для курсового проекта и столкнулся с такой проблемой, что нужно создать столбец назовём его "deltaU" куда будут фиксироваться разность между, значением U до инъекции в узел Q и после. При создании такого столбца он просто не отображается ни в настройках параметров форм, ни в выборе колонок, но при удалении условия "if spNode.Cols.Find(ResultName) < 0 Then" показывается окно ошибки, что такой столбец уже существует.
P.S. блок-схему и код прилагаю
Код |
---|
Set spNode=Rastr.Tables("node")
Set sptip=spNode.Cols("tip")
Set spQg=spNode.Cols("qg")
Set spUhom=spNode.Cols("uhom")
Set spVras=spNode.Cols("vras")
'Set spNy=spNode.Cols("ny")
ResultName= "deltaU"
Set spXL=CreateObject("Excel.Application")
spXL.SheetsInNewWorkbook=1
spXL.Workbooks.Add
spXL.Worksheets(1).Name = "Узлы"
spXL.Visible=true
if spNode.Cols.Find(ResultName) < 0 Then
spNode.Cols.Add ResultName, PR_REAL
end if
for i=0 to spNode.Size - 1
if sptip.Z(i)=1 Then
if spUhom.Z(i)=110 Then
'Rastr.PrintP ("Узел не оп и не баланси ") & spNy.Z(i)
beforU=spVras.Z(i)
spQg.Z(i)=spQg.Z(i)+100
Rastr.rgm("p")
afterU=spVras.Z(i)
dU=afterU-beforU
spQg.Z(i)=spQg.Z(i)-100
'Rastr.PrintP dU
elseif spUhom.Z(i)=220 Then
'Rastr.PrintP ("Узел не оп и не баланси ") & spNy.Z(i)
beforU=spVras.Z(i)
spQg.Z(i)=spQg.Z(i)+400
Rastr.rgm("p")
afterU=spVras.Z(i)
dU=afterU-beforU
spQg.Z(i)=spQg.Z(i)-400
'Rastr.PrintP dU
End if
End if
next
for col=0 to spNode.Cols.Count-1
spXL.Worksheets(1).Cells(1,col+1)=spNode.Cols(col).Prop(FL_ZAG)
for row=0 to spNode.Size - 1
spXL.Worksheets(1).Cells(2+row,col+1)=spNode.Cols(col).Z(row)
next
next
|
[img]https://wampi.ru/image/RK3TE44[/img]
Ещё выдаёт такую "некритичную ошибку"
[img]https://wampi.ru/image/RKwevv0[/img]
|
Nick_A
Посетитель
Всего сообщений: 45
Дата регистрации: 30.09.2021
|
Создано:
10.05.2023 12:10:35
|
Здравствуйте.
1. Новая колонка у меня появилась в выборе колонок в таблице узлы, т.е. ее можно добавить на экран. Попробуйте после работы макроса закрыть таблицу и открыть ее заново.
2. Ошибка действительно выскакивает. Лень было ее детектить. Связано наверное с доступом к ячейке по несуществующему индексу. Вместо этого я бы рекомендовал использовать экспорт в csv файл, тогда экспортироваться будут только необходимые колонки, а не вообще все. В доках есть соответствующая команда.
3. Учите тот факт, что после перебора последнего узла (пусть будет узел 220 кВ), вы добавили 400 Мвар, рассчитали режим, обновили переменную dU (именно обновили, а не добавили например в массив значение), потом отняли 400 Мвар. Но заново режим не пересчитали. Поэтому при экспорте у вас в эксель идет несбалансированный режим. Все параметры посчитаны для нагрузки q+400 в этом последнем узле, но нагрузка указана q.
Надеюсь, помог немного, удачи Вам)
|
Станислав Богданов
Модератор
Всего сообщений: 61
Дата регистрации: 11.10.2012
|
Создано:
10.05.2023 12:33:00
|
Ошибка возникает из-за обращения к техническому столбцу.
Не стоит использовать перебор всех столбцов по индексу (в таблице
Узлы 100+ столбцов), используйте только необходимые по имени.
|