Drucken erst nach Befüllung bestimmter Zellen

Das Tabellenkalkulationsprogramm

Moderator: Moderatoren

tobago
*
Beiträge: 14
Registriert: Fr, 24.09.2010 12:24

Drucken erst nach Befüllung bestimmter Zellen

Beitrag von tobago »

Liebe Spezialisten,
habe ein Calcformular gebastelt indem der Anwender in einem Bemerkungsfeld etwas reinschreiben muss und erst wenn Er/Sie dort was hinterlegt hat, erst dann soll der Druckbutton aktivierbar sein, vorher nicht.
Also, das Bemerkungsfeld ist ein Mussfeld und darf erst nach Befüllung desgleichen soll das komplette Formular druckbar sein.
Es sind ca. 4 Zellen in einem 4seitigen Formular, die befüllt werden sollen und erst dann darf gedruckt werden.
Vielleicht gibt es eine einfache Lösung ohne Makro.
Vielen Dank für die Aufmerksamkeit und auf Nachricht freut sich,
Tobago
tobago
*
Beiträge: 14
Registriert: Fr, 24.09.2010 12:24

Mussfelder erst bei Befüllung druckbar

Beitrag von tobago »

Liebe Spezialisten,
bei einem gesperrten Tabellenblatt darf erst nach Befüllung von 4 verschiedenen PflichtZellen gedruckt werden.
(Pflichtfelder) 4 Stück an der Zahl.

Wenn der Anwender versucht die Tabelle zu drucken, ohne das diese "Pflichtzellen" befüllt sind, soll dem Anwender ein Hinweis erscheinen, das die Pflichtfelder noch nicht beschrieben wurden.
Wie geht so etwas?
Vielen Dank für die Aufmerksamkeit,
Tobago
Benutzeravatar
lorbass
********
Beiträge: 4116
Registriert: Mo, 01.05.2006 21:29
Wohnort: Bonn

Re: Drucken erst nach Befüllung bestimmter Zellen

Beitrag von lorbass »

Wenn niemand antwortet, bitte kein neues Thema mit derselben Frage aufmachen, sondern das alte Thema mit einer kurzen Nachfrage wieder "hochholen".

Gruß
lorbass, Mod
F3K Total
********
Beiträge: 3720
Registriert: Mo, 28.02.2011 17:49

Re: Drucken erst nach Befüllung bestimmter Zellen

Beitrag von F3K Total »

Hallo tobago,
habe mich mit dem Thema beschäftigt.
Leider ist es mir nicht gelungen ein Ereignis zu finden, das dass Auslösen des Druckvorganges über das Menü oder z.B. Strg+P detektiert. Es gibt zwar ein Ereignis "onPrint" aber wenn es übermittelt wird, läuft der Druck bereits. Hat vielleicht jemand eine Idee, wie man dieses Ereignis detektieren kann?

Als Lösung reicht Dir vielleicht Folgendes, siehe auch angehängte Datei:
  1. Das Makro "S_enable_Print" wird durch das Tabellenereignis "Inhalt geändert" ausgelöst. Es aktiviert die Schaltfläche "ocmdprint" mit dem Titel "Seite Drucken" nur wenn alle vier Pflichtzellen, hier B1 bis B4, befüllt sind.

    Code: Alles auswählen

    Sub S_enable_Print
        osheet = Thiscomponent.sheets.getbyname("Tabelle1")
        nCounter = 0
        for i = 1 to 4
             ocell = osheet.getcellrangebyname("B"+i)'Zellen B1 bis B4
             if ocell.formula >"" then nCounter = nCounter + 1'Hier wird geprüft, ob in die Zellen befüllt sind
        next i
        ocmdprint = osheet.drawpage.forms.Formular.cmdprint
        if nCounter = 4 then ocmdprint.Enabled = true else ocmdprint.Enabled = false
    End Sub
  2. Das Makro "S_Print" zum Drucken, ausgelöst durch das Drücken der Schaltfläche "Seite Drucken", die eben nur dann gedrückt werden kann, wenn alle vier Pflichtfelder befüllt sind.

    Code: Alles auswählen

    Sub S_Print
        Dim args()
        thiscomponent.print(args())
    End Sub 
Gruß R
Dateianhänge
enable_print.ods
(10.48 KiB) 111-mal heruntergeladen
tobago
*
Beiträge: 14
Registriert: Fr, 24.09.2010 12:24

Re: Drucken erst nach Befüllung bestimmter Zellen

Beitrag von tobago »

Lieber Spezialist,
bin sprachlos, Super und gefühlt zu 90 % gelöst.
Vielen Dank für deine Mühe, habe viel gelernt.
Schade, dass es mit der Deaktivierung des Druckbuttons nicht klappt, deshalb nur 2 kleine Fragen zum Design.
1. Wie kann ich dein Druckbutton verschieben oder auf eine anderes Stelle des Tabellenblattes positionieren und mit einer Meldung versehen, dass dieser aktiv wird, wenn die Bermerkungen befüllt sind ?
2. In deinem sehr gut gelösten Beispiel sind es 4 Zellen untereinander und dein Code im Makro ebenfalls verständlich.
Meine 3 Zellen, die es zu deaktivieren gilt sind z.B., A109, J108 und J33.
Wie binde ich diese 3 Zellkoordinaten ins Makro ein?
Vielen Dank für die kompetente Lösung.
F3K Total
********
Beiträge: 3720
Registriert: Mo, 28.02.2011 17:49

