Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Anzeige
Inhaltsverzeichnis

Seiten erkennen

Forumthread: Seiten erkennen

Seiten erkennen
28.03.2025 19:02:09
sigrid
Guten Abend,
ich habe ein kleines Problem.
Wir Schreiben in der Firma Rechnungen über ein kleines Excel Programm, läuft soweit.
Das Problen, die 6 Rechnungs Blätter sind alle untereinander in einer Tabelle, die Seiten werden
aber nicht erkannt. Daher habe ich im Internet mal gegoogelt und habe dieses Makro gefunden.
Sub ErkenneBeschriebeneBlaetter()

Dim ws As Worksheet
Dim isWritten As Boolean
Dim checkCell As Range
Dim rowNum As Long
Dim sheetName As String
Dim outputWs

' Erstelle ein neues Blatt für die Ausgabe
'' Set outputWs = ThisWorkbook.Sheets.Add
' ' outputWs.Name = "Beschriebene Blätter"

' Setze die Startzeile für die Ausgabe
' rowNum = 1
' outputWs.Cells(rowNum, 1).value = "Beschriebene Blätter:"
' rowNum = rowNum + 1

' Iteriere durch alle Blätter der Arbeitsmappe
For Each ws In ThisWorkbook.Worksheets
' Bestimme die zu prüfende Zelle je nach Blattname
Select Case ws.Name
Case "Seite 2"
Set checkCell = ws.Range("B91")
ActiveSheet.Range("B67:E129").Select

Case "Seite 3"
Set checkCell = ws.Range("B155")
ActiveSheet.Range("B131:E193").Select

Case "Seite 4"
Set checkCell = ws.Range("B219")
ActiveSheet.Range("B195:E256").Select

Case "Seite 5"
Set checkCell = ws.Range("B282")
ActiveSheet.Range("B258:E319").Select

Case "Seite 6"
Set checkCell = ws.Range("B346")
ActiveSheet.Range("A321:E383").Select
Case Else
Set checkCell = Nothing ' Blätter, die nicht "Seite 2" bis "Seite 6" sind, überspringen
End Select
' Überprüfe, ob die Zelle beschrieben ist
If Not checkCell Is Nothing Then
If Not IsEmpty(checkCell.value) Then
' Wenn Zelle beschrieben ist, trage den Blattnamen in das neue Blatt ein
' outputWs.Cells(rowNum, 1).value = ws.Name
rowNum = rowNum + 1
End If
End If
Next ws
End Sub


wenn z.B in B91 etwas drin steht, dann soll die 2. Seite als Seite ("B67:E129") erkannt werden und
und bei der Seitenansicht zusehen sind, weil ich die Tabelle mit erkannten z.B. hier 2 Seiten auch als PDF
speichern muss.

mfg sigrid
Anzeige

23
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Seiten erkennen
28.03.2025 19:12:08
daniel
ok.
du hast irgendwas gefunden und keine Ahnung, ob das Makro zu deinem Problem passt.

bitte lade die Datei hoch und beschreibe nochmal, was du erreichen willst.
im Idealfall zeigst du in der Datei, wie die Ausgangslage ist und wie das Endergebnis aussehen soll, nachdem das Makro seine Arbeit getan hat.

Und was genau meinst du mit "erkannt"?
wer noch Bibelfest ist, weiß dass dieses Wort doch sehr unterschiedliche Bedeutungen haben kann (auch wenn einige davon hier natürlich nicht infrage kommen)
Gruß Daniel
Anzeige
AW: Seiten erkennen
28.03.2025 21:07:14
Onur
Tabellenblätter sind nicht das selbe wie DRUCKSEITEN.
Du solltest dir mal ein Video für absolute Excel-Anfänger ansehen.
AW: Seiten erkennen
28.03.2025 23:55:13
Piet
Hallo

ich wundere mich immer wieder über den Aufwand mit Set und Not Is Nothing, wenn es viel einfacher geht!
Ich würde das Makro so aufbauen. Da fehlt jetzt NUR noch der -Druckbefehl- in der letzten IF Auswertung!

mfg Piet



