Seite 1 von 2
Eigenes Basic Makro geschrieben - In Calc Fehler:501
Verfasst: Di 1. Mär 2022, 23:05
von werdas34
Hallo,
ich habe die letzten Tage zum ersten Mal ein eignes Makro programmiert.
Soweit hat auch alles funktioniert. Nun wollte ich es es als native Funktion in Calc verwenden. Bekomme in dieser Zelle aber nur Fehler:501 ausgeben. Der Fehler steht für "Ungültiges Zeichen".
Ich schätze mal das die Formel nicht gefunden wird.
Ich habe mal paar Bilder von einem Beispielcode angehängt, wo der selbe Fehler auftaucht.
Beispielcode:
https://ibb.co/t4prH1z
Ausgabe:
https://ibb.co/0BTd9f9
Was mache ich falsch?
Muss ich noch irgendwelche Settings anpassen?
mfg werdas34
Re: Eigenes Basic Makro geschrieben - In Calc Fehler:501
Verfasst: Di 1. Mär 2022, 23:46
von craig
Hallo,
Deine
UDF ist schon richtig.
Aber der Aufruf im Tabellenblatt nicht:
=CALC(C1
;C2)
In der Funktion ("Makro") wird mit dem Komma getrennt.
Im Blatt mit Semikolon, halt wie bei jeder anderen Funktion auch.
Re: Eigenes Basic Makro geschrieben - In Calc Fehler:501
Verfasst: Mi 2. Mär 2022, 00:17
von werdas34
Super! Vielen Dank.
Daran habe ich gar nicht gedacht. Und deinen Link habe ich auch nicht gefunden.
Im Nachhinein etwas dämlich von mir, das ich nicht an das Semikolon gedacht habe.
Aber das wird auch meistens von selbst gesetzt. Und ist unscheinbar. Da kann man es schon mal übersehen.
Dennoch VIelen Dank.
Re: Eigenes Basic Makro geschrieben - In Calc Fehler:501
Verfasst: Mi 2. Mär 2022, 01:18
von werdas34
Hallo,
noch mal kurz Off-Topic. da ich dazu nichts brauchbares finde, sonst mache ich einen neuen Thread auf.
Ist es möglich, wenn sich der Wert in einer Zelle ändert, das dann das Makro ausgeführt wird. Quasi ein onChange Event.
Konkret:
Ich habe in einer Zelle eine Summen-Formel. Ändert sich die Summe, soll automatisch die Zelle getriggert werden, in der calc(a,b) aufgerufen wird.
Pseudocode
Code: Alles auswählen
REM cell ist eine bestimmte Zelle z.B. A1
If cell.onChange = True Then
run macro
End If
Wie setzt man sowas um?
Edit:
Das onChange ist nicht mehr notwendg. Konnte das, durch Anpassen des Layouts, anderweitig lösen.
Aber eine andere Frage:
Wenn ich das Dokument öffne, werde ich darauf hingewiesen, das Makros verwendet werden und ob ich diese aktivieren möchte. Ich bestätige dieses und dann kommt die Fehlermeldung "BASIC-Laufzeitfehler. Objektvariable nicht belegt".
Als Objektvariablen habe ich Arrays und um das zuweisen des aktiven Sheets.
Code: Alles auswählen
Dim Doc As Object
Doc = ThisComponent
MySheet = Doc.CurrentController.ActiveSheet
p = MySheet.getCellByPosition(2, 1)
Wie vermeide ich die Fehlermeldung? Vor allem wird zum Start das Makro wegen der Fehlermeldung nicht ausgeführt und in der Zelle steht einfach der Wert 0 drin statt der, der beim letzten schließen errechnet wurde.
Re: Eigenes Basic Makro geschrieben - In Calc Fehler:501
Verfasst: Mi 2. Mär 2022, 17:26
von mikele
Hallo,
was willst du mit
in einer benutzerdefinierten Funktion?
Der Fehler wird produziert, weil zu dem Zeitpunkt beim Öffnen der Datei, wo di Funktion berechnet werden soll, die Objekte noch gar nicht existieren.
Vielleicht verrätst du uns etwas mehr über die Funktion? (eine einfache Multiplikation ist wohl offensichtlich nicht)
Re: Eigenes Basic Makro geschrieben - In Calc Fehler:501
Verfasst: Do 3. Mär 2022, 03:03
von werdas34
Hallo,
für die Funktion getCellByPosition(a,b) brauche ich ein Sheet Objekt. Deswegen habe ich die ganzen anderen Objekte miterzeugt.
Was ich vorhabe: Kurz gesagt: Automatisches und dynamisches FiFo.
Ich habe eine Spalte Stückzahl und eine Kaufkurs. Stückzahl kann positive (Kauf) und negative (Verkauf) Werte beinhalten.
Im ersten Schritt baue ich zwei Arrays auf bestehend aus Kauf-Stückzahl und Kaufpreisen. Dazu wird die Summe aller verkauften Stücke in einer weiteren Variable berechnet.
Schritt 2 besteht darin die Verkauf-Stückzahl Summe, der Kauf-Stückzahl sukzessive abziehen, bis das erstere auf 0 steht.
3. Und dann werden die Reststücke mit dem aktuellen Verkaufspreis - Einkaufspreis berechnet und der Gewinn zurückgegeben.
Kurze Hinweise:
Alles findet im aktiven Sheet statt, es werden keine weitere Daten aus anderen Sheets verwendet.
Für den 1. Schritt mache ich das nicht über range, sondern über eine While-Schleife, da das mit range nicht wirklich funktioniert und ich im Vorfeld nicht weiß, wo die Spalten genau aufhören. Und über die Schleife hole ich mir mittels getCellByPosition(a,b) die Werte der Zellen.
mfg werdas34
Re: Eigenes Basic Makro geschrieben - In Calc Fehler:501
Verfasst: Do 3. Mär 2022, 07:39
von mikele
Hallo,
dafür benötigst du keine benutzerdefinierten Funktionen als Makro. Das lässt sich mit den üblichen Calc-Funktionen realsieren.
Re: Eigenes Basic Makro geschrieben - In Calc Fehler:501
Verfasst: Do 3. Mär 2022, 19:49
von werdas34
Und wie?
Ich habe mir vieles angeschaut, aber nirgends was gefunden, was mir geholfen hätte.
Hättest du nen Link zum Blog/Video wie man das löst.
Oder kannst du bitte die entsprechende Formel(en) posten?
Beispielsetup:
https://ibb.co/mFqrv2n
Links, die Ansammlung aller Käufe mit Kaufpreis und Stückzahlen. Rechts der aktuelle Verkaufspreis, die Anzahl der Stücke, die man verkaufen möchte und der entsprechend ermittelte Gewinn.
Hinweis:
Verkaufspreis bei negativer Stückzahl spielt in der Berechnung keine Rolle. Ablauf ist: Ermittle Summe negativer Stückzahlen und ziehe diese nach einander den positiven Stückzahlen ab. Dann nach dem FiFo-Prinzip Verkaufspreis - Kaufspreis mal Stückzahl. Und das solange bis man die die festgelegte Verkaufsstückanzahl erreicht hat.
Soll der Gewinn für mehr Stücke, die verkauft werden als vorhanden sind, berechnet werden, soll in der Zelle "-1" oder "Falsche Eingabe" erscheinen.
mfg werdas34
Re: Eigenes Basic Makro geschrieben - In Calc Fehler:501
Verfasst: Do 3. Mär 2022, 22:33
von mikele
Hallo,
eine Beispieldatei wäre sinnvoller, bevor die Helfer hier anfangen, die Tabelle nachzubauen.
Ich kann nicht nachvollziehen, wie man in deinem Beispiel auf einen Gewinn von 870€ kommt. Bitte mehr Erklärungen.
Re: Eigenes Basic Makro geschrieben - In Calc Fehler:501
Verfasst: Do 3. Mär 2022, 23:15
von mikele
Hallo,
ich habe mal ein bisschen spekuliert und gebastelt. Die Hilfsspalten könnten auch ausgeblendet werden.