Unterschiedlicher Druckbereich per VBA? Noch mal

Liebe Excelianer,

vorab möchte ich mich bei Reinhard und Georg V entschuldigen. Ich hatte mein Probelm schon vor einer Woche eingestellt und darauf nicht geantwortet, weil mir Arbeit und mein fröhlich vor sich hin pubertertierender Sohn zu viel waren. Bitte um Entschuldigung!

Da ihr beiden Nachfragen hattet, habe ich mir erlaubt, die Datei per Hostarea zur Verfügung zu stellen:

http://www.hostarea.de/server-04/April-a109eb9d43.xls

Ich benutze Excel 2003 in diesem Fall also zum schreiben, nicht zum rechnen.

Es gibt eine sogenannte „Vollversion“ dieser Datei, die 23 Seiten hat. Die 5 Abteilungen, die per Server darauf zurückgreifen, kürzen diese Version auf ihre Bedürfnisse. Die eine Abt. kommt mit 8 Seiten aus, die andere braucht 13 Seiten. Deshalb die unterschiedliche Seitenanzahl.
Das Tabellenblatt „Assessment“ wird ausgedruckt. Meine Frage ist, ob es möglich ist, nur die Seiten auszudrucken, die auch ausgefüllt wurden, bzw. auf denen Einträge gemacht wurden.

Vom „workflow“ ist es so, dass zu Anfang immer Einträge auf Seite 1 gemacht werden, daneben Einträge auf anderen Seiten, je nachdem, welche Angaben man erhält, also zB zu den Überschriften 1, 3, 5 und 13. Dann wird die Datei per Button gespeichert. Kommen später neue Informationen hinzu, werden die Zellen entweder zusätzlich ausgefüllt oder gelöscht. Die Regel ist aber, dass nicht alle Seiten benutzt werden und somit auch nicht ausgedruckt werden bräuchten.

Zu Reinhards Frage/Anregung: „Daß du 3 Zellen nebeneinander auswählen kannst, dann über Format „über Auswahl zentrieren“ auswählen kannst ist dir bekannt?“

Nein, kenn ich leider nicht und in Excel 2003 finde ich die Funktion unter dem beschriebenen Pfad auch nicht.

Jetzt hoffe ich, dass ihr mit „meiner“ Datei (die VBAs sind von www-ler, vielen Dank) und meinen Erläuterungen was anfangen könnt.

Freundliche Grüße

Jorge

Grüezi Jorge

Es gibt eine sogenannte „Vollversion“ dieser Datei, die 23
Seiten hat. Die 5 Abteilungen, die per Server darauf
zurückgreifen, kürzen diese Version auf ihre Bedürfnisse. Die
eine Abt. kommt mit 8 Seiten aus, die andere braucht 13
Seiten. Deshalb die unterschiedliche Seitenanzahl.
Das Tabellenblatt „Assessment“ wird ausgedruckt. Meine Frage
ist, ob es möglich ist, nur die Seiten auszudrucken, die auch
ausgefüllt wurden, bzw. auf denen Einträge gemacht wurden.

Ich könnte mir folgenden Ansatz vorstellen:

Markiere auf jedem Tabellenblatt alle Zellen, in denen Eintraäge gemacht werden können und vergib dann jedesmal einen Bereichsnamen im Namensfeld links neben der Bearbeitungszeile.

Beim Druck–
Mit freundlichen Grüssen

Thomas Ramel

  • MVP für MS-Excel -en (im Beforeprint-Ereignis) fragst Du dann jeden dieser Bereiche ab ob ein Eintrag gemacht worden ist (das kannst Du per VBA mit .CountA() tun)- wenn ja, wir das Blatt gedruckt, wenn nein lässt Du es aus.

Sinnvoll wäre es noch, wenn Du alle ‚unveränderlichen‘ Zellen sperren würdest - da der Blattschutz gesetzt ist bietet sich dies an.

Hallo Jorge,

wenn ich auch einige Bedienungsfehler gefunden habe (ich würde es als sinnvoll betrachten, dass man „zurück zum Assessmentbogen“ klickt in der Nähe der Usprungsstelle auftaucht und nicht in der Zelle A598 etwa 400 Zeien unterhalb des Formulars), so ganz habe ich es noch nicht verstanden. Soll das Blatt „Assessment“ in Abhängigkeit der Stationen (25,26,31,41,33) bestimmte Bereiche verstecken (als auch kein Ausfüllen möglich)? Das wäre mit einem Makro (Blattschutz aufheben, Bereich verstecken, Blattschutz setzen) bestimmt möglich. Ausgelöst werden könnte das Ganze über ein Worksheet_Change Makro.

MfG Georg V.

Hallo Georg,

ich habe gerade bemerkt, dass in der Hostarea-Datei der gesamte Druckbereich zerschossen war. Hier also eine neuer Versuch:

http://www.hostarea.de/server-04/April-42e5c3d8bb.xls

Ich hab einige Zellen ausgefüllt und hellblau markiert. In der Seitenansicht erkennt man, das die Seiten 1,2,4 und 6 betroffen sind. Für den Ausdruck brauche ich auch eben nur diese 4 Seiten, bzw. grundsätzlich nur die Seiten, auf denen Zellen ausgefüllt wurden. Oder aber, das war ja mein laienhafter Vorschlag, der Ausfüller setzt in eine neu zu schaffende Zelle ein „x“ und sagt damit Excel: wenn man auf einen VBA-Button „Drucken“ klickt, sollen alle Seiten gedruckt werden, auf denen es dieses „x“ findet.

wenn ich auch einige Bedienungsfehler gefunden habe (ich würde
es als sinnvoll betrachten, dass man „zurück zum
Assessmentbogen“ klickt in der Nähe der Usprungsstelle
auftaucht und nicht in der Zelle A598 etwa 400 Zeien unterhalb
des Formulars), so ganz habe ich es noch nicht verstanden.

In A598 habe ich nichts gefunden ( oder war das ironisch gemein?). Die vielen Blätter werden sich nach und nach füllen; von daher haben die meisten Links jetzt noch gar keine Bedeutung.

Soll das Blatt „Assessment“ in Abhängigkeit der Stationen
(25,26,31,41,33) bestimmte Bereiche verstecken (als auch kein
Ausfüllen möglich)? Das wäre mit einem Makro (Blattschutz
aufheben, Bereich verstecken, Blattschutz setzen) bestimmt
möglich. Ausgelöst werden könnte das Ganze über ein
Worksheet_Change Makro.

Nein, es braucht nichts versteckt zu werden. Die genannten Stationen bilden die Abteilung; sie arbeiten alle mit dieser Datei. Andere Stationen/Abteilungen arbeiten mit einer anderen Datei, die im Aufbau gleich ist, aber aufgrund der unterschiedlichen Bedürfnisse für das Tabellenblatt „Assessment“ andere Items abfragt und somit auch in der Seitenanzahl kürzer oder länger sein kann.

Alle Blätter sind schreibgeschützt, nur die nicht-gesperrten Zellen sollen Einträge zulassen dürfen, damit niemand die „Überschriften“ oder Formeln überschreibt oder löscht.

Hilft das ein bisschen weiter?

Freundliche Grüße

Jorge

Hallo Thomas,

ich habe bei Georg geantwortet. Guckst du da mal…?

Vielen Dank und Gruß

Jorge

Grüezi Jorge

ich habe gerade bemerkt, dass in der Hostarea-Datei der
gesamte Druckbereich zerschossen war. Hier also eine neuer
Versuch:

http://www.hostarea.de/server-04/April-42e5c3d8bb.xls

Ich hab einige Zellen ausgefüllt und hellblau markiert. In der
Seitenansicht erkennt man, das die Seiten 1,2,4 und 6
betroffen sind. Für den Ausdruck brauche ich auch eben nur
diese 4 Seiten, bzw. grundsätzlich nur die Seiten, auf denen
Zellen ausgefüllt wurden.

Aha - das Ganze bezieht sich auf die zu druckenden Seiten eines einzelnen Tabellenblattes.

Hmmm, kannst Du sicherstellen, dass sich die Seitenumbrüche nicht verändern?

Dann könntest Du mit dem vorhin beschriebenen Verfahren halt pro auszudruckender Seite einen Bereichsnamen erstellen und prüfen und dann nur die Seiten drucken, die einen Inhalt haben.

Oder aber, das war ja mein
laienhafter Vorschlag, der Ausfüller setzt in eine neu zu
schaffende Zelle ein „x“ und sagt damit Excel: wenn man auf
einen VBA-Button „Drucken“ klickt, sollen alle Seiten gedruckt
werden, auf denen es dieses „x“ findet.

Das kommt dem Verfahren mit den Namen gleich, resp. kann damit kombiniert werden indem Du die Zelle sich selbst ausfüllen lässt durch eine Formel welche die Anzahl Einträge auf einer Druckseite zählt und entsprechend ein ‚x‘ ausgibt.

