我一直在编写VBA代码,该代码在外部程序中对钢门户结构执行计算。
钢质门架结构由2根柱子和1根横梁组成。 对于第一次计算,输入尺寸和载荷,对于以下计算,VBA代码将首先自动更改钢型材并重复计算。
在外部程序中进行每次计算后,结果将加载到excell中。然后将结果写在“恢复”表上。对于每个计算,有6个单元(列轮廓,梁轮廓,单位检查列,单位检查梁,变形柱,......)。
*计算了许多不同配置文件的构造后,“恢复”工作表将保存为新工作表(命名为als“长度梁,柱高,门户距离”)。之后,将清除工作表“resume”,更改尺寸(长度和门户距离),并再次开始计算,将每个结果保存在空的“简历”表中。
每个简历表包含大约300个计算,必须重复14个不同的列高和6个门户距离(总共84页,25200计算)。
计算基于2个子程序。
Sub BerekenSpant()(E:Sub CalculateResults()) Sub ControleerResultaat()(E:Sub EvaluateResults())
Sub BerekenSpant()工作正常。此子程序为外部计算程序创建XML文件,并在计算后导入结果。
Sub ControleerResultaat()也可以正常工作(约150次计算)。该子程序使用BerekenSpant()导入的结果并将其写入“恢复”表。然后它比较钢柱(或梁,或梁和柱)的变化,并再次调用Sub“BerekenSpant()”。在计算300次之后(在计算出最终的梁和柱组合之后),调整门户长度并执行*。
所以Sub ControleerResultaat()实际上永远不会结束(直到执行25200次计算)。这会导致堆栈过载我猜...如果在给出“400”故障后重新开始计算,则再次进行150次计算而没有问题......
如何解决此问题,以便每150次计算不会中断计算?
感谢您的回答!
“ControleerResultaat()”代码的最后一部分:
If HuidigeKolom = EindKolom And HuidigeDakligger = EindDakligger Then
If Worksheets("TABEL").Cells(RijHoogteHal, 2).Value <= 11.5 Then
Dim NieuweH As Double
NieuweH = (HSpanttemp + 0.5)
Worksheets("TABEL").Cells(RijHoogteHal, 2).Value = NieuweH 'Nieuwe hoogte toewijzen voor nieuwe berekening
Worksheets("TABEL").Cells(RijProfielKolommen, 2).Value = StartKolom
Worksheets("TABEL").Cells(RijProfielDakligger, 2).Value = StartDakligger
'Tabblad combinaties opslaan, hernoemen en tabblad combinaties leegmaken voor volgende berekening
Sheets("Combinaties").Copy After:=Sheets(Sheets.Count)
Sheets("Combinaties (2)").Name = "L= " & LSpanttemp & " m, H= " & HSpanttemp & " m, D= " & Spantafstand
Sheets("Combinaties").Range("B5:CZ52").ClearContents
BerekenSpant
ControleerResultaat
ElseIf Worksheets("TABEL").Cells(RijDeltaSpant, 2).Value <= 8 Then 'tot maximaal 8m spantafstand de berekening uitvoeren
NieuweTA = (Spantafstand + 0.5)
Worksheets("TABEL").Cells(RijHoogteHal, 2).Value = 5 'Spanthoogte opnieuw instellen op startwaarde 5m
Worksheets("TABEL").Cells(RijDeltaSpant, 2).Value = NieuweTA
Worksheets("TABEL").Cells(RijProfielKolommen, 2).Value = StartKolom
Worksheets("TABEL").Cells(RijProfielDakligger, 2).Value = StartDakligger
'Tabblad combinaties opslaan, hernoemen en tabblad combinaties leegmaken voor volgende berekening
Sheets("Combinaties").Copy After:=Sheets(Sheets.Count)
Sheets("Combinaties (2)").Name = "L= " & LSpanttemp & " m, H= " & HSpanttemp & " m, D= " & Spantafstand
Sheets("Combinaties").Range("B5:CZ52").ClearContents
BerekenSpant
ControleerResultaat
Else
MsgBox ("Klaar met berekening!")
End If
End If