Sub ErkenneBeschriebeneBlaetter()
Dim ws As Worksheet, WSht As String, PrtAdr As String
' Iteriere durch alle Blätter der Arbeitsmappe
For Each ws In ThisWorkbook.Worksheets
' Bestimme die zu prüfende Zelle je nach Blattname
Select Case ws.Name
Case "Seite 2"
If ws.Range("B91") > "" Then
PrtAdr = "B67:E129"
WSht = "Seite2"
End If
Case "Seite 3"
If ws.Range("B155") > "" Then
PrtAdr = "B131:E193"
WSht = "Seite2"
End If
Case "Seite 4"
If ws.Range("B219") > "" Then
PrtAdr = "B195:E256"
WSht = "Seite2"
End If
Case "Seite 5"
If ws.Range("B282") > "" Then
PrtAdr = "B258:E319"
WSht = "Seite2"
End If
Case "Seite 6"
If ws.Range("B346") > "" Then
PrtAdr = "A321:E383"
WSht = "Seite2"
End If
Case Else
' andere Blätter überspringen
WSht = Empty: PrtAdr = Empty
End Select

' Drucken wenn Auftrag vorliegt
If WSht > "" And PrtAdr > "" Then
ThisWorkbook.Sheets(WSht).PageSetup.PrintArea = PrtAdr
'Hier dein Druckbefehl !!

End If
Next ws
End Sub
Anzeige
AW: Seiten erkennen
29.03.2025 12:40:42
Piet
Hallo Sigird

wie onur mich aufmerksam machte handelt es sich offenbar nur um eine Tabelle, die "Rechnung1". Oder gibt es auch Rechnung 2-6 ???
Wenn mit Seite die Druckseite 1-6 gemeint ist, konnte mein Makro nicht funktionieren. --> Es ging ja von 6 Sheets aus!!
Dieses Makro zeigt dir jetzt an, welche Seiten gedruckt werden sollen, und fragt nach ob du direkt drucken willst?

Bei OK werden die per MsgBox angezeigten Seiten direkt gedruckt. --> Kein weiteres Makro notwendig.
Ich sehe das in deinen Einzelmakros beim Drucken noch Farben in den Textfeldern verändert werden?
Leider habe ich keinen Drucker um das selbst testen zu können. Kann den letzten Druckbefehl nicht prüfen.

Falls das mit den Farben erforderlich ist, kann man sehen wie man das mit einem Makro bewältigenn kann.
Ich warte aber mal deine Rückmeldung ab. Viel Spass beim testen.

PS Bei den blauen Button bekomme ich die Meldung das ich zuerst bei mir OneNote installieren muss.
Keine Ahnung was das ist, und warum ich es installieren soll??

mfg Piet



Sub ErkenneBeschriebeneBlaetter_neu()
Dim ws As Worksheet, WSht As String
Dim PrtAdr As String, ok As Variant
Set ws = Worksheets("Rechnung1")
If ws.Range("B91") > "" Then
PrtAdr = "B67:E129"
WSht = vbLf & "Seite2"
End If
If ws.Range("B155") > "" Then
PrtAdr = PrtAdr & ", " & "B131:E193"
WSht = WSht & vbLf & "Seite3"
End If
If ws.Range("B219") > "" Then
PrtAdr = PrtAdr & ", " & "B195:E256"
WSht = WSht & vbLf & "Seite4"
End If
If ws.Range("B282") > "" Then
PrtAdr = PrtAdr & ", " & "B258:E319"
WSht = WSht & vbLf & "Seite5"
End If
If ws.Range("B346") > "" Then
PrtAdr = PrtAdr & ", " & "A321:E383"
WSht = WSht & vbLf & "Seite6"
End If

ok = MsgBox("Diese Seiten können gedruckt werden" & vbLf & "Rechnung jetzt drucken?" & WSht, vbOKCancel)
If ok = vbCancel Then Exit Sub

ws.PageSetup.PrintArea = PrtAdr
With ws.PageSetup
' .LeftHeader = ""
' .CenterHeader = ""
' .RightHeader = ""
' .LeftFooter = "&""Arial,Kursiv""&8" & Chr(10) & ""
' .CenterFooter = "&""Calibri,Standard""&8&P von &N"
' .RightFooter = ""
' .LeftMargin = Application.InchesToPoints(0.2)
.LeftMargin = Application.InchesToPoints(0.6) '1.5 im Layaut
' .Zoom = 100
' .Zoom = False
End With
ws.PrintOut Copies:=1 'Klappt dieser Befehl??
End Sub
Anzeige
AW: Seiten erkennen, fehler
29.03.2025 15:03:31
sigrid
Hallo alle zusammen,
habe getestet, leider werden die Anzahl der Seiten in der Seitenansicht nicht
angezeigt.
Anbei die aktualisierte Testversion4.
Würe mich mich freuen wenn es eine Lösung geben würde,
herzlichen Dank im Vorraus,

