BITTE helfen Sie uns HEUTE mit einer SPENDE
Helfen Sie das OpenOffice Forum zu erhalten!

DANKE >><< DANKE

> KEINE WERBUNG FÜR REGISTRIERTE BENUTZER!<
Ihre Spende wird für die Deckung der laufenden Kosten sowie den Erhalt und Ausbau 🌱 des OpenOffice Forums verwendet.
🤗 Als Dankeschön werden Sie im Forum als OO-SUPPORTER gekennzeichnet. 🤗

Calc-Makro Bastelhilfe

Alles zur Programmierung im OpenOffice.org
Xaiorn
Beiträge: 45
Registriert: Fr 22. Apr 2022, 19:17

Calc-Makro Bastelhilfe

Beitrag von Xaiorn » Fr 22. Apr 2022, 19:40

Hi zusammen,

bei einem Makro-Problem bin ich an meine OO-Grenzen gestoßen (habe eigentlich nur Excel-Makro Erfahrung und auch davon wenig). Es geht um Folgendes:

In einer recht umfangreichen Tabelle möchte ich "per Knopfdruck" einzelne Felder aus variablen anderen Tabellen (Name variabel, Blatt und Feld nicht) übernehmen. Dafür habe ich eine schicke Formel, ich brauche aber den Wert (Zahl, bzw. Text). Workaround ist die Formel in das entsprechende Feld setzen, Feld kopieren und ins selbe Feld Werte einfügen.
Per Makroaufnahme habe ich das für ein Feld getestet und es klappt auch, siehe Anhang (leider ein Bild, txt geht nicht...).

ABER: Wenn ich das mehrmals hintereinander mache für verschiede Felder, klappt es nicht mehr. Davon abgesehen ist das runterkopieren nicht möglich. In der Tabelle habe ich etwa 500 Felder (wenn nicht mehr), die aktualisiert werden sollen. Den riesen Makroblock möchte ich aber nicht so oft abtippen, zumal es wie gesagt bei mehr als einem Feld nicht mehr klappt.

Habt ihr ein besseres Makro, um in mehrere einzelne Felder eine Formel zu setzen, das Feld zu kopieren und die Werte wieder einzufügen? Vorzugsweise etwas, das man relativ einfach runterkopieren kann.

Dank im Voraus,
Xaiorn
Makroversuch für EIN Feld.
Makroversuch für EIN Feld.
Makro.png (46.31 KiB) 7483 mal betrachtet
Gruß,
Xaiorn

craig
Beiträge: 318
Registriert: Sa 14. Mai 2016, 12:36

Re: Calc-Makro Bastelhilfe

Beitrag von craig » Fr 22. Apr 2022, 20:32

Hallo Xaiorn,

Dein Beispiel ist eine Aufzeichnung des Makrorekorders, welcher
nur sogenannte Dispatch-Commands aufzeichnet.
Diese Commands sind im Grunde nichts weiter als eine Aufzeichnung
von Befehlen welche man mit der Tastatur oder Maus eingibt.
Ab einem gewissen Punkt versteht der Rekorder nur noch Bahnhof.
Ähnlich des Rekorders bei MSO.
Die Dispatch-Commands zu verteufeln wäre jetzt aber falsch, weil es Situationen gibt,
wo man die objektorientierte Programmiersprache mit den Commands mischen kann.

Deshalb wie folgt:
Während man unter MSO mit VBA und deren API programmiert, so programmiert
man unter LibreOffice und OpenOffice mit Starbasic und deren API.
Alle 3 basisieren auf dem guten alten Basic, aber wenn es an Eingemachte geht,
dann unterscheidet sich MSO erheblich von LO und AOO.
Mittlerweile bewegen sich auch LO und AOO immer mehr auseinander,
so kann es sein, dass ein Code von LO verarbeitet werden kann, aber unter AOO zu
Laufzeitfehlern kommt und umgekehrt.
Das liegt u.a. daran, dass sich LO schneller weiterentwickelt als AOO und somit ändert sich auch die API. Nun zu Deinem Problem:
Ich kann zwar ein wenig aus den Commands herauslesen, aber
für eine Starbasic-Programmierung reicht dies nicht, zumal in einem Starbasic-
Code ganz andere Methoden, Eigenschaften, usw. zur Verfügung stehen.

Würdest Du bitte für Dein Anliegen eine Beispiel-Tabelle hier hochladen
aus der hervorgeht, was wo an welcher Stelle genau passieren soll.
Gruß

Craig

Nie die Sicherungskopie vergessen!

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

Xaiorn
Beiträge: 45
Registriert: Fr 22. Apr 2022, 19:17

Re: Calc-Makro Bastelhilfe

Beitrag von Xaiorn » Fr 22. Apr 2022, 21:11

Na das ging fix :)

Eine Beispieldatei ist etwas schwierig aber ich versuch's.

Die Formel in C3 soll per Makro in die gelb markierten Felder A1, A3, A6 und A11 eingefügt werden, besagte Felder kopiert und als Werte in sich selbst eingefügt werden.
Also Formel in A1 einsetzten, A1 kopieren, In A1 Werte einfügen. Das Gleiche mit A3, A6, A11.

Als Ergebnis möchte ich die vier Felder in Spalte A in Tabelle 1 genauso haben, wie die entsprechenden Felder in Spalte A in Tabelle 2.

Später ist es halt nur eine komplett andere Datei, nicht nur eine andere Tabelle.

Ist das so verständlicher?
Dateianhänge
Makrotest.ods
(9.32 KiB) 195-mal heruntergeladen
Gruß,
Xaiorn

craig
Beiträge: 318
Registriert: Sa 14. Mai 2016, 12:36

Re: Calc-Makro Bastelhilfe