Hilft das ein bisschen weiter?

Ja, ich verstand die Mappe nun besser - hilft dir auch der Ansatz weiter?


Mit freundlichen Grüssen

Thomas Ramel

  • MVP für MS-Excel -

OT Verbundene Zellen vermeiden

http://www.hostarea.de/server-04/April-a109eb9d43.xls

Zu Reinhards Frage/Anregung: „Daß du 3 Zellen nebeneinander
auswählen kannst, dann über Format „über Auswahl zentrieren“
auswählen kannst ist dir bekannt?“

Nein, kenn ich leider nicht und in Excel 2003 finde ich die
Funktion unter dem beschriebenen Pfad auch nicht.

Hallo Jorge,

Nebeneinanderliegende Zellen markieren
Format–Ausrichtung–Horizontal–Über Auswahl zentrieren.

Gehht vertikal nicht.

Gruß
Reinhard

Hallo Jorge,

sehr gute Idee mit der Einfärbung!

Ich hab einige Zellen ausgefüllt und hellblau markiert. In der
Seitenansicht erkennt man, das die Seiten 1,2,4 und 6
betroffen sind. Für den Ausdruck brauche ich auch eben nur
diese 4 Seiten, bzw. grundsätzlich nur die Seiten, auf denen
Zellen ausgefüllt wurden. Oder aber, das war ja mein
laienhafter Vorschlag, der Ausfüller setzt in eine neu zu
schaffende Zelle ein „x“ und sagt damit Excel: wenn man auf
einen VBA-Button „Drucken“ klickt, sollen alle Seiten gedruckt
werden, auf denen es dieses „x“ findet.

wenn ich auch einige Bedienungsfehler gefunden habe (ich würde
es als sinnvoll betrachten, dass man „zurück zum
Assessmentbogen“ klickt in der Nähe der Usprungsstelle
auftaucht und nicht in der Zelle A598 etwa 400 Zeien unterhalb
des Formulars), so ganz habe ich es noch nicht verstanden.

Gemeint war Blatt „12 Befinden“ (660 Selbstversorgungsdefizit) dort geht der Link „zurück zum Assessmentbogen“ in die Zelle A598 vom entsprechenden Blatt.

Alle Blätter sind schreibgeschützt, nur die nicht-gesperrten
Zellen sollen Einträge zulassen dürfen, damit niemand die
„Überschriften“ oder Formeln überschreibt oder löscht.

Auf diesen Ansatz habe ich mal etwas Ansatzweise gebastelt:

Function checkDruckbereiche(yStart As Integer, yEnde As Integer) As Boolean
 Dim flgused As Boolean

 flgused = False
 For x = 1 To 9
 For y = yStart To yEnde
 If Worksheets("assessment").Cells(y, x).AllowEdit Then
 If Len(Cells(y, x).Text) \> 0 Then
 MsgBox ("Zelle (" & y & ", " & x & ")") ' Debugmaßnahme später löschen
 flgused = True
 Exit For 'Performance Maßnahme
 End If
 End If
 Next y
 If flgused Then
 Exit For 'Performance Maßnahme
 End If
 Next x
 checkDruckbereiche = flgused
End Function

Sub test()
 If checkDruckbereiche(3, 25) Then MsgBox ("Seite 1 gefüllt!")
 If checkDruckbereiche(26, 54) Then MsgBox ("Seite 2 gefüllt!")
 If checkDruckbereiche(55, 82) Then MsgBox ("Seite 3 gefüllt!")
End Sub

Dummerweise ist auf Blatt 3 die Zelle A62 („Sonstiges“) nicht geschützt und damit würde das Blatt auch gedruckt… Aber das kannst Du bestimmt mit etwas Fleiß richten oder?

Da Du eine Seitenzahl im Ausdruck hast, kommst Du wie angedeutet nicht mit x Druckbefehlen aus. Ich würde jetzt ein Button Drucken einbauen, der die Seiten, die ein Falsch von checkDruckbereiche zurück erhalten, ausblenden (vorher Schutz aufheben) und dann den Druckbefehl auslösen (danach alle Zeilen wieder einblenden und Schutz wieder setzen).

MfG Georg V.

http://www.hostarea.de/server-04/April-a109eb9d43.xls

Zu Reinhards Frage/Anregung: „Daß du 3 Zellen nebeneinander
auswählen kannst, dann über Format „über Auswahl zentrieren“
auswählen kannst ist dir bekannt?“