https://www.herber.de/bbs/user/176488.xlsm

gruß sigrid
Anzeige
AW: Seiten erkennen
29.03.2025 12:47:15
Alwin Weisangler
Hallo Miteinander,

ist es nicht besser das Ganze mit einer Combobox und einem Button zu erschlagen.

ins Modul des Tabellenblattes:


Option Explicit
Dim boo As Boolean

Private Sub ComboBox1_Change()
boo = True
With ComboBox1
If .ListIndex > 0 Then
Range(.List(.ListIndex, 1)).Offset(20, 0).Activate
Else
Range("B2").Select
End If
End With
End Sub

Private Sub ComboBox1_DropButtonClick()
Dim k&, Zelle As Range, arrRech()
If boo = True Then Exit Sub
For Each Zelle In Range("B1:B" & UsedRange.Rows.Count)
If InStr(1, Zelle, "Rechnungs-Nr.", vbTextCompare) > 0 Then
k = k + 1
ReDim Preserve arrRech(1 To 3, 1 To k)
arrRech(1, k) = Zelle
arrRech(2, k) = Zelle.Offset(-22, 0).Address
arrRech(3, k) = Zelle.Offset(43, 3).Address
End If
Next
With ComboBox1
.ColumnCount = UBound(arrRech)
.ColumnWidths = "150;0;0"
.Column = arrRech
End With
End Sub

Private Sub CommandButton1_Click()
With ComboBox1
Tabelle1.PageSetup.PrintArea = .List(.ListIndex, 1) & ":" & .List(.ListIndex, 2)
Tabelle1.PrintPreview
End With
End Sub

Dazu Active-X Steuerelemente Combobox + Button oben anlegen.
https://www.herber.de/bbs/user/176487.xlsm

Gruß Uwe
Anzeige
AW: Seiten erkennen
30.03.2025 11:24:35
Ulf
Hi Sigrid,
mich wundert immer wenn Leute programmiert haben wollen, was es in der passenden Software inklusiv gibt. Für deinen Fall sollte Word verwendet werden oder der Aufbau an Excel angepasst sein, dass keine zusammenhängenden Bereiche/Absätze/Abschnitte usw. kennt.
Alternativ würde ich die Aufteilung wie im Beispiel handhaben, dass dir gestalterisch alle Freiheit lässt und simpel zu erweitern ist.
Vlt. findet das ja Gnade:...

https://www.herber.de/bbs/user/176489.xlsm

hth
Ulf
Anzeige
AW: Seiten erkennen
30.03.2025 15:15:25
Piet
Hallo

ich habe auch noch mal eine Beispieldatei hochgeladen, die musst du aber bitte -Selbst- ergänzen!
Du willst ja von Adresse als Text auf Workbook Names umstellen, das habe ich für Seite 1 gemacht!
Die anderen Seiten musst du bitte selbst im Namensmanager neu einrichten!!
https://www.herber.de/bbs/user/176492.xlsm

Aufgefallen ist mir noch, das du im Beispiel für If Then die Zellen 27, 92, 156 usw. gelb markiert hast.
In deinem Makro war zum Prüfen aber 91, 155 usw. angegeben. Bitte selbst nachprüfen was richtig ist.
Die Textfelder 7-12 werden jetzt auch farblich markiert, ohne das ich One installieren musste!
Zum Testen deiner PrtAdr wird dir eine MsgBox angezeigt. Die kannst du löschen wenn alles klappt!

mfg Piet
Anzeige
AW: Ich Gratuliere dir zur eigenen Lösung oWt
31.03.2025 00:33:49
Piet
...
AW: Seiten erkennen
31.03.2025 12:23:17
Der Steuerfuzzi
Hallo,

ich würde nicht auf Excel bei der Rechnungsschreibung setzen. Im Hinblick auf die E-Rechnungspflicht wirst du höchstwahrscheinlich irgendwann das Problem haben, dass Excel per se eine solche nicht erstellen kann. Und dann frickelt man sich die nächste Lösung zusammen. Das ist mE sehr Fehleranfällig. Da würde ich lieber monatlich ein paar Euro in die Hand nehmen und die Rechnungen über ein fertiges und getestetes Programm schreiben.

