Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1528to1532
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

MMult-Problematik in VBA

MMult-Problematik in VBA
01.12.2016 12:00:31
Christian
Hallo zusammen,
ich habe folgendes Problem: In Excel funktioniert MMult zusammen mit MINV perfekt siehe Screenshot: Userbild
Wenn ich das gleiche mit folgendem Code in VBA umsetzen möchte, erhalte ich eine Fehlermeldung (Laufzeitfehler 1004 - Die MMult-Eigenschaft kann nicht zugeordnet werden):
Sub Matrixeln()
Dim a(1 To 2, 1 To 2)
Dim d(1 To 2, 1)
Dim b
Dim c
a(1, 1) = 0
a(2, 1) = -2
a(1, 2) = -4
a(2, 2) = 2
d(1, 1) = 40
d(2, 1) = 25
b = Application.WorksheetFunction.MInverse(a)
c = Application.WorksheetFunction.MMult(d, b)
MsgBox "Zahl lautet:" & c(1, 1)
MsgBox "Zahl lautet:" & c(2, 1)
End Sub

An was kann das liegen? Vielen Dank im Voraus
VG Christian

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Sieh dir mal deine Fml und dann dein VBA-...
01.12.2016 13:39:39
Luc:-?
…Konstrukt genau an, Christian!
Worin unterscheiden die sich? Ist wie bei diesen Bildchen, finde die Unterschiede!
Gruß, Luc :-?
Besser informiert mit …
AW: Sieh dir mal deine Fml und dann dein VBA-...
01.12.2016 14:05:34
Christian
Ah sorry, das war der falsche Code. Hab nur aus Verzweiflung probiert:
Sub Matrixeln()
Dim a(1 To 2, 1 To 2)
Dim d(1 To 2, 1)
Dim b
Dim c
a(1, 1) = 0
a(2, 1) = -2
a(1, 2) = -4
a(2, 2) = 2
d(1, 1) = 40
d(2, 1) = 25
b = Application.WorksheetFunction.MInverse(a)
c = Application.WorksheetFunction.MMult(b, d)
MsgBox "Zahl lautet:" & c(1, 1)
MsgBox "Zahl lautet:" & c(2, 1)
End Sub
Muss natürlich so heißen. Aber leider funktioniert das auch nicht.
Was mache ich falsch?
VG
Anzeige
Du bist in eine VBA-Dim-Falle getappt, ...
01.12.2016 15:52:53
Luc:-?
…Christian;
hast dir zwar viel Mühe gegeben, das zu vermeiden, ist dir aber nicht gelungen:
Dim d(1 To 2, 1) heißt, du deklarierst eine Matrix mit den Zeilen 1 und 2, sowie den Spalten 0 und 1, was du sicher nicht wolltest. Anschld füllst du nur deren 2.Spalte, die 1. enthält also Empties, was hier sicher als 0en interpretiert wird, obwohl d Variant ist. MMult ergibt dann ebenfalls eine 2×2-Matrix, die, weil c als Variant deklariert wurde, die Indizes 0,0…1,1 aufweisen dürfte, falls MMult bei den unterschiedlichen Indizes von b und d überhpt fktt.
Luc :-?
Anzeige
AW: Du bist in eine VBA-Dim-Falle getappt, ...
01.12.2016 16:04:27
Christian
Alles klar, das war es. Erst mal vielen Dank dafür.
Leider reißen meine Probleme nicht ab:
Sub Matrixeln()
Dim a(1, 1)
Dim b(1, 0)
Dim c
a(0, 0) = 0
a(1, 0) = -2
a(0, 1) = -4
a(1, 1) = 2
b(0, 0) = 40
b(1, 0) = 25
c = Application.WorksheetFunction.MMult(Application.WorksheetFunction.MInverse(a), b)
MsgBox "Zahl lautet:" & c(0)
MsgBox "Zahl lautet:" & c(1)
End Sub
Hier erhalte ich bei der ersten MsgBox einen "Laufzeitfehler (9): Index außerhalb des gültigen Bereichs".
Wie kann ich noch auf das Array zugreifen? Hab es auch mit c(0,0) und c(1,0) probiert.
Gruß
Christian
Anzeige
Noch eine Dim-Falle, ...
01.12.2016 20:10:33
Luc:-?
…Christian,
die ich möglicherweise in der letzten AW durch meine Ergebnis-Indizes-Erwähnung provoziert hatte. VB-Fktt benutzen idR ein 0basiertes Index-System, Xl-Fktt ein 1basiertes. Darauf hat man auch mit Option Base 0 (VB-Standard/-Default) bzw Option Base 1 kaum bis keinen Einfluss. Da c nicht nur vom DatenTyp Variant ist, sondern durch die Zuweisung eines kompletten mehrwertigen Ergebnisses (einer Xl-Fkt) zu einem Variant mit einem Array wird, wdn auch die Xl-Indizes mit übernommen. Sie lauten also (1, 1) und (2, 1). Damit fktioniert die MsgBox-Ausgabe dann auch.
Noch ein Hinweis: Es reicht WorksheetFunction.MMult (voran­gestelltes Application. ist hier gleichbedeutend und optional) bzw Application.MMult, wobei letzteres auch FehlerWerte ausgibt (was bei einem Variant als Ergebnis­Variable im Prinzip unproblematisch wäre), ersteres nicht, sondern in einen Fehler läuft, den man abfangen muss.
Luc :-?
Anzeige
AW: Noch eine Dim-Falle, ...
02.12.2016 10:39:29
Christian
Vielen Dank, es klappt! Gar nicht so einfach :)
Schönes Wochenende!
Gruß
Christian
Ja, danke, dito! Und ja, da hilft nur probieren, …
02.12.2016 13:29:37
Luc:-?
…Christian;
alle Datenfelder, die direkt aus Xl kommen oder mit Xl-Fktt ermittelt wdn, sind grundsätzlich 1basiert. Nur die Indizierung von in VBA und aus VBA erzeugten Arrays kann (mit Option Base 0/1) beeinflusst wdn. Außerdem gibt's noch einen anderen Array-Typ, der den vektororientierten Array-Objekten anderer Sprachen ähnelt und dann auch wie in diesen üblich indiziert wird → zB (i)(j)(k). Dabei sind aber in VBA auch Mischformen möglich → zB (i)(j, k).
Schö2AdWE, Luc :-?
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige