So was wie Serienbriefe mit Calc?

Das Tabellenkalkulationsprogramm

Moderator: Moderatoren

Mr.Ioes
******
Beiträge: 524
Registriert: Fr, 12.03.2004 10:02

Beitrag von Mr.Ioes »

Hallo Stephan,

ich hab´ fast nach jedem Deiner Beiträge das Bedürfnis mich bei Dir zu bedanken, werde mir das jetzt aber weitgehend lassen, um nicht zu nerven. Es klappt jetzt anscheinden (jedenfalls wenn ich den Code schrittweise durchteste).

Du hast doch sicher auch eine Erklärung warum ich im Code-Editor (oder wie man das nennt) nicht mit dem Kontextmenü der rechten Maustaste kopieren und einfügen kann.

Gruß - Mr.Ioes
Mr.Ioes
******
Beiträge: 524
Registriert: Fr, 12.03.2004 10:02

Beitrag von Mr.Ioes »

Hallo Stephan,

also ich scheine es gerade für das erste Haus hingekriegt zu haben. Der Code (die Tabellen, insb. die Mieterliste habe ich zwischenzeitlich verändert):

Code: Alles auswählen

Sub Main
dim myDoc as object
myDoc = ThisComponent			
'myDoc ist eine Objektvariable
Dim datensatz%
For datensatz = 2 To 8	
	Wohnung = myDoc.getSheets().getByName("Mieterliste").getCellByPosition(0,datensatz-1)
	ohne = LTRIM(Wohnung.string)
	myDoc.Sheets.CopyByName("BK_EinzelAbrechnung",ohne,0)
	Formel_B4 = "=$Mieterliste.C" & datensatz
	Formel_C4 = "=$Mieterliste.A" & datensatz
	Formel_F4 = "=$Mieterliste.G" & datensatz
	Formel_B5 = "=$Mieterliste.F" & datensatz
	Formel_F5 = "=$Mieterliste.H" & datensatz
	Formel_B6 = "=$Mieterliste.E" & datensatz
	Formel_F7 = "=$Mieterliste.J" & datensatz
	Formel_F9 = "=$Mieterliste.L" & datensatz
	Formel_F13 = "=$Mieterliste.M" & datensatz
	Formel_C18 = "=$Mieterliste.N" & datensatz
	myDoc.getSheets().getByName(ohne).getCellRangeByName("$B$4").Formula = Formel_B4
	myDoc.getSheets().getByName(ohne).getCellRangeByName("$C$4").Formula = Formel_C4
	myDoc.getSheets().getByName(ohne).getCellRangeByName("$F$4").Formula = Formel_F4
	myDoc.getSheets().getByName(ohne).getCellRangeByName("$B$5").Formula = Formel_B5
	myDoc.getSheets().getByName(ohne).getCellRangeByName("$F$5").Formula = Formel_F5
	myDoc.getSheets().getByName(ohne).getCellRangeByName("$B$6").Formula = Formel_B6
	myDoc.getSheets().getByName(ohne).getCellRangeByName("$F$7").Formula = Formel_F7
	myDoc.getSheets().getByName(ohne).getCellRangeByName("$F$9").Formula = Formel_F9
	myDoc.getSheets().getByName(ohne).getCellRangeByName("$F$13").Formula = Formel_F13
	myDoc.getSheets().getByName(ohne).getCellRangeByName("$C$18").Formula = Formel_C18
Next datensatz								
End Sub
Kannst Du mir jetzt noch erklären:

1. Wie ich (am besten zusätzlich) den .pdf-Export der einezlnen Abrechnungen hinkriege und

2. diese neuen Dateien entweder in bereits vorhandene Verzeichnisse oder (noch besser) in zu erstellende Verzeichnisse schreiben kann (wenn gleichnamige Verzeichnisse noch nicht vorhanden sind).

3. Ich die neuen Tabellen statt an erster Stelle (0) nach hinten an der gerade letzte Stelle erstellen kann.

4. Schließlich bitte ich noch um einen Tipp, wie ich die gerade per Makro erstellten neuen Tabellen einfach überschreiben kann, insb. wenn ich eine nachträglich in der Vorlage geänderte Formatierung in alle Einzeltabellen übernehemen kann. Als ich probiert habe den Code einfach noch mal ausführen zu lassen kam eine Fehlermeldung.

Ich hoffe nicht unverschämt zu werden. Im Wesentlich wurde mir ja nun schon geholfen. :)

Gruß - Mr.Ioes
Stephan
********
Beiträge: 12369
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Beitrag von Stephan »