Beitrag von craig » Fr 22. Apr 2022, 23:51

Hallo Xaiorn,

teste mal:
Makrotest v2.ods
(14.41 KiB) 230-mal heruntergeladen
Im Code habe ich alle Vorgänge kommentiert.
Gruß

Craig

Nie die Sicherungskopie vergessen!

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

Xaiorn
Beiträge: 45
Registriert: Fr 22. Apr 2022, 19:17

Re: Calc-Makro Bastelhilfe

Beitrag von Xaiorn » Sa 23. Apr 2022, 12:37

Hi Craig,

von der Funktion her ist es genau, was ich meine. Allerdings geht es mir gerade darum, nicht jede Zelle einzeln anwählen zu müssen. Das Makro soll mit einem Klick in alle gelben Felder die Werte übernehmen.
Dabei geht es nicht unbedingt darum, dass die Felder gelb sind, es sind halt einzelne und immer gleiche Felder über die ganze Tabelle verteilt. (Tatsächlich sind die Felder gelb, also wenn das auch nach Farbe geht, wäre das noch besser. Sinngemäß etwa: "Übertrage in die gelben Felder dieser Tabelle alle Daten aus der Quelle an der selben Stelle.").

Da die Quelle der Daten (C1) variabel ist (und für Unwissende auszufüllen), möchte ich das schon auf ein Feld bezogen lassen.

Die Einschränkungen im PopUp finde ich generell gut, für dieses Problem aber unnötig. Wie gesagt, sollen vorher keine Felder markiert werden, sondern die betreffenden Felder vom Makro selbstständig gefüllt werden.
Gruß,
Xaiorn

mikele
Beiträge: 771
Registriert: Sa 23. Jul 2011, 22:09

Re: Calc-Makro Bastelhilfe

Beitrag von mikele » Sa 23. Apr 2022, 13:11

Hallo,
verstehe ich es richtig, dass es bei der Formel immer um so eine Indirekt()-Konstruktion geht, dass also auf dem aktuellen Tabellenblatt die Werte/Inhalte eines anderen Tabellenblattes (dessen Name in C1 steht) übernommen werden sollen?
Gruß,
mikele

Xaiorn
Beiträge: 45
Registriert: Fr 22. Apr 2022, 19:17

Re: Calc-Makro Bastelhilfe

Beitrag von Xaiorn » Sa 23. Apr 2022, 13:16

Ja, genau.
Aber es sollen halt nur die Werte, die diese Formel liefert, in die Felder übernommen werden. Und das für recht viele Felder, verteilt über die ganze Tabelle.
Gruß,
Xaiorn

mikele
Beiträge: 771
Registriert: Sa 23. Jul 2011, 22:09

Re: Calc-Makro Bastelhilfe

Beitrag von mikele » Sa 23. Apr 2022, 13:46

Hallo,
dann sollte das folgenden Makro deinem Wunsch nahe kommen:

Code: Alles auswählen

Sub Main
	aZellen=Array("A1:A3", "A6", "A11:B14")
	oDoc=ThisComponent
	oZiel=oDoc.Sheets.getByName("Tabelle1")
	oQuelle=oDoc.Sheets.getByName(oZiel.getCellRangeByName("C1").String)
	For i=0 to ubound(aZellen)
		oZiel.getCellRangeByName(aZellen(i)).setDataArray(oQuelle.getCellRangeByName(aZellen(i)).getDataArray)
	Next
End Sub
In der ersten Zeile trägst die gewünschten Zellen bzw. Zellbereiche ein, deren Werte kopiert werden sollen.
Bei, wie angedeutet, ca. 500 Zellen ein ganz schöner Aufwand. Hast du sie alle manuell gelb markiert? Gibt es da irgendeine Regel?
Gruß,
mikele

Xaiorn
Beiträge: 45
Registriert: Fr 22. Apr 2022, 19:17

Re: Calc-Makro Bastelhilfe

Beitrag von Xaiorn » Sa 23. Apr 2022, 14:09

Hi mikele,

ja, genau so, das ist super! Besonders, weil es schön kurz und einfach anzupassen ist.

Ein Problem hab ich damit: die Quelle der Daten ist nicht die gleiche Datei, sondern eine andere. Wenn ich den Quellbezug (C1) entsprechend ändere, spuckt das Makro einen Fehler aus. Wie ändere ich das auf eine andere Datei (im gleichen Ordner)?

Und geht das auch Blatt-übergreifend? Meine Tabelle hat mehrere Blätter, alle mit zu übertragenden Daten, immer aus derselben Quelle und nach demselben Prinzip.

Zu deiner Frage: ja, das war alles manuell und nein, es folgt keiner Regel. Das sind die Felder, die der Nutzer bearbeiten darf, ohne etwas zu löschen - und ja, der Rest ist natürlich geschützt, aber ich versuche Anwenderfreundlich zu bleiben, daher so besser zu sehen.
Da ich gelegentlich die Tabelle aktualisiere, sollen meine Bekannten, die sie nutzen, aber nicht alles neu eintragen müssen, daher die Werteübernahme per Knopfdruck.
Gruß,
Xaiorn

mikele
Beiträge: 771
Registriert: Sa 23. Jul 2011, 22:09

Re: Calc-Makro Bastelhilfe

Beitrag von mikele » So 24. Apr 2022, 11:47

Hallo,
Und geht das auch Blatt-übergreifend? Meine Tabelle hat mehrere Blätter, alle mit zu übertragenden Daten, immer aus derselben Quelle und nach demselben Prinzip.
Das erfordert ein paar Erläuterungen.
Wäre es da nicht einfacher eine Kopie der Quelldatei zu nehmen (wenn sie, wie angedeutet den identischen Aufbau hat)?
Gruß,
mikele

Antworten