Nein, kenn ich leider nicht und in Excel 2003 finde ich die
Funktion unter dem beschriebenen Pfad auch nicht.

Hallo Jorge,

Nebeneinanderliegende Zellen markieren
Format–Ausrichtung–Horizontal–Über Auswahl zentrieren.

Gehht vertikal nicht.

Hallo Reinhard,

nach einigem Probieren habe ichs gefunden (rechtsklick-Zellen formatieren…).
Da das aber vertikal nicht geht, hilft es mir im Sinne des Anwenders nicht. Für die meisten Einträge brauchen meine Koellegen „eine große Zelle“, ohne mit Enter in die nächste zu gelangen.
Wenn das die Voraussetzung für die Lösung meines Problems wäre, wäre mir die Funktionalität der verbundenen Zelle lieber.

Vielen Dank, dass ich trotzdem was gelernt habe.

Gruß

Jorge

Hallo Georg,

Gemeint war Blatt „12 Befinden“ (660 Selbstversorgungsdefizit)
dort geht der Link „zurück zum Assessmentbogen“ in die Zelle
A598 vom entsprechenden Blatt.

Das ist natürlich vollkommener Quatsch, was da passiert. Es soll zum Ausgangslink zurückgeführt werden und nicht ins Nirwana. Muss ich unbedingt in der Originaldatei überprüfen. In dem Fall vielen Dank für den Hinweis!!

Alle Blätter sind schreibgeschützt, nur die nicht-gesperrten
Zellen sollen Einträge zulassen dürfen, damit niemand die
„Überschriften“ oder Formeln überschreibt oder löscht.

Auf diesen Ansatz habe ich mal etwas Ansatzweise gebastelt:

Function checkDruckbereiche(yStart As Integer, yEnde As
Integer) As Boolean
Dim flgused As Boolean

flgused = False
For x = 1 To 9
For y = yStart To yEnde
If Worksheets(„assessment“).Cells(y, x).AllowEdit Then
If Len(Cells(y, x).Text) > 0 Then
MsgBox („Zelle (“ & y & ", " & x & „)“) ’
Debugmaßnahme später löschen
flgused = True
Exit For 'Performance Maßnahme
End If
End If
Next y
If flgused Then
Exit For 'Performance Maßnahme
End If
Next x
checkDruckbereiche = flgused
End Function

Sub test()
If checkDruckbereiche(3, 25) Then MsgBox („Seite 1
gefüllt!“)
If checkDruckbereiche(26, 54) Then MsgBox („Seite 2
gefüllt!“)
If checkDruckbereiche(55, 82) Then MsgBox („Seite 3
gefüllt!“)
End Sub

Dummerweise ist auf Blatt 3 die Zelle A62 („Sonstiges“) nicht
geschützt und damit würde das Blatt auch gedruckt… Aber das
kannst Du bestimmt mit etwas Fleiß richten oder?

Richte ich morgen sofort.

Da Du eine Seitenzahl im Ausdruck hast, kommst Du wie
angedeutet nicht mit x Druckbefehlen aus. Ich würde jetzt ein
Button Drucken einbauen, der die Seiten, die ein Falsch von
checkDruckbereiche zurück erhalten, ausblenden (vorher Schutz
aufheben) und dann den Druckbefehl auslösen (danach alle
Zeilen wieder einblenden und Schutz wieder setzen).

Würde ich gerne, kann ich aber nicht…-) Kannst du mir das noch ein bisschen „Für-Den-Laien-Erklären“ und wo ich das in den Editor hinkopieren muss.

Gruß

Jorge

Salü Thomas,

Hmmm, kannst Du sicherstellen, dass sich die Seitenumbrüche
nicht verändern?

Nein, kann ich nicht. Wenn die KollegInnen morgen zu mir kommen, und notwendige Änderungen anfordern, kann das zu einer Änderung der Seitenumbrüche führen.

Dann könntest Du mit dem vorhin beschriebenen Verfahren halt
pro auszudruckender Seite einen Bereichsnamen erstellen und
prüfen und dann nur die Seiten drucken, die einen Inhalt
haben.

Der Konjunktiv ist richtig. Leider weiß ich nicht, was du meinst. Kannst du mir das genauer erklären?

Oder aber, das war ja mein
laienhafter Vorschlag, der Ausfüller setzt in eine neu zu
schaffende Zelle ein „x“ und sagt damit Excel: wenn man auf
einen VBA-Button „Drucken“ klickt, sollen alle Seiten gedruckt
werden, auf denen es dieses „x“ findet.