Du hast doch sicher auch eine Erklärung warum ich im Code-Editor (oder wie man das nennt) nicht mit dem Kontextmenü der rechten Maustaste kopieren und einfügen kann.
weil die Entwickler übersehen haben das zu implementieren? Ist bei mir genauso - verwende die üblichen Shortcuts STRG+C usw.
Schließlich bitte ich noch um einen Tipp, wie ich die gerade per Makro erstellten neuen Tabellen einfach überschreiben kann, insb. wenn ich eine nachträglich in der Vorlage geänderte Formatierung in alle Einzeltabellen übernehemen kann. Als ich probiert habe den Code einfach noch mal ausführen zu lassen kam eine Fehlermeldung.
Fehlermeldung kommt weil gleichnamige Blätter schon existieren. Da ich nicht weiß was sich zukünftig auf dem Ausgangsblatt alles ändern könnte würde ich eine universelle Lösung vorschlagen. Ergänze Deinen Code wie folgt:

Code: Alles auswählen

...
ohne = LTRIM(Wohnung.string)
If myDoc.Sheets.hasByName(ohne) Then
	mydoc.Sheets.removebyname(ohne)
end if 
myDoc.Sheets.CopyByName("BK_EinzelAbrechnung",ohne,0)
... 
Du kannst diesen Code nun immer verwenden (also entweder erstmalig oder wenn Du Änderungen vorgenommen hast) das Prinzip ist nur das geprüft wird ob das Blatt mit dem speziellen Namen schon existiert wenn ja wird es gelöscht und gleich wieder eingefügt. Vielleicht erscheint Dir das nicht so elegant, aber es ist sichergestellt das der Code immer funktioniert egal welche Änderungen Du auf dem Ausgangsblatt vornimmst.

Ich die neuen Tabellen statt an erster Stelle (0) nach hinten an der gerade letzte Stelle erstellen kann.
Ändere diese Zeile:

Code: Alles auswählen

myDoc.Sheets.CopyByName("BK_EinzelAbrechnung",ohne,0)
in:

Code: Alles auswählen

myDoc.Sheets.CopyByName("BK_EinzelAbrechnung",ohne,myDoc.Sheets.count-1)
myDoc.Sheets.count entspricht der Anzahl der Tabellenblätter, da der Code jedoch die Position nach Index bestimmt, und dieser bei 0 beginnt, brauchst Du im Code myDoc.Sheets.count-1

1. Wie ich (am besten zusätzlich) den .pdf-Export der einezlnen Abrechnungen hinkriege und

2. diese neuen Dateien entweder in bereits vorhandene Verzeichnisse oder (noch besser) in zu erstellende Verzeichnisse schreiben kann (wenn gleichnamige Verzeichnisse noch nicht vorhanden sind).
folgende Fragen:
es werden beispielsweise 8 neue Blätter erzeugt und zu den vorhandenen in der Ausgangsdatei hinzugefügt, ob das beibehalten werden soll ist mir egal - aber die 8 Blätter sollen auch in andere Dateien (damit sie gespeichert werden können)
Sollen das 8 Dateien mit je einem Tabellenblatt sein oder eine Datei mit 8 Tabellenblättern?
Steht der Speicherort wo die neuen Verzeichnisse angelegt werden sollen in irgendeiner Beziehung zum Speicherort des Ausgangsdokuments?
In Abhängigkeit wie die Dateien beschaffen sein sollen (1.Frage) können diese in einem oder mehreren Verzeichnissen gespeichert werden - was kannst Du dazu sagen?
Sollen die neuen Dateien nur gespeichert oder auch geöffnet werden (aber Vorsicht bei 20 Mietern gehen dann u.U. im Prinzip 20 Fenster auf)? Wenn geöffnet: welches Fenster soll den Fokus haben?
Müssen Druckbereiche per Code gesetzt werden? Was ist mit der Gestaltung von Kopf- und Fußzeilen bei PDF-Export? Wo sollen die PDF-Dateien gespeichert werden?

soweit, zunächst



Gruß
Stephan
Mr.Ioes
******
Beiträge: 524
Registriert: Fr, 12.03.2004 10:02

Beitrag von Mr.Ioes »

Stephan hat geschrieben:
1. Wie ich (am besten zusätzlich) den .pdf-Export der einezlnen Abrechnungen hinkriege und

