3番目のアプリケーションからパラメータ名と値を取得するためにCOMインターフェイスを使用しています。Forループを1つのプロセスに使用し、ループをExcel for VBAの同じプロセスで呼び出す
私はこのVBAスクリプトを使用して、モデルのスタンドアロンパラメータファイル名を取得しています。このグループ内の値、パラメータグループ名、パラメータ情報、およびパラメータグループ情報は、同じプロセスを終了します。
また、メインモデルにサブモデルが付属しています。私はそれらのために同じプロセスを行っています。
私はループの各レベルに異なる変数を使用していますが、プロセスはすべてのレベルで同じですので、簡単な方法はありません。第2レベルと第3レベルのパラメータグループとサブモデルに変数を使用しないでください。私の機能
の
トポロジあなたが構造のトポロジーを見ればあなたは私が何を意味するかを理解することができます。私は同じプロセスのために同じ機能を使用していますが、サブレベルのパラメータグループには問題があります。私はそれらのために余分な変数を使用しています。
Dim j1 As Integer ' Parameter Group of Parameter Group Item/Count
Dim j2 As Integer ' Parameter Group of Parameter Group of Parameter Group Item/Count
Dim ParameterGroupsX1 As Object '2nd Level Parameter Groups Objects
Dim ParameterGroupX1 As Object '2nd Level Parameter Group
Dim nParameterGroupX1 As Integer 'Number of 2nd Level Parameter Group Objects
Dim ParameterGroupsX2 As Object '3rd Level Parameter Groups Objects
Dim ParameterGroupX2 As Object '3rd Level Parameter Group
Dim nParameterGroupX2 As Integer 'Number of 3rd Level Parameter Group Objects
。また、私はサブモデル
Dim s1 As Integer ' Sub Model 1st Level
Dim s2 As Integer ' Sub Model 2nd Level
Dim SubstrsX1 As Object ' 2nd Level Substructures Object
Dim SubstrX1 As Object ' 2nd Level Substructure
Dim nSubstrX1 As Integer ' Number of 2nd Level Substructure Objects
Dim SubstrsX2 As Object ' 3rd Level Substructures Object
Dim SubstrX2 As Object ' 3rd Level Substructure
Dim nSubstrX2 As Integer ' Number of 3rd Level Substructure Objects
ために同じアプローチを使用している私は私がサブレベルのパラメータグループとパラメータを定義するために、変数の上に使用しなくても機能やループのために呼び出すことができると思います。
私のトポロジーにどのように同じプロセスをさせることができますか教えてください。
コードは次のとおりです。クラスの知識がなくても
Dim Target_Sheet As Worksheet
Dim Main_Sheet As Worksheet
Dim ParameterGroups As Object ' 1st Level Parameter Groups Object
Dim ParameterGroup As Object ' Single Parameter Group
Dim nParameterGroup As Integer ' Number of Parameter Group Objects
Dim Parameters As Object ' 1st Level Parameters Object
Dim Parameter As Object ' 1st Level Parameter
Dim nParameter As Integer ' Number of Parameters Objects
Dim ParameterGroupsX1 As Object '2nd Level Parameter Groups Objects
Dim ParameterGroupX1 As Object '2nd Level Parameter Group
Dim nParameterGroupX1 As Integer 'Number of 2nd Level Parameter Group Objects
Dim ParameterGroupsX2 As Object '3rd Level Parameter Groups Objects
Dim ParameterGroupX2 As Object '3rd Level Parameter Group
Dim nParameterGroupX2 As Integer 'Number of 3rd Level Parameter Group Objects
Dim Substrs As Object ' 1st Level Substructures Object
Dim Substr As Object ' 1st Level Substructure
Dim nSubstr As Integer ' Number of 1st Level Substructure Objects
Dim SubstrsX1 As Object ' 2nd Level Substructures Object
Dim SubstrX1 As Object ' 2nd Level Substructure
Dim nSubstrX1 As Integer ' Number of 2nd Level Substructure Objects
Dim SubstrsX2 As Object ' 3rd Level Substructures Object
Dim SubstrX2 As Object ' 3rd Level Substructure
Dim nSubstrX2 As Integer ' Number of 3rd Level Substructure Objects
Dim i As Integer ' Parameter Item/Count
Dim j As Integer ' Parameter Group Item/Count
Dim j1 As Integer ' Parameter Group of Parameter Group Item/Count
Dim j2 As Integer ' Parameter Group of Parameter Group of Parameter Group Item/Count
Dim s As Integer ' Sub Model Main Level
Dim s1 As Integer ' Sub Model 1st Level
Dim s2 As Integer ' Sub Model 2nd Level
Dim cLine As Long
Option Explicit
Sub ReadParameterSimpack() ' Main function get parameter information
Set Target_Sheet = ThisWorkbook.Worksheets("Parameters") ' Parameter's page which i list the names and their values
Call Setup_Module.SetupSimpack ' This is the module where i get the model information from third part Application
cLine = 0
Set Parameters = Mdl.getParameterList(False) ' Gettting Parameters List
Call ParameterRead(Parameters, cLine) ' Calls the Parameter Read Function
Set ParameterGroups = Mdl.getParameterGroupList(False) ' Getting the Parameter Group List
Call ParameterGroupRead(ParameterGroups, cLine) ' Calls the Parameter Group Read Function
Set Substrs = Mdl.getSubstrList(False) ' Getting the Sub-Model List
Call SubstructureRead(Substrs, cLine) ' Calls the Model's submodel list
End Sub
Sub ParameterRead(Parameters, cLine) ' This is the function of reading Parameters
nParameter = Parameters.Count ' Number of Parameters
For i = 0 To nParameter - 1
Set Parameter = Parameters.Item(i) ' Getting parameter from the List of Parameter
Target_Sheet.Cells(cLine + 1, 1).Value = Parameter.FullName ' Writes parameter name to Excel Sheet
cLine = cLine + 1
Next i
End Sub
Sub ParameterGroupRead(ParameterGroups, cLine) ' This is the function of reading Parameter Groups
nParameterGroup = ParameterGroups.Count ' This is the number of Parameter Groups
For j = 0 To nParameterGroup - 1
Set ParameterGroup = ParameterGroups.Item(j) 'Getting Parameter Group from Parameter Groups List
Target_Sheet.Cells(cLine + 1, 1).Value = ParameterGroup.FullName ' Writes parameter group name to Excel Sheet
cLine = cLine + 1
Set Parameters = ParameterGroup.getParameterList(False) 'This is getting Parameters listed below the Parameter Group
Call ParameterRead(Parameters, cLine) ' Calls the parameter read function to get parameters which listed under Parameter groups
cLine = cLine + 1
Set ParameterGroupsX1 = ParameterGroup.getParameterGroupList(False) ' Sub-Level Parameter Group
nParameterGroupX1 = ParameterGroupsX1.Count ' Number of Sub-Level Parameter Group
For j1 = 0 To nParameterGroupX1 - 1
Set ParameterGroupX1 = ParameterGroupsX1.Item(j1)
Target_Sheet.Cells(cLine + 1, 1).Value = ParameterGroupX1.FullName
Set Parameters = ParameterGroupX1.getParameterList(False) ' Getting the Parameters of Parameter Groups
Call ParameterRead(Parameters, cLine) ' Call Parameter Read Function
cLine = cLine + 1
Set ParameterGroupsX2 = ParameterGroupX1.getParameterGroupList(False) 'Sub SubLevel of Parameter Group
nParameterGroupX2 = ParameterGroupsX2.Count
For j2 = 0 To nParameterGroupX2 - 1
Set ParameterGroupX2 = ParameterGroupsX2.Item(j2)
Target_Sheet.Cells(cLine + 1, 1).Value = ParameterGroupX2.FullName
cLine = cLine + 1
Set Parameters = ParameterGroupX2.getParameterList(False)
Call ParameterRead(Parameters, cLine)
cLine = cLine + 1
Next j2
Next j1
Next j
End Sub
Sub SubstructureRead(Substrs, cLine)
nSubstr = Substrs.Count
For s = 0 To nSubstr - 1
Set Substr = Substrs.Item(s)
Target_Sheet.Cells(cLine + 1, 1).Value = Substr.FullName
cLine = cLine + 1
Set Parameters = Substr.getParameterList(False)
Call ParameterRead(Parameters, cLine)
Set ParameterGroups = Substr.getParameterGroupList(False)
Call ParameterGroupRead(ParameterGroups, cLine)
Set SubstrsX1 = Substr.getSubstrList(False)
nSubstrX1 = SubstrsX1.Count
For s1 = 0 To nSubstrX1 - 1
Set SubstrX1 = SubstrsX1.Item(s1)
Target_Sheet.Cells(cLine + 1, 1).Value = SubstrX1.FullName
cLine = cLine + 1
Set Parameters = SubstrX1.getParameterList(False)
Call ParameterRead(Parameters, cLine)
Set ParameterGroups = SubstrX1.getParameterGroupList(False)
Call ParameterGroupRead(ParameterGroups, cLine)
Set SubstrsX2 = Substr.getSubstrList(False)
nSubstrX2 = SubstrsX2.Count
For s2 = 0 To nSubstrX2 - 1
Set SubstrX2 = SubstrsX2.Item(s2)
Target_Sheet.Cells(cLine + 1, 1).Value = SubstrX2.FullName
cLine = cLine + 1
Set Parameters = SubstrX2.getParameterList(False)
Call ParameterRead(Parameters, cLine)
Set ParameterGroups = SubstrX2.getParameterGroupList(False)
Call ParameterGroupRead(ParameterGroups, cLine)
Next s2
Next s1
Next s
End Subの
コードをインデントして、処理前と処理後の小さなサンプルデータを提供してください。また、あなたは完全なコンテキストを提供していません - メインコードの最後に 'End Sub'がありません。そしてSetup_Module.SetupSimpack(Mdl)は不明です - コードを実行する必要があります(https:// stackoverflow .com/help/mcve)改善を提供できるようにする –
@paulbicaあなたはBicaさんです。私のせいです。私は最後の行を忘れてしまいました。完全なコードを実行するには、Simpack-MBSプログラムが必要です。だから私はメインセクションを挿入しませんでした。私の主な問題は、あなたがトポロジーイメージを見て、私は3つの機能を持っている場合です。 1つはパラメータ・リストを表示し、もう1つはパラメータ・グループをリストし、もう1つはこのパラメータ・グループの下にリストされているパラメータをリストするためのcall parameter functionです。また、パラメータグループにはいくつかのパラメータグループ(カスケード接続)があり、また最後のグループにはグループとパラメータがあり、終了するまで継続します。私はExcelシートにこのパラメータ名をエクスポートしています。 – Hakan
@paulbicaと3番目の関数(サブモデル関数)はそれほど重要ではありません。もし私たちがパラメータグループとパラメータに対して行うことができれば、私は同じアプローチを3番目のものに適用できます。 – Hakan