Das kommt dem Verfahren mit den Namen gleich, resp. kann damit
kombiniert werden indem Du die Zelle sich selbst ausfüllen
lässt durch eine Formel welche die Anzahl Einträge auf einer
Druckseite zählt und entsprechend ein ‚x‘ ausgibt.

Hilft das ein bisschen weiter?

Na ja, wie oben gesagt, ich weiß nicht, wie es geht. Aber meine Neugier ist geweckt und ich würde mich freuen, wenn du mir das noch ein bisschen genauer erklären würdest.

Liebe Grüße

Jorge

OT Kommentar in Zellen nervt
Hallo Jorge,

Nebeneinanderliegende Zellen markieren
Format–Ausrichtung–Horizontal–Über Auswahl zentrieren.
Gehht vertikal nicht.

nach einigem Probieren habe ichs gefunden (rechtsklick-Zellen
formatieren…).
Da das aber vertikal nicht geht, hilft es mir im Sinne des
Anwenders nicht. Für die meisten Einträge brauchen meine
Koellegen „eine große Zelle“, ohne mit Enter in die nächste zu
gelangen.

nun gut.

Was mir auffiel, du, deine Kollegen arbeiten doch täglich mit dieser Datei, mich nervte schon nach paar Minuten die Kommentare die erscheinen wenn ich mich mit der Maus bewege.

Ich habe heute einen genialen Trick gelernt *find*

Probiers mal aus, dann ist der Kommentar in der Bearbeitungszeile und sticht nicht mehr so ins Auge und er ist auch sichtbar wenn man mit der Tastatur die Zelle betritt.

Tabellenblatt: C:\DOKUME~1\ICHALS~1\LOKALE~1\Temp\[April-42e5c3d8bb-1.xls]!Assessment
 │ C │ D │
──┼──────────┼────┤
2 │ 0.1.1900 │ 25 │
──┴──────────┴────┘
Benutzte Formeln:
C2: =Stammblatt!C7+N("Wird aus dem Stammblatt übernommen")
D2: =Stammblatt!L3++N("Wird aus dem Stammblatt übernommen")

Festgelegte Namen:
Pflegeplanung!\_FilterDatabase : =Pflegeplanung!$C$1:blush:E$500, \*versteckter Name, unbenutzt in Selektion.
Assessment!Dropdown1 : =Assessment!$A$52, unbenutzt in Selektion.
'1 Gesundheitsförderung'!Print\_Area : ='1 Gesundheitsförderung'!$A$33:blush:C$40, unbenutzt in Selektion.
'10 Lebensprinzipien'!Print\_Area : ='10 Lebensprinzipien'!$A$32:blush:C$39, unbenutzt in Selektion.
'11 Sicherheit Schutz'!Print\_Area : ='11 Sicherheit Schutz'!$A$32:blush:C$39, unbenutzt in Selektion.
'12 Befinden'!Print\_Area : ='12 Befinden'!$A$32:blush:C$39, unbenutzt in Selektion.
'13 Wachstum Entwicklung'!Print\_Area: ='13 Wachstum Entwicklung'!$A$32:blush:C$39, unbenutzt in Selektion.
'2 Ernährung'!Print\_Area : ='2 Ernährung'!$A$32:blush:C$39, unbenutzt in Selektion.
'3 Ausscheidung'!Print\_Area : ='3 Ausscheidung'!$A$32:blush:C$39, unbenutzt in Selektion.
'4 Aktivität Ruhe'!Print\_Area : ='4 Aktivität Ruhe'!$A$32:blush:C$39, unbenutzt in Selektion.
'5 Perzeption Kognition'!Print\_Area : ='5 Perzeption Kognition'!$A$32:blush:C$39, unbenutzt in Selektion.
'6 Selbstwahrnehmung'!Print\_Area : ='6 Selbstwahrnehmung'!$A$32:blush:C$39, unbenutzt in Selektion.
'7 Rolle Beziehungen'!Print\_Area : ='7 Rolle Beziehungen'!$A$32:blush:C$39, unbenutzt in Selektion.
'8 Sexualität'!Print\_Area : ='8 Sexualität'!$A$32:blush:C$39, unbenutzt in Selektion.
'9 Coping Stresstoleranz'!Print\_Area: ='9 Coping Stresstoleranz'!$A$32:blush:C$39, unbenutzt in Selektion.
Assessment!Print\_Area : =Assessment!$A$1:blush:I$197, unbenutzt in Selektion.
Pflegeplanung!Print\_Area : =Pflegeplanung!$A$1:blush:J$503, unbenutzt in Selektion.
Stammblatt!Print\_Area : =Stammblatt!$A$1:blush:L$30, unbenutzt in Selektion.
Vorlage!Print\_Area : =Vorlage!$A$32:blush:C$39, unbenutzt in Selektion.
Assessment!Print\_Titles : =Assessment!$1:blush:2, unbenutzt in Selektion.
Pflegeplanung!Print\_Titles : =Pflegeplanung!$1:blush:3, unbenutzt in Selektion.

