Calc, Seitendruck, 1 oder 2 Seiten

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

Moderator: Moderatoren

Benutzeravatar
Mirko Oelsner
Beiträge: 3
Registriert: Do, 01.06.2017 17:25

Calc, Seitendruck, 1 oder 2 Seiten

Beitrag von Mirko Oelsner »

Liebe Gemeinde
ich bin gerade noch ganz neu hier.
Bisher habe ich mich mit VBA-Makros unter Excel beschäftigt, doch jetzt muß ich durch Software-Umstellung in unserer Firma alle Dateien von Excel-Format auf LibreOffice" umrüsten".
Obwohl viele MS-Makros mittlerweile durch LO/OO unterstützt werden, tue ich mir noch ganz schön schwer.
Daher werde ich wahrscheinlich noch einige Hilfe benötigen ;-)

Ich bastele gerade an einem Makro, welches prüft, ob in der zelle a27 etwas steht, wenn ja, dann soll seite 1 und seite 2 dieser Datei gedruckt werden.
Ist a27 leer, dann nur seite 1.

ich habe bisher 2 Makros fürs drucken von seite 1+2 und seite 1 (print1 und print2), und möchte diese im makro mit "wenn- dann" ansteuern.

Code: Alles auswählen

sub print3()
rem ------druckt 1 Seite
rem Variablendefinition
dim document   as object
dim oCellRange as Object
dim dispatcher as object
rem ----------------------------------------------------------------------
rem get access to the document
document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
rem ----------------------------------------------------------------------
dim args1(0) as new com.sun.star.beans.PropertyValue
args1(0).Name = "ToPoint"
args1(0).Value = "$a$27"
If Range("a27") = ""Then
    print1
else
  print2
end sub
leider bekomme ich immer die Meldung:

Code: Alles auswählen

"BASIC-Syntaxfehler.
Unerwartetes Symbol: End Sub."
das verstehe ich nicht, "end sub" beendet doch das makro...?!
mit exit sub gehts auch nicht...

wo liegt mein denkfehler? :shock:

Liebe Grüße Mirko
LibreOffice 5.3.3.2
mikeleb
*******
Beiträge: 1316
Registriert: Fr, 09.12.2011 16:50

Re: Calc, Seitendruck, 1 oder 2 Seiten

Beitrag von mikeleb »

Hallo,
der Fehler liegt darin, dass die Verzweigung noch nicht abgeschlossen ist.
Nach

Code: Alles auswählen

If Range("a27") = ""Then
    print1
else
  print2
Muss zunächst

Code: Alles auswählen

End If
folgen.
Gruß,
mikeleb
mikeleb
*******
Beiträge: 1316
Registriert: Fr, 09.12.2011 16:50

Re: Calc, Seitendruck, 1 oder 2 Seiten

Beitrag von mikeleb »

Hallo,
eine direktere Art für den Druck liefert dir folgendes Beispiel:

Code: Alles auswählen

Sub print_1oder2
	'Zugriff auf das Dokument
	odoc=thiscomponent
	'Zugriff auf die aktuelle Tabelle
	otab=odoc.currentcontroller.activesheet
	'Zugriff auf Zelle A27
	ozelle=otab.getcellrangebyname("A27")
	if ozelle.string="" then
		seiten="1"
	else
		seiten="1-2"
	end if
	'Setze Druckparameter
	Dim printProp(0) as New com.sun.star.beans.PropertyValue
	printProp(0).Name = "Pages"
	printProp(0).Value = seiten
	'Drucke aktuelle Tabelle
   odoc.Print(printProp())
End Sub
Gruß,
mikeleb
Toxitom
********
Beiträge: 3768
Registriert: Di, 12.08.2003 18:07
Wohnort: Wiesbaden
Kontaktdaten:

Re: Calc, Seitendruck, 1 oder 2 Seiten

Beitrag von Toxitom »

Also, wenn schon der "echte" Code genutzt wird - was ich sehr unterstütze - , dann bitte auch tatsächlich ganz korrekt ;)

Code: Alles auswählen

if ozelle.string="" then  
prüft nicht wirklcih auf eine leere Zelle - sondern lediglich, ob die Textdarstellung nichts ergibt;) Wird wahrscheinlich in dem Fall reichen, wirklich korrekt wäre aber den Typ der Zelle abzufragen:

Code: Alles auswählen

if ozelle.getType() = 0 then
Eine "echte" leere Zelle hat den Typ = 0 (Null), eine Wertzelle den Typ 1, eine Textzelle den Typ 2 und eine Formelzelle den Typ 3.

Viele Grüße
Tom
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
mikeleb
*******
Beiträge: 1316
Registriert: Fr, 09.12.2011 16:50

Re: Calc, Seitendruck, 1 oder 2 Seiten

