it-swarm.com.de

Excel VBA ruft Sub von einem anderen Sub mit mehreren Eingängen und Ausgängen unterschiedlicher Größe auf

Ich möchte ein Sub von einem anderen Sub innerhalb desselben Moduls anrufen. Das erste Unterprogramm wäre mein Hauptcode und dort würde ich das zweite Unterprogramm aufrufen. Die zweite Subroutine empfängt mehrere Eingaben als Integer, Double, Double Arrays und Double Matrices. Die Größe der Arrays und Matrizen ist bekannt und in einer ganzzahligen Variablen gespeichert. Das Sub gibt auch mehrere Ausgänge zurück. Also würde ich gerne so etwas machen.

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

Woher weiß es, welches U-Boot das Haupt-U-Boot ist, auf dem es zu laufen beginnt? Kann ich das sekundäre Unterprogramm oben platzieren und der Code beginnt irgendwie mit dem unteren Unterprogramm?

21
user2421555

Um ein Sub in einem anderen Sub anzurufen, müssen Sie nur Folgendes tun:

Call Subname()

Wo Sie also CalculateA(Nc,kij, xi, a1, a) haben, müssen Sie call CalculateA(Nc,kij, xi, a1, a) haben

Als erstes Problem müssen Sie entscheiden, wann Sie ein Sub ausführen möchten. Gehen Sie zur Makroliste und wählen Sie das aus, das Sie ausführen möchten. Sie können ihm auch eine Tastenkombination zuweisen müssen diese Tasten drücken, um es auszuführen. Obwohl ich es auf sekundären Subs normalerweise als Private sub CalculateA(...) tue, erscheint es auf diese Weise nicht in der Makroliste und es ist einfacher zu arbeiten

Hoffe es hilft, Bruno

PS: Wenn Sie eine andere Frage haben, die Sie nur stellen, dies aber keine Community ist, in der Sie nach Code fragen, kommen Sie mit einer Frage oder einem Code, der nicht ausgeführt wird, und bitten Sie um Hilfe, anders als Sie es getan haben wäre toll, wenn du es im Excel VBA-Format schreiben könntest. "

38
Newbie

Das sind wirklich zwei Fragen.

Der erste wird hier beantwortet: Aufruf eines Sub in VBA

Zum zweiten, protip: In VBA gibt es keine Hauptunterroutine. Vergessen Sie prozedurale Mehrzwecksprachen. VBA-Subs sind "Makros" - Sie können sie ausführen, indem Sie Alt + F8 drücken oder indem Sie Ihrem Arbeitsblatt eine Schaltfläche hinzufügen und das gewünschte Sub aus dem automatisch generierten Sub "ButtonX_Click" aufrufen.

4
Carlos Vieira

VBA-Subs sind keine Makros. Ein VBA-Sub kann ein Makro sein, ist aber kein Muss.

Der Begriff "Makro" wird nur für aufgezeichnete Benutzeraktionen verwendet. Aus diesen Aktionen wird ein Code generiert und in einem Sub gespeichert. Dieser Code ist einfach und bietet keine leistungsfähigen Strukturen wie Schleifen, zum Beispiel Do .., bis .. next, while .. do und andere.

Die elegantere Art ist, Ihren eigenen VBA-Code zu entwerfen und zu schreiben, ohne die Makrofunktionen zu verwenden!

VBA ist eine objektbasierte und ereignisorientierte Sprache. Subs, oder besser gesagt "Subroutinen", werden durch dedizierte Ereignisse gestartet. Das Ereignis kann das Drücken einer Taste oder das Öffnen einer Arbeitsmappe und vieler anderer sehr spezifischer Ereignisse sein.

Wenn Sie sich auf VB6 und nicht auf VBA konzentrieren, können Sie angeben, dass es immer ein Hauptfenster oder ein Hauptformular gibt. Dieses Formular wird gestartet, wenn Sie die kompilierte ausführbare Datei "xxxx.exe" starten.

In VBA haben Sie nichts dergleichen, aber Sie haben eine XLSM-Datei, die von Excel gestartet wird. Sie können dem Workbook_Open-Ereignis Code hinzufügen. Dieses Ereignis wird generiert, wenn Sie die gewünschte Excel-Datei öffnen, die als Arbeitsmappe bezeichnet wird. In der Arbeitsmappe befinden sich Arbeitsblätter.

Es ist hilfreich, sich mit dem sogenannten Objektmodell von Excel vertraut zu machen. Die Arbeitsmappe enthält mehrere Ereignisse und Methoden. Das Arbeitsblatt enthält auch mehrere Ereignisse und Methoden.

Im objektbasierten Modell haben Sie Objekte, die Ereignisse und Methoden haben. Methoden sind Aktionen, die Sie mit einem Objekt ausführen können. Ereignisse sind Dinge, die einem Objekt passieren können. Ein Objekt kann ein anderes Objekt enthalten und so weiter. Sie können neue Objekte wie Blätter oder Diagramme erstellen.

2
user3023996