Nur einfach mal laut nachgedacht ...

Gruß
Michael
Anzeige
AW: Seiten erkennen
30.03.2025 15:18:04
Piet
Nachtrag - die zuletzt gedruckte Rechnung kannst du in Zeile 4 sehen, mit Name und Uhrzeit.
Wenn du das NICHT haben willst bitte löschen!

mfg Piet
Es klappt alles !!! -)
30.03.2025 16:29:47
sigrid
Hallo zusammen,
erst mal herzlichen Dank für die GEDULD und Unterstützung !
Auf Grund der vielzahl an Beispielen und Hinweisen habe ich, ich möchte ja weiter mein Wissen erweitern,
diese Makro erstellt:
Public Sub Alle_Seiten_Drucken()


ActiveSheet.Application.ScreenUpdating = False
'ActiveSheet.Unprotect (getStrPasswort)
'Application.Calculation = xlCalculationManual
'Application.Calculation = xlCalculationAutomatic

If ActiveSheet.Range("B27").value > "" Then
ActiveSheet.PageSetup.PrintArea = "B2:E65"
End If

If ActiveSheet.Range("B91").value > "" Then
ActiveSheet.PageSetup.PrintArea = "B2:E65,B67:E129"
End If

If ActiveSheet.Range("B155").value > "" Then
ActiveSheet.PageSetup.PrintArea = "B2:E65, B67:E129,B131:E193"
End If

If ActiveSheet.Range("B219").value > "" Then
ActiveSheet.PageSetup.PrintArea = "B2:E65, B67:E129,B131:E193,b195:E256"
End If

If ActiveSheet.Range("B282").value > "" Then
ActiveSheet.PageSetup.PrintArea = "B2:E65, B67:E129,B131:E193,b195:E256,b258:E319"
End If

If ActiveSheet.Range("B346").value > "" Then
ActiveSheet.PageSetup.PrintArea = "B2:E65, B67:E129,B131:E193,b195:E256,b258:E319,b321:e383"
End If
'---------------------------------------------------------------------------

With ActiveSheet.PageSetup

.LeftMargin = Application.InchesToPoints(0.6) '1.5 im Layaut
' .Zoom = 100
' .Zoom = False
End With
'ActiveWindow.SelectedSheets.PrintPreview
' MsgBox "kein Ausdruck"

ActiveWindow.SelectedSheets.PrintOut Copies:=1

ActiveSheet.Range("O12").Select
Application.Calculation = xlCalculationAutomatic
End Sub


damit funktioniert meine Datei auch, da ich erst Ausdrucken und danach auf den Namen
speichere.

DANKE nochmals an ALLE !

Schönen Sonntag noch
sigrid










Anzeige
AW: Seiten erkennen
29.03.2025 13:37:38
Alwin Weisangler
Falls die Seite in Der Comboboxliste drinstehen soll wäre die Zeile dazu dann:


arrRech(1, k) = "Rechnung Seite " & k


Ach ja, ich habe die beiden oberen Zeilen fixiert und da wäre die zu aktivierende Zelle natürlich Range("B3").Activate


Private Sub ComboBox1_Change()
boo = True
With ComboBox1
If .ListIndex > 0 Then
Range(.List(.ListIndex, 1)).Offset(20, 0).Activate
Else
Range("B3").Activate
End If
End With
End Sub


Gruß Uwe
Anzeige
Keine Combobox
29.03.2025 13:38:40
sigrid
Hallo Uwe,
das ist sehr nett gemeint aber ich keine Combobox gebrauchen,
herzlichen Dank.
Ich habe jetzt die einzelnen Bereich Namen vergeben also
Seite1= ActiveSheet.Range("b2:E65")
Seite2=ActiveSheet.Range("B67:E129")
Seite3= ActiveSheet.Range("B131:E193")
Seite4= ActiveSheet.Range("B195:E256")
Seite5= ActiveSheet.Range("B258:E319")
Seite6=ActiveSheet.Range("A321:E383")



gruß sigrid
Anzeige
AW: Seiten erkennen
28.03.2025 23:57:52
Onur
Hi Piet,

Hast du dir die Datei angeschaut?
Es gibt nur EIN Blatt. Was er eigentlich meint sind verschieden Bereiche (Tabellen) auf diesem einen Blatt.


Gruß
Onur
AW: Seiten erkennen
29.03.2025 01:28:04
Piet
Hallo