Beitrag von mikeleb »

Hallo toxitom,
du hast natürlich Recht. Ich vermutete aufgrund des ursprünglichen Codes, dass in der Zelle eventuell eine Formel steht und dann ist sie ja micht leer.
Mal sehen, was uns Mirko noch so verrät ...
Gruß,
mikeleb
Benutzeravatar
Mirko Oelsner
Beiträge: 3
Registriert: Do, 01.06.2017 17:25

Re: Calc, Seitendruck, 1 oder 2 Seiten

Beitrag von Mirko Oelsner »

Vielen Dank für die fixe Antwort!

ich habe beides probiert, den vorschlag von mikeleb mit "end if" - hatte ich wirklich einfach vergessen - da passiert aber jetzt gar nichts: es kommt aber auch kein Fehler mehr :lol: , aber es wird gar nichts gedruckt.

hmmm..

dann habe ich toxitom's Vorschlag aufgegriffen, aber hier wird prinzipiell nur eine Seite gedruckt, egal ob ich:

Code: Alles auswählen

if ozelle.string="" then 
oder

Code: Alles auswählen

if ozelle.getType() = 0 then
einsetze... (auch egal, ob mit "1", "2" oder "3")
auch egal ist, ob in der [a27] etwas steht oder nicht (hab ich mit Zahlen, text und Formeln getestet)
in der zZelle steht normalerweise nur Text, ggf. kann ein Leerzeichen drin sein, wenn der Kollege nicht richtig aufgepasst hat...
LibreOffice 5.3.3.2
mikeleb
*******
Beiträge: 1316
Registriert: Fr, 09.12.2011 16:50

Re: Calc, Seitendruck, 1 oder 2 Seiten

Beitrag von mikeleb »

Hallo,
ich gehe mal davon aus, dass die Makros print1 und print2 allein für sich funktionieren?
Für das andere Makro ist es wichtig zu verstehen, dass es sich auf das aktive Tabellenblatt bezieht. Ist das auch das Blatt mit der auszuwertenden Zelle A27?
Was liefert testweise

Code: Alles auswählen

msgbox ozelle.string
Kannst du uns die Datei zum Testen zur Verfügung stellen (anonymisiert)?
Gruß,
mikeleb
Benutzeravatar
Mirko Oelsner
Beiträge: 3
Registriert: Do, 01.06.2017 17:25

Re: Calc, Seitendruck, 1 oder 2 Seiten

Beitrag von Mirko Oelsner »

liebe Gemeinde,

danke für die Rückmeldung... Ich hatte gerade noch andere Dinge zu tun, daher die Verzögerung.
Im Anhang meine Test-Datei.
Ich möchte gerne meine Excel-Datei in LibreOffice laufen lassen, wie ich schon gesagt habe.
Die Buttons im Datei-Kopf sollen für die Mitarbeiter sein, die sich nicht so sehr damit auskennen, und um Fehler zu vermeiden. (z.B. hängt der "Mail"-Button gleich die Datei an die Mail an und trägt den richtigen Empfänger ein (wir hatten vorher unheimlich viele Fehl-Läufe und leere Dateien und Bestellungen, die aufgrund von falsch geschriebenen Adressen im "Nirvana" landeten, oder es wurden nur Links vom Desktop aus gesendet....)
Es sollte eine Abfrage mit hineinkommen, ob überhaupt etwas in die Bestellung geschrieben wurde oder diese leer ist-dann soll eine Nachricht erscheinen und ein Abbruch erfolgen, ebenso die Abfrage, ob die notwendigen Daten (Besteller, Filialnummer) eingetragen sind. Weiterhin wurde in der Excel-Version gecheckt, ob 1 oder 2 Seiten Bestellung vorhanden sind (wegen Papier sparen beim Ausdrucken)...
Ich kämpfe echt seit Wochen...
Die Syntax ist mir auch noch nicht richtig eingängig.. zum Speichern unter Excel genügte ein "Active Workbook.save"-Befehl... im Libre ist da schon mehr zu schreiben... (was keine Kritik ist, ich habe mir die Makros unter MS selber beigebracht, aber ich brauche dazu wenigstens mal was, was richtig funktioniert....

Vielleicht kommt ja jemand von Euch dahinter...
LG Mirko
Dateianhänge
F Bestellformular_2017.06_2.ods
(19.71 KiB) 173-mal heruntergeladen
LibreOffice 5.3.3.2
Stephan
********
Beiträge: 12369
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: Calc, Seitendruck, 1 oder 2 Seiten

Beitrag von Stephan »

Bei mir funktioniert das Makro "Sub print_1oder2" tadellos, lediglich muss der definierte Druckbereich gelöscht werden, weil sonst immer nur eine Seite gedruckt wird.


Gruß
Stephan
Antworten