Zahlenformate der Zellen im gewählten Bereich:
C2
haben das Zahlenformat: T.M.JJJJ
D2
haben das Zahlenformat: Standard

Tabellendarstellung erreicht mit dem Code in FAQ:2363

Ui, so viele Namen, ich lasse sie drinnen, da haste gleich einen Überblick über die Namen.

Gruß
Reinhard

1 „Gefällt mir“

Hallo Reinhard,

Was mir auffiel, du, deine Kollegen arbeiten doch täglich mit
dieser Datei, mich nervte schon nach paar Minuten die
Kommentare die erscheinen wenn ich mich mit der Maus bewege.

Meine Notlösung fand ich auch immer etwas schräg. Die Kommentare gehören eigentlich als regulärer Text in die Spalte rechts davon, nur da fehlt mir häufig der Platz, weil die Datei so wenig Seiten wie möglich haben soll.

Ich habe heute einen genialen Trick gelernt *find*

Probiers mal aus, dann ist der Kommentar in der
Bearbeitungszeile und sticht nicht mehr so ins Auge und er ist
auch sichtbar wenn man mit der Tastatur die Zelle betritt.

Probier ich frühestens morgen aus. Morgen muss ich wieder KollegInnen auf diese Datei schulen…
Bist du so nett mir noch zu sagen, wohin ich deine Anregungen kopieren muss?

Liebe Grüße und gute Nacht.

Jorge

Ich habe heute einen genialen Trick gelernt *find*

Probiers mal aus, dann ist der Kommentar in der
Bearbeitungszeile und sticht nicht mehr so ins Auge und er ist
auch sichtbar wenn man mit der Tastatur die Zelle betritt.

Hallo Jorge,

wie vom Reinhard beschrieben, als Formel in die entsprechende Zelle C2. Der Trick dabei ist es, dass die Funktion N() nichts anrichtet, aber der Text in der Bearbeitungszeile auftaucht. Darauf achten aber die wenigsten und man kann Sie auch ausblenden (Reinhard> Trotzdem ein Sternchen). Gesucht wäre eigentlich ein Verfahren, dass statt der generellen Aussage von Excel, dass die Zelle schreibgeschützt ist, ein Info kommt, auf welchem Blatt man die Zelle pflegen kann. Schreibgeschützt sollte die Zelle trotzdem sein, da ich das für mein Druckverfahren benötige! :smile:

MfG Georg V.

Hallo Jorge,

Da Du eine Seitenzahl im Ausdruck hast, kommst Du wie
angedeutet nicht mit x Druckbefehlen aus. Ich würde jetzt ein
Button Drucken einbauen, der die Seiten, die ein Falsch von
checkDruckbereiche zurück erhalten, ausblenden (vorher Schutz
aufheben) und dann den Druckbefehl auslösen (danach alle
Zeilen wieder einblenden und Schutz wieder setzen).

Würde ich gerne, kann ich aber nicht…-) Kannst du mir das
noch ein bisschen „Für-Den-Laien-Erklären“ und wo ich das in
den Editor hinkopieren muss.

Gruß

Jorge

Habe mich gerade daran gesetzt, dass Ganze in ein Modul (Du solltest öfter mal F11 drücken und langsam lernen, wie man die Makrovorschläge von www verwaltet), ich scheitere aber an Deinen eingebauten Seitenumbrüchen (produzieren Leerblätter mit den Patientendaten im Kopf). Da werde ich wohl heute abend weiter machen müssen …

MfG Georg V.

Liebe Excelianer,
Ich habe diese Diskussion nur oberflächlich verfolgt, aber vielleicht habe ich doch einen nützlichen Beitrag (mit Excel 2003):
Zellen kannst du horizontal und/oder vertikal verbinden, indem du

  1. Einen Bereich auswählst
  2. Format/Zellen/Ausrichtung/Zellen verbinden
    dann ist der ganze Bereich eine Einheit.

Dasselbe mit einem „Primitiv-Makro“

Sub Verbinde()
Selection.MergeCells = True
End Sub

Allerdings ist bei solchen Aktionen zu beachten, dass die Zeilen- und Spaltennummern nicht mehr durchlaufend sind, Das kann bei der Abarbeitung von Makros zur Entgleisung führen, wenn in einer Schleife alle Zellen abgeklappert werden; es fehlen fann einfach einige und das hat das Makro nicht so gern.
Weiterhin viel Erfgolg mit Excel wünscht
Erich

Grüezi Jorge

Hmmm, kannst Du sicherstellen, dass sich die Seitenumbrüche
nicht verändern?

Nein, kann ich nicht. Wenn die KollegInnen morgen zu mir
kommen, und notwendige Änderungen anfordern, kann das zu einer
Änderung der Seitenumbrüche führen.

OK, aber dann hast Du es ja selbst im Griff, die Anpassungen vorzunhemen.
Ich meinte ob die Anwender so viel Text in die Zellen eintragen können und diese vergrössern, dass die Seitenumbrüche davon tangiert werden.

Aufgrund deiner Anwort gehe ich nicht davon aus, dass dies möglich ist.

Dann könntest Du mit dem vorhin beschriebenen Verfahren halt
pro auszudruckender Seite einen Bereichsnamen erstellen und
prüfen und dann nur die Seiten drucken, die einen Inhalt
haben.

Der Konjunktiv ist richtig. Leider weiß ich nicht, was du
meinst. Kannst du mir das genauer erklären?

Das kommt dem Verfahren mit den Namen gleich, resp. kann damit
kombiniert werden indem Du die Zelle sich selbst ausfüllen
lässt durch eine Formel welche die Anzahl Einträge auf einer
Druckseite zählt und entsprechend ein ‚x‘ ausgibt.

Hilft das ein bisschen weiter?

Na ja, wie oben gesagt, ich weiß nicht, wie es geht. Aber
meine Neugier ist geweckt und ich würde mich freuen, wenn du
mir das noch ein bisschen genauer erklären würdest.

OK, in einer Zelle ausserhalb des Druckbereiches kannst Du z.b. die folgende Formel unterbringen:

=WENN(ANZAHL2(A7;C7;C9;C11;F7;F8;H9;A12;C13;C14;C15;F12;F13;A17;D17;D25;G17)>0;1;"")

Diese behieht sich hier auf dein Tabellenblatt ‚Assessement‘ auf die erste Druckseite.
Mit der ANZAHL2()-Funktion werden alle Eingabe-Zellen der ersten Druckeseite geprüft ob dort ein Eintrag gemacht wurde - ist dies der Fall gibt die Formel ein ‚1‘ aus.
Wähle weitere Zellen für jede weitere Seite aus und verfahre genauso; jeweils die Nummer der auszudruckenden Seite gibst Du dann an.

Sodann kannst Du im Before_Print()-Ereignis diese Zellen prüfen und nur die Seiten drucken lassen, die durch die Formeln auch ermittelt wurden und in denen Einträge gemacht worden sind.

Leider kann ich in deiner hochgeladenen Datei nicht wirklich herausfinden in welchen Zellen denn nun Einträge erlaubt sind, da auch Zellen die Formeln enthalten nicht gesperrt sondern frei sind wenn der Blattschutz gesetzt ist.

Aber nach den oben geschilderten Konzept kannst du die Seitenzahlen ermitteln und dementsprechend dann drucken (lassen).


Mit freundlichen Grüssen

Thomas Ramel

  • MVP für MS-Excel -

Hallo Jorge,

die Datei: http://www.hostarea.de/server-04/April-c1851f939f.xls

hat nachfolgenden Code.

Ich habe 2 zusätzliche Blätter angelegt,
„AssessmentChange“
„Druck“

Zum Ausdrucken muß man nur das Makro „Drucken“ starten.

Die Codes machen folgendes, wenn das Makro "Drucken gestartet wird.

Im Blatt „Assessment“ wird geprüft wieviele Druckseiten es gibt, deren Zellenbereiche (z.B. A1:I25 für das erste Druckblatt usw.) werden in dem Array rngSeite() gespeichert.

Im Blatt „AssessmentChange“ wird ab Dateiöffnung vollautomatisch all das Zellengenau mitprotokolliert was im Hauptblatt „Assessment“ eingegeben/geändert wurde.

