web-dev-qa-db-ja.com

複数の入力、異なるサイズの出力を持つ別のサブからのサブを呼び出すExcel VBA

同じモジュール内の別のサブルーチンからサブルーチンを呼び出したいです。最初のサブルーチンがメインコードになり、そこで2番目のサブルーチンを呼び出します。 2番目のサブルーチンは、整数、倍精度、倍精度配列、倍精度行列として複数の入力を受け取ります。配列と行列のサイズは既知であり、整数変数に格納されます。サブルーチンはいくつかの出力も返します。だから、私はこのようなことをしたいと思います。

sub Main()
    Nc As integer
    Dim kij(1 To Nc, 1 To Nc), xi(1 to Nc), a1 As Double
    'I assign values to my variables from the excelsheet e.g. Nc=Cells(1,1) etc.

    CalculateA(Nc,kij, xi, a1, a)
    Cells(5,5)=a
end sub

sub CalculateA(Nc as integer,kij as matrix double, xi as array double, a as Double)
    a=0
    For i=1 To Nc
       For j=1 To Nc
          a = a + kij(i,j)*x(i)*x(j)
       Next j
    Next i
    a = a*a1
end sub

どのサブが実行を開始するメインのサブであるかをどのように知るのですか?二次サブルーチンを一番上に置くと、コードは何らかの形で一番下のサブルーチンから開始できますか?

21
user2421555

別のサブルーチン内でサブルーチンを呼び出すには、次の操作のみが必要です。

Call Subname()

したがって、CalculateA(Nc,kij, xi, a1, a)がある場合は、call CalculateA(Nc,kij, xi, a1, a)を持つ必要があります

最初に実行される問題はあなたが決めるので、サブを実行したいときは、マクロリストに移動して実行したいものを選択し、実行することができます。また、キーショートカットを与えることもできます。これらのキーを押して実行する必要があります。ただし、セカンダリサブでは、通常Private sub CalculateA(...)がマクロリストに表示されず、作業が簡単になるため、

役に立てば幸い、ブルーノ

PS:他に質問があるだけで、これはコードを求めるコミュニティではない場合、ここに来て質問や実行されていないコードを見つけて助けを求めます。 Excel VBA形式で作成できればすばらしいと思います。」

38
Newbie

これらは本当に2つの質問です。

最初の回答はここにあります: VBAでSubを呼び出す

2つ目は、ヒント:VBAにはメインサブルーチンはありません。手続き型の汎用言語を忘れてください。 VBAサブルーチンは「マクロ」です。Alt+ F8を押すか、ワークシートにボタンを追加し、自動生成された「ButtonX_Click」サブから目的のサブルーチンを呼び出すことで実行できます。

4
Carlos Vieira

VBAサブルーチンはマクロではありません。 VBAサブルーチンはマクロにすることができますが、必須ではありません。

「マクロ」という用語は、記録されたユーザーアクションにのみ使用されます。これらのアクションからコードが生成され、サブルーチンに保存されます。このコードは単純で、ループなどの強力な構造を提供しません。たとえば、Do .. until、for .. next、while .. doなどです。

よりエレガントな方法は、マクロ機能を使用せずに独自のVBAコードを設計および作成することです!

VBAは、オブジェクトベースのイベント指向言語です。潜水艦、またはそれを「サブルーチン」と呼ぶのは、専用のイベントによって開始されます。イベントは、ボタンを押すか、ワークブックを開くこと、および他の多くの非常に具体的なイベントです。

VBAではなくVB6に焦点を合わせている場合は、メインウィンドウまたはメインフォームが常に存在すると述べることができます。コンパイルされた実行可能ファイル「xxxx.exe」を開始すると、このフォームが開始されます。

VBAにはこのようなものはありませんが、Excelで起動されたXLSMファイルがあります。 Workbook_Openイベントにいくつかのコードを添付できます。ブックと呼ばれる目的のExcelファイルを開くと、このイベントが生成されます。ワークブック内にワークシートがあります。

Excelのいわゆるオブジェクトモデルに精通しておくと便利です。ワークブックには、いくつかのイベントとメソッドがあります。また、ワークシートにはいくつかのイベントとメソッドがあります。

オブジェクトベースのモデルには、イベントとメソッドを持つオブジェクトがあります。メソッドは、オブジェクトで実行できるアクションです。イベントは、オブジェクトに発生する可能性のあるものです。オブジェクトには別のオブジェクトなどを含めることができます。シートやチャートなどの新しいオブジェクトを作成できます。

2
user3023996