@onur - Sorry, ich hatte mir die Datei nicht angeschaut. Dann ist es noch einfacher!
Man kann WSht ganz weglassen, oder mit "Ja" versehen. Eigentlich reicht es die PrtAdr zu setzen!
Mal schauen was Sigrid dazu sagt?? Vielleicht hilft ihm der Code ja weiter.

mfg Piet
Anzeige
AW: Seiten erkennen
29.03.2025 00:02:17
Piet
Nachtrag

Sorry, sehe gerade das ich beim kopieren won WSht = "Seite 2" die Seite 2 NICHT geändert habe. Bitte korrigieren.

mfg Piet
Keine Reaktion
29.03.2025 10:50:34
sigrid
Guten Morgen Piet,
anbei die Musterdatei, leider keine Reaktion.
Es sollte jetzt Seite 1-3 angezeigt werden.

https://www.herber.de/bbs/user/176486.xlsm

mfg sigrid
Anzeige
AW: Seiten erkennen Datenbereich…
28.03.2025 21:27:07
sigrid
Hallo Onur,
danke für den Hinweis, habe schon einiges durch das Forum gelernt.
Habe aber auch schon weiter nachgeschaut, mit dem vergeben eines Datenbereiches als Namen.
Werde morgen mal sehen ob ich was zustande bekomme, jetzt ist erst mal Familie dran.

Hoffe aber weiter auch auf deine Unterstützung, du hast schon einiges für
Mich getan !

Gruß Sigrid
Anzeige
AW: Seiten erkennen
28.03.2025 19:33:53
sigrid
Guten Abend Daniel,
ich versuche genauer zu beschreiben.

 wenn in Zeile B27 etwas drin steht soll der Bereich  ("A2:E65") 

als 1 Seite erkannt bzw. festgelegt werden.

wenn in Zelle("B91"), etwas steht soll der Bereich ("B67:E129")
als Seite 2 erkannt bzw. festgelegt werden.

wenn in Zelle("B2109"), etwas steht soll der Bereich ("B195:E256")
als Seite 3 erkannt bzw. festgelegt werden.

wenn in Zelle("B282"), etwas steht soll der Bereich ("B258:E319")
als Seite 4 erkannt bzw. festgelegt werden.

wenn in Zelle("B346"), etwas steht soll der Bereich ("A321:E383")
als Seite 5 erkannt bzw. festgelegt werden.

wenn in Zelle("B346"), etwas steht soll der Bereich ("A321:E383")
als Seite 5 erkannt bzw. festgelegt werden. .Select


Wenn ich in die Seitenansicht gehe, wird immer nur die Seite 1 angezeigt, obwohl
zusätzlich etwas in Zelle("B91") und in Zelle("B2109"), müten also
3 Seiten angezeigt werden.

ggf. muß ich eine Mustertabelle erstellen, wird dann morgen.

mfg sigrid







Anzeige
AW: anbei Muster
28.03.2025 21:09:12
daniel
Hi
lass dieses Makro mal drüber laufen:

Sub Seite_Einrichten()

Dim arrPrüf, arrBereich
Dim x As Long
Dim txt As String
arrPrüf = Array("B27", "B91", "B2109", "B282", "B364")
arrBereich = Array("B2:E65", "B67:E129", "B195:E256", "B258:E319", "B321:E383")

For x = 0 To UBound(arrPrüf)
If Range(arrPrüf(x)).Value > "" Then txt = txt & " " & arrBereich(x)
Next
txt = Trim(txt)
txt = Replace(txt, " ", ",")
ActiveSheet.PageSetup.PrintArea = txt

End Sub


ich habe mich da an deiner Beschreibung orientiert, obwohl die mir manchmal etwas komisch erscheint, aber das kannst du dann ja noch ausbessern.
im ersten Array steht immer die Adresse der Zelle, die auf inhalt geprüft werden soll und dann im zweiten Array der dazugehörige Druckbereich. Vor allem das "B2109" scheint mir unlogisch, aber du musst wissen, was du willst.

das Makro generiert dann den entsprechenden Druckbereich.

du müsstest allerdings noch die Skalierung bei "Seite einrichten - Papierformat" noch so einstellen, das Rechnungseite auch immer nur eine Druckseite entsteht.
das solltest du einmalig von Hand machen, an der Größe der Seiten wird sich dann ja nichts mehr ändern.

Gruß Daniel
Anzeige

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige