Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1948to1952
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

VBA ConvertFormula: Typen unverträglich

VBA ConvertFormula: Typen unverträglich
25.10.2023 12:20:41
fshgb
Guten Tag!

Ich möche in meinem VBA-Skript Formeln von R1C1-Schreibweise in A1-Schreibweise konvertieren. Bei der folgenden UND-Formel funktioniert das nicht, ich erhalte den Laufzeitfehler 13: Typen unverträglich.



Sub Main()
Dim formel As String
Dim formelKonvertiert As String

formel = "=UND(R[0]C[0];R[3]C[5])"
Debug.Print formel

formelKonvertiert = Application.ConvertFormula( _
Formula:=formel, _
fromReferenceStyle:=xlR1C1, _
toReferenceStyle:=xlA1)

Debug.Print formelKonvertiert
End Sub


Ich konnte bereits andere Formeln erfolgreich konvertieren und auch verifizieren, dass sie im Arbeitsblatt korrekt arbeiteten.
Ich vermute, dass es mit den Semikolon-getrennten Argumenten der Funktion zu tun hat, verstehe aber weder wieso, noch wie ich das Problem beheben kann.

Danke und Gruß!

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

Betreff
Datum
Anwender
Anzeige
AW: VBA ConvertFormula: Typen unverträglich
25.10.2023 12:32:10
daniel
Hi
1. Fehler:
in der Ausgangsformel mischt du deutsche und englische Schreibweise, dass kann schon mal nicht funktionieren.
also entweder auf Deutsch:
formel = "=UND(Z(0)S(0);Z(3)S(5))"
oder auf englisch:
formel = "=AND(R[0]C[0],R[3]C[5])"
allerdings musst du prüfen, welche Sprache ConvertFormula verarbeiten kann (dass sollte in der Hilfe stehen)

2. Fehler:
wenn du eine Formel mit relativen Bezügen in A1-Schreibweise haben willst, dann brauchst du immer eine Bezugszelle, also die Zelle, für die die Formel gelten soll, damit die relativen Bezüge richtig erstellt werden können.
Diese Bezugszelle fehlt bei dir.

die nächste Frage wäre, warum willst du das tun?
wozu ist das notwendig?
der einfachste Weg zu konvertieren ist, die Formel in eine Zelle zu schreiben (das geht in allen 4 Varianten) und dann die gewünschte Variante einfach auszulesen.
Anzeige
AW: VBA ConvertFormula: Typen unverträglich
25.10.2023 14:50:17
fshgb
Der Sprach-Mix hat in den anderen Fällen funktioniert, aber ich habe das mal geändert. Auch den Bezug (den ich im Skript vorher über eine Selection gemacht hatte) habe ich jetzt explizit ergänzt.

Das hier funktioniert:


Sub Main()
Dim formel As String
Dim formelKonvertiert As String

formel = "=R[3]C[5]=25"
Debug.Print formel

formelKonvertiert = Application.ConvertFormula( _
Formula:=formel, _
FromReferenceStyle:=xlR1C1, _
ToReferenceStyle:=xlA1, _
RelativeTo:=Range("B7") _
)

Debug.Print formelKonvertiert
End Sub


Das hier funktioniert nicht und gibt den genannten Laufzeitfehler 13 (Typen unverträglich):


Sub Main()
Dim formel As String
Dim formelKonvertiert As String

formel = "=AND(R[3]C[5]=25;R[2]C[1]=17"
Debug.Print formel

formelKonvertiert = Application.ConvertFormula( _
Formula:=formel, _
FromReferenceStyle:=xlR1C1, _
ToReferenceStyle:=xlA1, _
RelativeTo:=Range("B7") _
)

Debug.Print formelKonvertiert
End Sub


Warum ich das mache: ich möchte per Skript in einem Arbeitsblatt bedingte Formatierungen setzen, die über Formeln definiert werden. Die absoluten Zellbereiche sowohl der zu formatierenden Zellen als auch der Zellen, auf die sich die Formeln beziehen, sind erst zur Laufzeit bekannt.
Soweit ich es verstanden habe, kann FormatConditions keine Formeln mit R1C1-Bezug nutzen, so dass ich die Formeln zur Laufzeit konvertieren muss.
Wäre allerdings auch schön, wenn diese Konvertierung gar nicht nötig ist und man der bedingten Formatierung die Bezüge anderweitig klarmachen kann.
Anzeige
AW: VBA ConvertFormula: Typen unverträglich
26.10.2023 14:18:30
daniel
Hi

Das hast du falsch verstanden.
Die Bedingte Formatierung kann sowohl A1, als auch R1C1-Adressen verarbeiten, wenn man folgendes beachtet:

1. In VBA muss man die Formel für die bedingte Formatierung in Landessprache angeben, also auf einen deutschen Rechner deutsch und nicht englisch

2. Innerhalb einer Formel muss immer der gleiche Adress-Typ verwendet werden.

3. Es muss eindeutig sein, ob A1- oder Z1S1.
Dh man muss bei Bezug auf die selbe Zeile immer die (0) mit dazu zuschreiben Z(0)S1, den ZS1 ist auch eine gültige A1-Adresse.

Gruß Daniel
Anzeige
AW: VBA ConvertFormula: Typen unverträglich
26.10.2023 16:26:08
fshgb
Danke!
Ok, ich nähere mich der Lösung.

Meine Formel sieht in VBA jetzt so aus:


formel = "=UND(ISTGERADE(Z(0)S(0));Z(0)(2)=""Do"")"


Führe ich das Makro aus und schaue mir hinterher an, was in der bedingten Formatierung gelandet ist, finde ich Folgendes:
Der Bezug ist =$N$3:$N$47, was in meinem Fall richtig ist.
Die Formel aber liest sich als =UND(ISTGERADE(N3);3:3(2)="Do").
Excel hat also nur den ersten Verweis (innerhalb der ISTGERADE-Funktion) richtig übersetzt, den zweiten nicht. Jetzt kann ich mir auch vorstellen, warum ich beim Konvertierungsversuch ein "Typen unverträglich" bekommen habe.

Die Frage ist nur, wie bekomme ich auch den zweiten Verweis richtig?
Anzeige
AW: VBA ConvertFormula: Typen unverträglich
26.10.2023 16:47:43
fshgb
Einzeln funktioniert dieser Teil:
formel = "=Z(0)S(2)=""Do"""

Es liegt also nicht an dem Ausdruck an sich, sondern irgendwie daran, dass er als zweites Argument der UND-Funktion auftritt.
AW: VBA ConvertFormula: Typen unverträglich
26.10.2023 17:33:11
daniel
Einzeln ist deine Synax auch korrekt.
in der längeren UND-Variante hast du das "S" vergessen
Richtig ist: Z(0)S(2)
Du hast: Z(0)(2)
Gruß Daniel
AW: VBA ConvertFormula: Typen unverträglich
26.10.2023 17:51:43
fshgb
Oh je, manchmal ist man wirklich betriebsblind.

Vielen Dank für die Hilfe!

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige