Seriendruck mit bedingt markierten Zellen

Das Tabellenkalkulationsprogramm

Moderator: Moderatoren

AA62
Beiträge: 3
Registriert: Mi, 08.05.2013 15:26

Seriendruck mit bedingt markierten Zellen

Beitrag von AA62 »

Hallo,

ich stehe gerade vor einem Problem, bei dem ich leider keinen Lösungsansatz habe!
Gegeben: Dienstplan als Tabelle. Der Dienstplan enthält alle Dienstzeiten für alle Personen auf einen Blick.
Dieser Plan soll nun für alle KollegInnen ausgedruckt werden, und zwar so, dass bei jedem Ausdruck für die entsprechende Person genau ihr Name hervorgehoben ist (z. B. durch eine Hintergrundfarbe der Zelle). Das würde das lästige Suchen und Markieren des eigenen Namens ersetzen.
Doch ... wie? Ich dachte irgendwie an eine Seriendruckfunktion mit bedingter Formatierung, kann aber nichts finden.

Hat jemand eine Idee??

Vielen Dank im Voraus!
F3K Total
********
Beiträge: 3723
Registriert: Mo, 28.02.2011 17:49

Re: Seriendruck mit bedingt markierten Zellen

Beitrag von F3K Total »

Hallo,
dass es eine Funktion dafür gibt, wäre mir neu, aber mit einem kurzen Makro ist das kein Problem, siehe auch Beispieldatei unten:

Code: Alles auswählen

Sub s_Print
    dim printprops()
    odoc = thiscomponent
    osheet = odoc.sheets.getbyname("Tabelle1")
    oRange = osheet.getcellrangebyname("A2:AF9") 'Bereich in dem die Farbe geändert werden soll, es wird die Hintergrundfarbe der obersten Zeile verwendet.
    ncolor = oRange.getcellbyposition(0,0).cellbackcolor
    ncolumns = oRange.columns.count -1
    nrows = oRange.rows.count -1
    for i = 0 to nrows
        oRangecurrentPerson = orange.getcellrangebyposition(0,i,ncolumns,i)
        oRangecurrentPerson.cellbackcolor = ncolor
        odoc.print(printprops())
        wait 200
        oRangecurrentPerson.cellbackcolor = -1
    next i
    oRangecurrentPerson = orange.getcellrangebyposition(0,0,ncolumns,0)
    oRangecurrentPerson.cellbackcolor = ncolor 'Farbe wieder in die erste Zeile
End Sub
In der Beispieldatei einmal auf den Knopf drücken.

Viel Erfolg, Gruß R
Dateianhänge
Dienstplan_drucken.ods
(12.85 KiB) 31-mal heruntergeladen
AA62
Beiträge: 3
Registriert: Mi, 08.05.2013 15:26

Re: Seriendruck mit bedingt markierten Zellen

Beitrag von AA62 »

Hallo R,

danke für diese qualifizierte Antwort! Da tun sich Möglichkeiten auf ... allerdings bin ich mit Makroprogrammierung noch nicht vertraut.
Das Makro funktioniert hervorragend, aber ich habe ein paar Fragen:
Wo wird denn festgelegt, dass der Button in der Tabelle erscheint (ich möchte ihn dort raushaben und habe ihn mir in die Menüleiste gepackt)?
Kann man den Druck dunkel prozessieren? Sicher wird man das können, aber mir ist gar nicht klar, wo man diesen Eigenschaft (Dialog/dunkel) überhaupt angibt.

Als "Programm-Makro-Anfänger" habe ich noch die Bitte: Kannst Du mal die Beispieldatei anschauen, die erklärt die Anforderung etwas besser als ich es offensichtlich im Text gemacht habe. In den Zellen stehen die Namen der Diensthabenden (in der Realität natürlich eine wesentlich größere Tabelle!) und diese Zellen sollen jeweils für den Druck-Adressaten markiert werden.

Der Programmiersprung vom vorgeschlagenen Makro zum dem, das ich konkret brauche, ist mir noch etwas zu hoch ...

Vielen Dank!
Dateianhänge
Dienstplan_Markierung.ods
Beispieldatei für die Anforderung
(12.59 KiB) 25-mal heruntergeladen
F3K Total
********
Beiträge: 3723
Registriert: Mo, 28.02.2011 17:49

Re: Seriendruck mit bedingt markierten Zellen

Beitrag von F3K Total »

So,
habe mir die Mühe gemacht:

Code: Alles auswählen

Sub s_Print
    dim printprops()
    odoc = thiscomponent
    odoc.lockcontrollers
    osheet = odoc.sheets.getbyname("Tabelle1")
    oRangePlan = osheet.getcellrangebyname("B3:E6") 'Bereich in dem die Farbe geändert werden soll.
    oRangePersonen = osheet.getcellrangebyname("F3:F10") 'Bereich in dem alle Personen eingetragen sind, es wird die Hintergrundfarbe der obersten Zeile verwendet.
    ncolor = oRangePersonen.getcellbyposition(0,0).cellbackcolor
    ncolumns = oRangePlan.columns.count -1
    nrows = oRangePlan.rows.count -1
    nPersons = oRangePersonen.rows.count
    for h = 0 to nPersons -1
        sName = oRangePersonen.getcellbyposition(0,h).string
        for i = 0 to ncolumns
            for k = 0 to nrows
                ocurrentCell = oRangePlan.getcellbyposition(i,k)
                if ocurrentCell.string = sName then ocurrentCell.cellbackcolor = ncolor
            next k
        next i
        odoc.print(printprops())
        wait 200
        oRangePlan.cellbackcolor = -1
    next h
    odoc.unlockcontrollers
    msgbox ("Es wurden "+nPersons +" Pläne zum Drucker geschickt",64,"Fertig")
End Sub
Es müssen nur noch die beiden Bereiche angepasst werden.
Denke beim Originaldokument daran den Druckbereich richtig zu setzen.
Es gibt auch ein neues Menü "Druckmakro".
Gruß R
Dateianhänge
Dienstplan_Markierung.ods
(13.92 KiB) 36-mal heruntergeladen
AA62
Beiträge: 3
Registriert: Mi, 08.05.2013 15:26

Re: Seriendruck mit bedingt markierten Zellen

Beitrag von AA62 »

Hallo R,

Du hast Dir wirklich Mühe gemacht - und das Makro tut genau, was es soll!

Vielen Dank!
Antworten