Я написал макрос для Excel, который используется для симуляции в Аспене.Макрос работает хорошо, за исключением одной части, которая не работает должным образом.Я не знаю почему, но часть
For j = 0 To 1
Call Run
Next j
в Sub Start()
не выполняется должным образом.Как показывает цикл for, Call Run
должен быть выполнен два раза.С уважением, это не тот случай.Когда я запускаю Sub Start (), он работает, но Call Run
выполняется только один раз.Вот полный код макроса в VB.Буду благодарен за любые советы.
Option Explicit
Dim na As Integer
Dim nb As Integer
Dim nc As Integer
'Dim nd As Integer
Dim i As Integer
Dim j As Integer
'Dim B As Integer
'Dim B As Double
Dim nresults As Integer
Dim Index1 As Integer
Dim Resultfile As String
Dim Resultfolder As String
Dim nlaeufe As Integer
Dim NewBook As Object
Dim ACMObj As Object
Dim nDaten As Integer
Sub Start()
Application.ActiveWorkbook.Save
nlaeufe = Sheet0.Cells(2, 2)
Call Clear_Data
For i = 0 To nlaeufe
'Sheet0.Cells(3, 2) = nlaeufe - i
Set ACMObj = GetObject(Sheet0.Cells(1, 2))
Application.DisplayAlerts = False
ACMObj.Application.Visible = True
Call Count_Daten
Call Add_Daten(ACMObj, nDaten)
For j = 0 To 2
Call Run
Next j
Call Get_Data
If ACMObj.Application.Simulation.State <> "Running" Then
Call Results_newfile
Application.ActiveWorkbook.Save
End If
Next i
End Sub
Sub Get_Data()
' If Sheet0.Cells(Index1 - 1, 2).Value <> ACMObj.Application.Simulation.Time Then
'Sheet0.Cells(Index1, 2).Value = ACMObj.Application.Simulation.Time
Dim nd
For nd = 0 To 152
Sheet0.Cells(32 + nd, 4 + i).Value = ACMObj.Flowsheet.Resolve(Sheet0.Cells(32 + nd, 2)).Value
Sheet0.Cells(187 + nd, 4 + i).Value = ACMObj.Flowsheet.Resolve(Sheet0.Cells(187 + nd, 2)).Value
Next nd
'Index1 = Index1 + 1
'If RunStatus = 1 Then _
' Application.OnTime Now + Sheet0.Cells(4, 2).Value, "Get_Data"
'Else
'End If
End Sub
Sub Count_Daten()
Dim na
While Sheet0.Cells(6 + na, 4) <> ""
na = na + 1
Wend
nDaten = na - 1
End Sub
Sub Add_Daten(ACMObj, nDaten)
Dim nb
Dim B
For nb = 1 To nDaten
Set B = ACMObj.Application.Simulation.Flowsheet.Resolve(CStr(Sheet0.Cells(6 + nb, 3)))
B.Value = Sheet0.Cells(6 + nb, 4 + i).Value
Next nb
End Sub
Sub Run()
Set ACMObj = GetObject(Sheet0.Cells(1, 2))
Application.DisplayAlerts = False
ACMObj.Application.Visible = True
ACMObj.Application.Simulation.runmode = "Steady State"
On Error Resume Next ' In case we are already running
ACMObj.Run (False)
End Sub
Sub Results_newfile()
Resultfolder = Sheet0.Cells(1, 8)
Resultfile = Sheet0.Cells(2, 8)
' Set NewBook = Workbooks.Add(xlWBATWorksheet)
'NewBook.SaveAs (Resultfolder & Resultfile & ".xls")
'NewBook.Activate
'ThisWorkbook.Activate
Sheet0.Select
Range("A1:BA65536").Select
Selection.Copy
' NewBook.Activate
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
Selection.PasteSpecial Paste:=xlPasteColumnWidths, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
'Call Copy_figure
'NewBook.Save
ThisWorkbook.Activate
End Sub
Sub Clear_Data()
Dim i As Integer
Dim nc As Integer
'i = 100
Sheet0.Select
Range("C32:HH166").Select
Selection.Clear
While Sheet0.Cells(32 + nc, 3) <> ""
'Range(Cells(32 + i, 2), Cells(182 + i, 53)).Select
nc = nc + 152
Selection.Clear
i = i + 152
Wend
Range("A1").Select
End Sub