Seite 1 von 1

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

Verfasst: Mi, 08.01.2025 15:28
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

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

Verfasst: Mi, 08.01.2025 15:51
von mikeleb
Hallo,
was heißt
was allerdings nicht funktioniert
Fehlermeldung?

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

Verfasst: Mi, 08.01.2025 16:14
von little fingers
Hallo mikeleb!

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

Gruss Ingo

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

Verfasst: Mi, 08.01.2025 17:04
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

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

Verfasst: Do, 09.01.2025 12:55
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

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

Verfasst: Do, 09.01.2025 17:23
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

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

Verfasst: Fr, 10.01.2025 08:43
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