❤️ 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. 🌱
>> 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
Eigenes Basic Makro geschrieben - In Calc Fehler:501
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
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
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.
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
Craig
Nie die Sicherungskopie vergessen!
════════════════════════════════════════════════
WIN 10 Pro 64-Bit • LO 7.4.5.1 (x64) • AOO 4.1.8
Re: Eigenes Basic Makro geschrieben - In Calc Fehler:501
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.
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
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
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.
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.
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
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)
Re: Eigenes Basic Makro geschrieben - In Calc Fehler:501
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)
was willst du mit
Code: Alles auswählen
MySheet = Doc.CurrentController.ActiveSheet
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
mikele
Re: Eigenes Basic Makro geschrieben - In Calc Fehler:501
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
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
Hallo,
dafür benötigst du keine benutzerdefinierten Funktionen als Makro. Das lässt sich mit den üblichen Calc-Funktionen realsieren.
dafür benötigst du keine benutzerdefinierten Funktionen als Makro. Das lässt sich mit den üblichen Calc-Funktionen realsieren.
Gruß,
mikele
mikele
Re: Eigenes Basic Makro geschrieben - In Calc Fehler:501
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
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
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.
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
Re: Eigenes Basic Makro geschrieben - In Calc Fehler:501
Hallo,
ich habe mal ein bisschen spekuliert und gebastelt. Die Hilfsspalten könnten auch ausgeblendet werden.
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
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.