❤️ Helfen Sie noch heute, unser LibreOffice Forum zu erhalten! ❤️
Unterstützen Sie das LibreOffice-Forum und helfen Sie uns, unser Ziel für 2025 zu erreichen!

🍀 Jeder Beitrag zählt – vielen Dank für Ihre Unterstützung!🍀
Mit Ihrer Spende sichern Sie den Fortbestand, den Ausbau und die laufenden Kosten dieses Forums. 🌱


❤️ DANKE >> << DANKE ❤️

>> Dank Ihrer Unterstützung -> Keine Werbung für alle registrierten LibreOffice-Forum User! <<
🤗 Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet. 🤗

Eigenes Basic Makro geschrieben - In Calc Fehler:501

CALC ist die Tabellenkalkulation, die Sie immer wollten.
werdas34
Beiträge: 16
Registriert: Di 1. Mär 2022, 22:39

Eigenes Basic Makro geschrieben - In Calc Fehler:501

Beitrag von werdas34 » Di 1. Mär 2022, 23:05

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

craig
* LO-Experte *
Beiträge: 1137
Registriert: Do 21. Apr 2016, 11:42

Re: Eigenes Basic Makro geschrieben - In Calc Fehler:501

Beitrag von craig » Di 1. Mär 2022, 23:46

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.
Gruß

Craig

Nie die Sicherungskopie vergessen!

════════════════════════════════════════════════
WIN 10 Pro 64-Bit • LO 7.4.5.1 (x64) • AOO 4.1.8

werdas34
Beiträge: 16
Registriert: Di 1. Mär 2022, 22:39

Re: Eigenes Basic Makro geschrieben - In Calc Fehler:501

Beitrag von werdas34 » Mi 2. Mär 2022, 00:17

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.

werdas34
Beiträge: 16
Registriert: Di 1. Mär 2022, 22:39

Re: Eigenes Basic Makro geschrieben - In Calc Fehler:501

Beitrag von werdas34 » Mi 2. Mär 2022, 01:18

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.

mikele
* LO-Experte *
Beiträge: 1947
Registriert: Mo 1. Aug 2011, 20:51

Re: Eigenes Basic Makro geschrieben - In Calc Fehler:501

Beitrag von mikele » Mi 2. Mär 2022, 17:26

Hallo,
was willst du mit

Code: Alles auswählen

MySheet = Doc.CurrentController.ActiveSheet
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)
Gruß,
mikele

werdas34
Beiträge: 16
Registriert: Di 1. Mär 2022, 22:39

Re: Eigenes Basic Makro geschrieben - In Calc Fehler:501

Beitrag von werdas34 » Do 3. Mär 2022, 03:03

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

mikele
* LO-Experte *
Beiträge: 1947
Registriert: Mo 1. Aug 2011, 20:51

Re: Eigenes Basic Makro geschrieben - In Calc Fehler:501

Beitrag von mikele » Do 3. Mär 2022, 07:39

Hallo,
dafür benötigst du keine benutzerdefinierten Funktionen als Makro. Das lässt sich mit den üblichen Calc-Funktionen realsieren.
Gruß,
mikele

werdas34
Beiträge: 16
Registriert: Di 1. Mär 2022, 22:39

Re: Eigenes Basic Makro geschrieben - In Calc Fehler:501

Beitrag von werdas34 » Do 3. Mär 2022, 19:49

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

mikele
* LO-Experte *
Beiträge: 1947
Registriert: Mo 1. Aug 2011, 20:51

Re: Eigenes Basic Makro geschrieben - In Calc Fehler:501

Beitrag von mikele » Do 3. Mär 2022, 22:33

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.
Gruß,
mikele

mikele
* LO-Experte *
Beiträge: 1947
Registriert: Mo 1. Aug 2011, 20:51

Re: Eigenes Basic Makro geschrieben - In Calc Fehler:501

Beitrag von mikele » Do 3. Mär 2022, 23:15

Hallo,
ich habe mal ein bisschen spekuliert und gebastelt. Die Hilfsspalten könnten auch ausgeblendet werden.
Dateianhänge
verkauf fifo.ods
(10.51 KiB) 152-mal heruntergeladen
Gruß,
mikele


An alle, die das LibreOffice-Forum gern nutzen und unterstützen wollen:


Bitte helfen Sie uns mit 7 Euro pro Monat.
Durch Ihren Beitrag tragen Sie dazu bei, unsere laufenden Kosten für die kommenden Monate zu decken.
Unkompliziert per Kreditkarte oder PayPal.
Als ein kleines Dankeschön werden Sie im LO-Forum als SUPPORTER gekennzeichnet.



Antworten