[gelöst]nur dann, einen bestimmten Bereich drucken, wenn in einer Zelle ein X

Programmierung unter AOO/LO (StarBasic, Python, Java, ...)

Moderator: Moderatoren

little fingers
***
Beiträge: 78
Registriert: Fr, 12.05.2017 15:31

[gelöst]nur dann, einen bestimmten Bereich drucken, wenn in einer Zelle ein X

Beitrag von little fingers »

Hallo Zusammen!

Frohes, neues Jahr wünsche ich Euch allen!

Ich würde gerne einen bestimmten Bereich in einer bestimmten Tabelle ausdrucken wollen, wenn in einer bestimmten Zelle ein X eingetragen ist.

z.B.:
Tabellenname: Ab_Schein
Position: Tabelle 44
Zelle, wo X eingetragen: I11
Bereich, der gedruckt werden soll: A10:H72

Ich hatte zwar ein Makro gefunden, was allerdings nicht funktioniert:

Code: Alles auswählen

Sub PrintIfXInCell()
    Dim oDoc As Object
    Dim oSheet As Object
    Dim oRange As Object
    Dim cell As Object
    
    ' Aktuelles Dokument und Blatt abrufen
    oDoc = ThisComponent
    oSheet = oDoc.Sheets(43) ' 0 für das erste Blatt
    
    ' Zelle I11 prüfen
    cell = oSheet.getCellByPosition(10, 8) ' I11 entspricht Position (0, 0)
    
    ' Wenn in I11 ein "x" steht
    If cell.String = "X" Then
        ' Bereich A10:H72 zum Drucken festlegen
        oRange = oSheet.getCellRangeByName("A10:H72")
        
        ' Druckbereich festlegen
        oDoc.PrintRanges.Clear() ' Vorherige Druckbereiche löschen
        oDoc.PrintRanges.add(oRange) ' Neuen Druckbereich hinzufügen
        
        ' Drucken
        oDoc.print()
    End If
End Sub
wäre schön, wenn ich da Hilfe bekommen könnte..
Schon einmal Danke, für Interesse

Gruss Ingo
Zuletzt geändert von little fingers am Fr, 10.01.2025 08:49, insgesamt 1-mal geändert.
mikeleb
*******
Beiträge: 1365
Registriert: Fr, 09.12.2011 16:50

Re: nur dann, einen bestimmten Bereich drucken, wenn in einer Zelle ein X

Beitrag von mikeleb »

Hallo,
was heißt
was allerdings nicht funktioniert
Fehlermeldung?
Gruß,
mikeleb
little fingers
***
Beiträge: 78
Registriert: Fr, 12.05.2017 15:31

Re: nur dann, einen bestimmten Bereich drucken, wenn in einer Zelle ein X

Beitrag von little fingers »

Hallo mikeleb!

Die Fehlermeldung lautet:
BASIC-Laufzeitfehler.
Eigenschaft oder Methode nicht gefunden: PrintRanges.
Vielen Dank, nochmal!

Gruss Ingo
F3K Total
********
Beiträge: 3717
Registriert: Mo, 28.02.2011 17:49

Re: nur dann, einen bestimmten Bereich drucken, wenn in einer Zelle ein X

Beitrag von F3K Total »

Moin,
weiß nicht woher das Makro kommt, es funktioniert nicht, ThisComponent.PrintRanges gibt es in AOO/LO nicht.
Folgendes Makro sollte funktionieren, aktuell für Tabellenblatt 1, kann hier geändert werden:

Code: Alles auswählen

oSheet = oDoc.Sheets(0) ' 0 für das erste Blatt

Code: Alles auswählen

Sub PrintIfXInCell(optional event) 'event ist die Zelle in der etwas geändert wird
    Dim oDoc As Object
    Dim oSheet As Object
    Dim oRange As Object
    Dim cell As Object
    DIM oPrintareas(0) as new com.sun.star.table.CellRangeAddress
    DIM printProp(0) as new com.sun.star.beans.PropertyValue
    printProp(0).name = "Wait"
    printProp(0).Value = true
    ' Aktuelles Dokument und Blatt abrufen
    oDoc = ThisComponent
    oSheet = oDoc.Sheets(0) ' 0 für das erste Blatt
    ' Zelle I11 prüfen
    oCell = oSheet.getCellByPosition(8,10) ' I11 entspricht Position (8, 10)
    if ocell.queryintersection(event.RangeAddress).Count = 1 Then 'Es wurde in Zelle I11 etwas geändert
    ' Wenn in I11 ein "X" steht
    If oCell.String = "X" Then
        ' Bereich A10:H72 zum Drucken festlegen
        oRange = oSheet.getCellRangeByName("A10:H72")
        oPrintareas(0)= oRange.Rangeaddress
        ' Druckbereich festlegen
        oSheet.setPrintareas(oPrintareas)
        ' Drucken
        oDoc.print(printProp)
    else
 ' Wenn in I11 kein "X" steht 
        oSheet.setPrintareas(oPrintareas)'setze einen leeren Druckbereich
    End If
    endif
