1.4k Aufrufe
Gefragt in Tabellenkalkulation von ahorn38 Experte (3.2k Punkte)
Hallo,

habe ein Problem mit einer Typunverträglichkeit in einem evaluate-Code. Hab schon alles probiert ohne Erfolg.
Das Makro soll einen umzurechnenden Wert in eine Matrix eintragen....

http://www.file-upload.net/download-8582134/VBA-Test2.xlsm.html

4 Antworten

0 Punkte
Beantwortet von m-o Profi (22.8k Punkte)
Hallo Andreas,

deine Frage hängt wohl mit diesem Thread zusammen.

Rainer hat dir ja eine Lösung angeboten. Ich habe mal ein Beispiel mit einer Userform erstellt: Klick mich!.
Schau dir mal beide Lösungen an.

Die Zeile

Cells(intZ, intS).Value = Cells(intZ, intS).Value + Evaluate("cells(4,17)/INDEX(D2:O2;MATCH(cells(3,17);(D1:O1);0))")

kann nicht funktionieren, da die Syntax falsch ist. Schau dir hier mal die Beispiele an: Klick mich!

Im Übrigen, warum willst du denn so umständlich die Umrechnung machen? Du hast die entsprechende Spalte doch schon ermittelt.

Sub evaluete()

Sheets("evaluete").Activate

Dim intZ As Integer, intS As Integer, rngC As Range
For Each rngC In Range("A4:A12")
If rngC = Cells(2, 17).Value Then intZ = rngC.Row
Next
For Each rngC In Range("D1:O1")
If rngC = Cells(3, 17) Then intS = rngC.Column
Next

If Cells(5, 17) <> "SF" Then
Cells(intZ, intS).Value = Cells(intZ, intS).Value + Cells(4, 17).Value
Else
Cells(intZ, intS).Value = Cells(intZ, intS).Value + Round(Cells(4, 17).Value / Cells(2, intS), 2)
End If
End Sub


Gruß

M.O.
0 Punkte
Beantwortet von ahorn38 Experte (3.2k Punkte)
Hallo M.O.

du hast wie immer in allem Recht....!
Bei dem Grundproblem nutze ich den Code von Rainer, der auch wunderbar funktioniert. Ich bin jetzt dabei, diese "Bausteine" in meine spezielle Datei einzubauen. Dein neuer Vorschlag ist dabei in der Tat viel komfortabler als meine Array-formel und ich werden deinen Vorschlag nutzen!
Ich habe mir trotzdem deinen empfohlenen link angesehen, kann aber trotzdem nicht erkennen wo bei mir der Syntaxfehler steckt. Auch wenn ich diese Variante jetzt verwerfe, wäre es für mich interessant, wo der Fahler steckt um dazu zu lernen.
Ich habe doch die Formel so aus dem Excel übertragen, wie sie im Excel funktioniert...?
Danke und Gruß
Andreas
0 Punkte
Beantwortet von m-o Profi (22.8k Punkte)
Hallo Andreas,

auf der von mir verlinkten Seite steht z.B.

Evaluate("=SUM((A1:A5000=" & K1 & ")*(B1:B5000=" & K2 & ")*C1:C5000)")


wobei K1 und K2 hier Variablen sind. Dies gilt für Zellbezüge jedoch entsprechend.

Evaluate("=SUM((A1:A5000=" & Cells(3,17) & ")*(B1:B5000=" & Cells(4,17) & ")*C1:C5000)")


Du schreibst in deiner Formel z.B.:

Evaluate("cells(4,17)/INDEX(D2:O2;MATCH(cells(3,17);(D1:O1);0))")


Dir müsste auffallen, dass hier Cells nicht automatisch groß geschrieben wird, VBA dies also nicht als Befehl erkennt. Dies liegt daran, dass du Cells innerhalb der Anführungszeichen geschrieben hast. Somit wird das alles als Text interpretiert.
Du musst deine Zellbezüge außerhalb der Anführungszeichen und mit einem &-Zeichen in den Formelstring einbauen, wie in dem Beispiel oben.

Beispiele

Sub Beispiel()

Cells(1, 1) = "= Cells(1, 2)" 'das wäre der Code entsprechend deiner Evaluate-Formel; bringt Fehler
Cells(2, 1).FormulaLocal = "=" & Cells(1, 2).Address

End Sub


Dieser Code bringt einen Fehler (wieder entsprechend deinem Beispiel):

Sub beispiel2()
MsgBox Evaluate("=SUM(cells(3,1),cells(3,2))")
End Sub


So funktioniert es:

Sub beispiel3()
MsgBox Evaluate("=SUM(" & Cells(3, 1) & "," & Cells(3, 2) & ")")
End Sub


Gruß

M.O.
0 Punkte
Beantwortet von ahorn38 Experte (3.2k Punkte)
Hallo M.O.,

danke für Mühe und Geduld!!!!

Gruß
Andreas
...