Nun wird in einer Schleife das Array rngSeite durchlaufen und dabei geprüft ob im jeweiligen Zellenbereich eine NICHTleere Zelle existiert. Ist das so, so soll ja diese Druckseite auch gedruckt werden.
Dazu dient das Blatt Druck, dorthin werden die beiden Wiederholungszeilen oben hinkopiert, darunter das die zu druckende Druckseite, dann wird das ausgedruckt.
Derzeit nur in der Seitenansicht, aber das kriegste leicht selbst hin das auf richtiges Drucken umzustellen, mußt nur das Hochkomma vor dem Druckbefehl (printOut) wegmachen.

Dies alles geschieht dann auch für alle anderen Druckseiten innerhalb der Schleife.

Und, schalte unbedingt Option Explicit ein (Extras–Editor–Variablendeklaration notwendig) Ich und sicher auch andere habe keine Lust wegen diesem mangel stundenlang einen Fehler zu suchen der absolut unnötig wäre.

Das eine Makro von Rakon habe ich gelöscht, stand sowieso im falschen Modul, das andere sah identisch aus, falls nicht mußte dann das zweite auch löschen und das erste wieder einfügen.

Überprüfen mußt du auch ie horizontalen Seitenumbrüche, kann sein daß ich da paar verschoben/gelöscht habe.

Und, du brauchst deinen Mädels erst gar nix von den beiden neuen Blättern zu sagen, sie werden süäter sowieso unsichtbar für reine Excelbenutzer.
Und eine Schaltfläche fürs Drucken kannst du ja selbst einbauen, Tipp, positioniere es in den beiden fixierten Zeilen, dann ist es immer sichtbar. Genau wie deine andere Schaltfläche da.

Wenn alles klappt, ist es ein leichtes die dann ganz oben in der Symbolleiste als Symbol zu platzieren, so mit Icon vom Drucker o.ä.

Wenn du im Blatt "Assessment etwas am eigentlichen Formular ändern willst, noch mehr Farbe rein oder noch mehr Zellen verbinden *seufz* :smile:)
so mußt du das tun wenn Makros deaktiviert sind, ansonsten wird das als Eingabe von Daten ins Blatt gewertet.

Bei meiner Variante spielt es keine Rolle ob Zellen geschützt sind oder nicht.

Gruß
Reinhard

In einem Standardmodul „mdlDruck“:

Option Explicit
Option Base 1
Public rngSeite() As Range ', bolNichtleer() As Boolean
'
Sub Seiten()
Dim SW As HPageBreak, Anz As Byte, Von As Long, Bis As Long, Mldg As String
Von = 1
With Worksheets("Assessment")
 For Each SW In .HPageBreaks
 Bis = SW.Location.Row - 1
 Anz = Anz + 1
 ReDim Preserve rngSeite(Anz)
 Set rngSeite(Anz) = .Range("A" & Von & ":I" & Bis)
 Mldg = Mldg & "Blatt " & Format(Anz, "00") & " umfasst den Bereich " & rngSeite(Anz).Address & Chr(13)
 Von = Bis + 1
 Next SW
 Bis = .Range("A" & Rows.Count).End(xlUp).Row
 If Bis \>= Von Then
 Anz = Anz + 1
 ReDim Preserve rngSeite(Anz)
 Set rngSeite(Anz) = .Range("A" & Von & ":I" & Bis)
 Mldg = Mldg & "Blatt " & Format(Anz, "00") & " umfasst den Bereich " & rngSeite(Anz).Address
 End If
 'ReDim bolNichtleer(Anz)
End With
'MsgBox Mldg
End Sub
'
Sub Drucken()
Dim Anz As Long
Call Seiten
With Worksheets("AssessmentChange")
 For Anz = 1 To UBound(rngSeite)
 If Application.WorksheetFunction.CountA(.Range(rngSeite(Anz).Address)) 0 Then
 Worksheets("Druck").Cells.Clear
 Worksheets("Assessment").Range("A1:I2").Copy Destination:=Worksheets("Druck").Range("a1")
 rngSeite(Anz).Copy Destination:=Worksheets("Druck").Range("a3")
 Worksheets("Druck").PrintPreview
 'Worksheets("Druck").PrintOut
 End If
 Next Anz
End With
End Sub

Im Dokumentmodul des Blattes „Assessment“:

Private Sub Worksheet_Change(ByVal Target As Range)
Target.Copy Destination:=Worksheets(„AssessmentChange“).Range(Target.Address)
End Sub