End Sub
Anbei eine Beispieldatei, in der beschrieben ist, wie das Makro eingebunden werden muss, damit nach dem Eintragen eines großgeschiebenen X der Druck sofort beginnt.

Gruß R
Dateianhänge
Drucken_per_Makro.ods
(27.26 KiB) 11-mal heruntergeladen
little fingers
***
Beiträge: 78
Registriert: Fr, 12.05.2017 15:31

Re: nur dann, einen bestimmten Bereich drucken, wenn in einer Zelle ein X

Beitrag von little fingers »

Hallo F3K Total!

Vielen, lieben Dank schon einmal dafür, dass Du mir diese Lösung gegeben hast, die wie beschrieben funktioniert!!!

Gibt es aber die Möglichkeit, per Mouseclick, ein Makro zu starten und es prüft, ob in der Tabelle 43, Zelle I11 per Formel ein X eingetragen ist,
dann den Bereich A10:H72 ausdruckt, dann prüft, ob in der Tabelle 43, Zelle I75 per Formel ein X eingetragen ist,
dann den Bereich A74:H136 ausdruckt?

Das würde mir die Arbeit total erleichtern!!!

Liebe Grüsse Ingo
F3K Total
********
Beiträge: 3717
Registriert: Mo, 28.02.2011 17:49

Re: nur dann, einen bestimmten Bereich drucken, wenn in einer Zelle ein X

Beitrag von F3K Total »

Moin,
weil ich heute gute Laune habe:

Code: Alles auswählen

Sub PrintIfXInCell
    Dim oDoc As Object
    Dim oSheet As Object
    Dim oRange As Object
    Dim cell As Object
    DIM oPrintareas(0) as new com.sun.star.table.CellRangeAddress
    DIM printProp(0) as new com.sun.star.beans.PropertyValue
    printProp(0).name = "Wait"
    printProp(0).Value = true
    ' Aktuelles Dokument und Blatt abrufen
    oDoc = ThisComponent
    oSheet = oDoc.Sheets(42) ' 0 für das erste Blatt
    ' Zelle I11 prüfen
    oCell = oSheet.getCellByPosition(8,10) ' I11 entspricht Position (8, 10)
    ' Wenn in I11 ein "X" steht
    If oCell.String = "X" Then
        ' Bereich A10:H72 zum Drucken festlegen
        oRange = oSheet.getCellRangeByName("A10:H72")
        oPrintareas(0)= oRange.Rangeaddress
        ' Druckbereich festlegen
        oSheet.setPrintareas(oPrintareas)
        ' Drucken
        oDoc.print(printProp)
    else
 ' Wenn in I11 kein "X" steht 
        oSheet.setPrintareas(oPrintareas)'setze einen leeren Druckbereich
    End If
    oCell = oSheet.getCellByPosition(8,74) ' I75 entspricht Position (8, 74)
    
    ' Wenn in I75 ein "X" steht
    If oCell.String = "X" Then
        ' Bereich A10:H72 zum Drucken festlegen
        oRange = oSheet.getCellRangeByName("A74:H136")
        oPrintareas(0)= oRange.Rangeaddress
        ' Druckbereich festlegen
        oSheet.setPrintareas(oPrintareas)
        ' Drucken
        oDoc.print(printProp)
    else
 ' Wenn in I75 kein "X" steht 
        oSheet.setPrintareas(oPrintareas)'setze einen leeren Druckbereich
    End If
End Sub
Beispiel anbei, die nächste Variante darfst du dir selber aus dem Hirn drücken!
EDIT: 10.01.2025 14:20, Xray oCell herausgenommen.
Gruß R
Dateianhänge
Drucken_per_Makro_V2.ods
(13.18 KiB) 9-mal heruntergeladen
Zuletzt geändert von F3K Total am Fr, 10.01.2025 14:18, insgesamt 2-mal geändert.
little fingers
***
Beiträge: 78
Registriert: Fr, 12.05.2017 15:31

Re: nur dann, einen bestimmten Bereich drucken, wenn in einer Zelle ein X

Beitrag von little fingers »

@F3k Total
Vielen, liben Dank dafür!!!!!!!
Es klappt Super!!!

Ich habe nach der Fehlermeldung den Part

Code: Alles auswählen

xray oCell
entfernt und jetzt macht das Makro, was es soll!!

Supi und Danke dafür.....Du hast mir sehr geholfen!!!!!!


Liebe Grüße

Ingo
Antworten