2. diese neuen Dateien entweder in bereits vorhandene Verzeichnisse oder (noch besser) in zu erstellende Verzeichnisse schreiben kann (wenn gleichnamige Verzeichnisse noch nicht vorhanden sind).
folgende Fragen:
es werden beispielsweise 8 neue Blätter erzeugt und zu den vorhandenen in der Ausgangsdatei hinzugefügt, ob das beibehalten werden soll ist mir egal - aber die 8 Blätter sollen auch in andere Dateien (damit sie gespeichert werden können)
Sollen das 8 Dateien mit je einem Tabellenblatt sein oder eine Datei mit 8 Tabellenblättern?
Steht der Speicherort wo die neuen Verzeichnisse angelegt werden sollen in irgendeiner Beziehung zum Speicherort des Ausgangsdokuments?
In Abhängigkeit wie die Dateien beschaffen sein sollen (1.Frage) können diese in einem oder mehreren Verzeichnissen gespeichert werden - was kannst Du dazu sagen?
Sollen die neuen Dateien nur gespeichert oder auch geöffnet werden (aber Vorsicht bei 20 Mietern gehen dann u.U. im Prinzip 20 Fenster auf)? Wenn geöffnet: welches Fenster soll den Fokus haben?
Müssen Druckbereiche per Code gesetzt werden? Was ist mit der Gestaltung von Kopf- und Fußzeilen bei PDF-Export? Wo sollen die PDF-Dateien gespeichert werden?
Also am liebsten wäre mir für die konkrete Aufgabe, wenn von den neu erstellten Tabellenblättern der Ausgangs-Calc-Tabelle .pdf-Exporte jeweils als eigenständige (einseitige) Datei einfach in dasselbe Verzeichnis geschrieben werden. Die Einzelbabrechnungen sollten denselben Druckbereich der Vorlage haben und zwar (in diesem Fall) ohne Kopf- oder Fußzeile. Der Name der pdf-Exporte sollte (bis natürlich auf die Dateiendung.pdf) identisch mit dem Namen der Einzelabrechnungstabelle sein, nämlich der Wohnungsnummer die ursprünglich in der Tabelle "Mieterliste" in Spalte A steht.

Für zukünftige Arbeiten wäre es aber auch sehr nett, wenn ich wüßte wie ich diese .pdf-Exporte in andere ggf. anzulegende Verzeichnisse schreiben kann. Beipsiel: Ausgangsdatei in .../2003/Gesamtuebersicht und die .pdf-Exporte in .../2003/2951 und .../2003/2952 u.s.w.

Daran die exprotierten neuen .pdf-Dateien direkt zu öffnen habe ich noch gar nicht gedacht und das ist für das konkrete Projekt auch nicht gewünscht.
Stephan hat geschrieben:
Ich die neuen Tabellen statt an erster Stelle (0) nach hinten an der gerade letzte Stelle erstellen kann.
Ändere diese Zeile:

Code: Alles auswählen

myDoc.Sheets.CopyByName("BK_EinzelAbrechnung",ohne,0)
in:

Code: Alles auswählen

myDoc.Sheets.CopyByName("BK_EinzelAbrechnung",ohne,myDoc.Sheets.count-1)
myDoc.Sheets.count entspricht der Anzahl der Tabellenblätter, da der Code jedoch die Position nach Index bestimmt, und dieser bei 0 beginnt, brauchst Du im Code myDoc.Sheets.count-1
Ich hab´s noch gar nicht ausprobiert, frage aber trotzdem schon mal nach: Werden die neuen Tabellenblätter jetzt an zweiter oder letzter Stelle eingefügt?

Gruß - Mr.Ioes
Mr.Ioes
******
Beiträge: 524
Registriert: Fr, 12.03.2004 10:02

Beitrag von Mr.Ioes »

Hallo Stephan,

nach dem ersten lesen muss ich erstmal gestehen, dass mir an einem PC auf den ich meistens Zugriff habe Adobe Arcrobat 5 installiert ist (also auch den Distiller). :oops:

Also mit dem oben Beschriebenen Code konnte ich alle Tabellenblätter für das Haus M*-109 erstellen. Für M*-111 muss ich noch eine leicht abgewandelte Vorlage erstellen und den Code anpassen, was aber kein Problem sein dürfte. Tja und dann kommen die anderen Häuser für die ich die jeweiligen Tabellen(-vorlagen) erst noch zusammenstellen muss (z.Teil fehlen mir da auch noch Daten).

Gruß und Dank - Mr.Ioes
Mr.Ioes
******
Beiträge: 524
Registriert: Fr, 12.03.2004 10:02

Beitrag von Mr.Ioes »

Hallo Stephan,

also erstmal möchte ich melden, dass Deine Anweisungen zum Löschen, bzw. überschreiben der Einzelabrechnungsblätter und die Erstellung an letzter Stelle prima klappen.

An den .pdf-Export traue ich mich irgendwie noch nicht ran, weil ich zu wenig von dem verstehe was zu tun ist.

Gruß - Mr.Ioes
Antworten