Re: Drucken erst nach Befüllung bestimmter Zellen

Beitrag von F3K Total »

Hi,
zum Verschieben des Buttons mußt du in den Formular-Entwurfmodus wechseln. Vorher den Blattschutz herausnehmen. Dann verschieben.
Jetzt rechte Maustaste auf den Button, Kontrollfeld ... Reiter Allgemein, Zeile Hilfetext (unten), hier den Hinweis eintragen.
Den Entwurfsmodus wieder ausschalten.
Der Knopf zum Ein/Ausschalten befindet sich auf der Symbolleiste "Formularentwurf", die du, falls nicht zu sehen, über Ansicht/Symbolleisten einschalten kannst.
Nun zum zweiten Teil:
Ändere das Makro S_enable_Print wie folgt:

Code: Alles auswählen

Sub S_enable_Print
    Dim SCellnames(2)
    SCellnames(0) = "A109"
    SCellnames(1) = "J108"
    SCellnames(2) = "J33"
    osheet = Thiscomponent.sheets.getbyname("Tabelle1")
    nCounter = 0
    
    for i = 0 to 2
         ocell = osheet.getcellrangebyname(SCellnames(i))
         if ocell.formula >"" then nCounter = nCounter + 1
    next i
    ocmdprint = osheet.drawpage.forms.Formular.cmdprint
    if nCounter = 3 then ocmdprint.Enabled = true else ocmdprint.Enabled = false
End Sub
Viel Spaß
Gruß R
tobago
*
Beiträge: 14
Registriert: Fr, 24.09.2010 12:24

Re: Drucken erst nach Befüllung bestimmter Zellen

Beitrag von tobago »

Vielen Dank - so kann man arbeiten. :D
tobago
*
Beiträge: 14
Registriert: Fr, 24.09.2010 12:24

Re: Drucken erst nach Befüllung bestimmter Zellen

Beitrag von tobago »

Hallo,
weiss jemand, wie man bei verbunden Zellen u.g. Funktionalität herstellen kann.
Also, wenn z.B. A108 von A108-D107 gehen würde?
Vielen Dank und Grüße
Tobago

Sub S_enable_Print
Dim SCellnames(2)
SCellnames(0) = "A109"
SCellnames(1) = "J108"
SCellnames(2) = "J33"
osheet = Thiscomponent.sheets.getbyname("Tabelle1")
nCounter = 0

for i = 0 to 2
ocell = osheet.getcellrangebyname(SCellnames(i))
if ocell.formula >"" then nCounter = nCounter + 1
next i
ocmdprint = osheet.drawpage.forms.Formular.cmdprint
if nCounter = 3 then ocmdprint.Enabled = true else ocmdprint.Enabled = false
End Sub
F3K Total
********
Beiträge: 3720
Registriert: Mo, 28.02.2011 17:49

Re: Drucken erst nach Befüllung bestimmter Zellen

Beitrag von F3K Total »

Moin,
habe es ausprobiert. Geht. Klicke in die verbundene Zelle und schaue was oben links für eine Zelladresse angezeigt wird, die nimmst du im Code.
Gruß R
Jörg
*****
Beiträge: 401
Registriert: Mo, 21.10.2013 12:05

Re: Drucken erst nach Befüllung bestimmter Zellen

Beitrag von Jörg »

Hallo Fachleute,
wie mach ich aus dem Code eine Fehlermeldung?
Zellbereich: "B23:C23,E23:F23"
Format: Datum TT.MM.JJJJ
Bedingung: Zellen dürfen nicht leer sein.

Danke schon mal.
Gruß Jörg
Gruß Jörg

Win 10 Pro AOO 4.1.15
Jörg
*****
Beiträge: 401
Registriert: Mo, 21.10.2013 12:05

Re: Drucken erst nach Befüllung bestimmter Zellen

Beitrag von Jörg »

Hallo,
so funktioniert es.

Code: Alles auswählen

Sub HauptTeil
	Dim oSheet as Object
	Dim sPflichtName as String, sPflichtOrt as String
	oSheet = thisComponent.Sheets.getbyname("Eingabemaske Abr_Rechnung")
	sPflichtName = oSheet.getCellRangeByName("B23").String
	sPflichtOrt = oSheet.getCellRangeByName("C23").string
	
'B23 usw. als Text formatiert	
	
	if sPflichtName <>"" and sPflichtOrt <>"" then
'dann sub Abrechnung
  Abrechnung	 
   			
				
	else
		print "Vor- und Nachname UND Ort müssen ausgefüllt sein. Sie sind Pflichtfelder!"
	end if
	
End Sub
Muss ich noch etwas anpassen Pflichtort ist bei mir Rechnungsnummer etc.
Gruß Jörg
Gruß Jörg

Win 10 Pro AOO 4.1.15
Antworten