Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1328to1332
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Bestimmte Zelle nach jedem Seitenumbruch

Bestimmte Zelle nach jedem Seitenumbruch
11.09.2013 12:01:03
Sascha
Hallo liebe Forumsmitglieder,
Situation: Ich habe eine Art Sammlung mit Ausgabebutton und Checkboxen, wähle ich mir bestimmte Teile aus und aktiviere den Button, dann werden die Inhalte aus den einzelnen Tabellen kopiert und auf den Worksheets("Ausgabe") übertragen.
Nun soll folgendes gelöst werden: Die bestimmte "Zelle" die sich 4 Reihen nach dem Seitenumbruch und in Spalte B befindet, ist immer gefüllt (mit der Überschrift). In die Zelle davor soll jetzt die "Nummerierung" eingetragen werden - "Aufgabenblock 1" auf Seite 1, "Aufgabenblock 2" auf Seite 2 ...
Ich versuche also jede Zelle an bestimmter Position in Worksheets("Ausgabe") zu bestimmen, zu prüfen ob etwas vorhanden ist und dann davor die Nummerierung zu schreiben.
Ich habe es bist jetzt dazu gebracht:
Er zählt hier automatisch zur dritten Zelle (nach dem dritten Seitenumbruch) und ersetzt diese durch den Wert 50 ... Ich doktore schon seit einiger Zeit an dem Code rum, komme aber nicht auf die Lösung...
Dim Zelle As Range
Dim zelle2 As Range
Dim pagebreakrow As Long
Dim pagebreakcol As Long
Dim i As Integer
Dim b As Integer
With Worksheets("Ausgabe")
For b = 0 To 2
pagebreakrow = .HPageBreaks(1 + b).Location.Row
Set Zelle = .Cells(pagebreakrow, 2).Offset(4, 0)
Set zelle2 = .Cells(pagebreakrow, 2).Offset(4, 0)
Next b
For Each Zelle In Range("A1:B218")
'Hier soll eig. Worksheets("Ausgabe") hin, aber bei zwei Variablen/Objekten meckert er immer. Die Range ist nämlich auch nicht genau anzugeben. Deswegen soll die ganze Tabelle durchsucht werden.
For i = 2 To 50
If Zelle "" Then
zelle2.Value = i 'Hier soll eig "Aufgabenblock i" stehen, also das Wort und die hochzählende Zahl
End If
Next i
Next Zelle
End With
End Sub
Kann es überhaupt so funktionieren?
Kann ich in einer for each Schleife Zellen auf einem bestimmten Arbeitsblatt ansteuern ohne eine Range vorzugeben?
Kann mir jemand eine Tipp geben, wie ich auf die Lösung komme oder bin ich hier komplett auf dem Holzweg? Mir fällt aktuell auch keine alternative zum Nummerieren ein. (Jedenfalls nicht in diesem Projekt:))
Danke!
MfG Sascha

12
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Bestimmte Zelle nach jedem Seitenumbruch
12.09.2013 10:48:06
fcs
Hallo Sascha,
das sollte unfähr wie folgt funktionieren.
Beachte: Seite 1 ist oberhalb des 1. Seitenwechsels und muss ggf. speziell geprüft werden.
Gruß
Franz
Sub EinfuegenAufgabenBereich()
Dim wks As Worksheet
Dim objHPagebreak As HPageBreak
Dim Zelle As Range, iAufgabe As Integer
Set wks = Worksheets("Ausgabe")
iAufgabe = 0 'Zähler zurücksetzen auf 0
With wks
'Seite 1 prüfen
Set Zelle = .Cells(4, 2) 'Zeile 4, Spalte B prüfen
If Zelle  "" Then
iAufgabe = iAufgabe + 1
Zelle.Offset(-1, 0).Value = "Aufgabenblock " & iAufgabe
End If
'Alle horizontalen Seitenwechsel abarbeiten
For Each objHPagebreak In .HPageBreaks
Set Zelle = .Cells(objHPagebreak.Location.Row + 3, 2) 'Zelle mit Überschrift
If Zelle  "" Then
iAufgabe = iAufgabe + 1
Zelle.Offset(-1, 0).Value = "Aufgabenblock " & iAufgabe
End If
Next
End With
End Sub

Anzeige
AW: Bestimmte Zelle nach jedem Seitenumbruch
12.09.2013 12:34:39
Sascha
Hallo Franz!
Danke für die schnelle Hilfe. Aktuell gibt mir Excel noch den Fehler aus "Index außerhalb des gültigen Bereiches":
For Each objHPagebreak In .HPageBreaks
Im Prinzip heißt das, dass er die Seitenumbrüche in dem wks nicht finden kann, oder?
Gruß

AW: Bestimmte Zelle nach jedem Seitenumbruch
12.09.2013 13:29:28
fcs
Hallo Sascha,
keine Ahnung, warum das Makro bei dir nicht funktioniert.
Ich hab es mit verschiedenen Einstellungen getestet.
- Nur Seite 1 mit Daten (keine Seitenumbrüche)
- automatische Seitenwechsel
- manuell gesetzte Seitenwechsel
Den Fehler sollte es nur geben, wenn in der aktiven Arbeitsmappe (Workbook) das Tabellenblatt mit dem Namen "Ausgabe" fehlt. Hier ggf. die Schreibweise des Blattnamens prüfen/anpassen.
Gruß
Franz

Anzeige
AW: Bestimmte Zelle nach jedem Seitenumbruch
12.09.2013 14:29:34
Sascha
Habe es gerade mit 2 Seiten getestet. Dann funktioniert es. Sobald ich drei Seiten auf der Ausgabe habe zeigt er mir den Fehler an. An deinem Code habe ich lediglich die Ausgangszelle verändert, da die Überschriften in cells(5,2) und (objHPagebreak.Location.Row + 4, 2) stehen also in b5 nicht b4.

AW: Bestimmte Zelle nach jedem Seitenumbruch
12.09.2013 15:12:10
Sascha
Sobald eine leere Zelle auftaucht gibt er auch den gleichen Fehler aus.
Allerdings habe ich auch in zwei Kopierbereichen Grafiken eingefügt, folglich sind die angesprochenen Zellen dann leer und er gibt den Index Fehler aus.
Die Position der Zellen, wo die Überschrift ist, werde ich jetzt auf die Position ändern, die im Makro angegeben ist.

Anzeige
AW: Bestimmte Zelle nach jedem Seitenumbruch
12.09.2013 15:12:14
Sascha
Sobald eine leere Zelle auftaucht gibt er auch den gleichen Fehler aus.
Allerdings habe ich auch in zwei Kopierbereichen Grafiken eingefügt, folglich sind die angesprochenen Zellen dann leer und er gibt den Index Fehler aus.
Die Position der Zellen, wo die Überschrift ist, werde ich jetzt auf die Position ändern, die im Makro angegeben ist.

AW: Bestimmte Zelle nach jedem Seitenumbruch
12.09.2013 15:45:19
Sascha
Update:
Völlig kurios. Das mit den "leeren" Feldern habe ich umgangen, indem ich einfach noch eine If-Bedingung eingebaut habe ... ist das Feld leer, tue Garnichts.
Aber: Wähle ich meine Aufgaben aus, lasse sie auf meinen "Ausgabe"-sheet kopieren und nutze dann das Makro zum nummerieren gibt er den Index-Fehler aus. Gehe ich aber vorher per Hand auf die "Ausgabe" und scrolle bis ganz unten, aktiviere dann auf meinem "Auswahl"-sheet die Nummerierung läuft es einwandfrei durch ... schon sehr merkwürdig :) leider fehlt mir nach 6 Wochen noch das nötige Hintergrundwissen um zu wissen wo solch einen Fehler liegt. Ich werde mal googlen!
Danke für Deine Mühe Franz!

Anzeige
AW: Bestimmte Zelle nach jedem Seitenumbruch
13.09.2013 02:01:34
fcs
Hallo Sascha,
probiere mal die folgende Anpassung.
Wenn der Indexfehler immer noch auftritt, dann vermute ich, dass das Blatt "Ausgabe" und die Daten die du Kopierst in unterschiedlichen Arbeitsmappen (Dateien) sind. In diesem Fall muss man dann im Makro noch irgendwie die Umschaltung zur Mappe mit dem Blatt "Ausgabe" korrekt umsetzen.
Gruß
Franz
Sub EinfuegenAufgabenBereich()
Dim wks As Worksheet
Dim objHPagebreak As HPageBreak
Dim Zelle As Range, iAufgabe As Integer
Set wks = ActiveWorkbook.Worksheets("Ausgabe")
iAufgabe = 0 'Zähler zurücksetzen auf 0
With wks
.Activate
.Range("A1").Select
'Seite 1 prüfen
Set Zelle = .Cells(5, 2) 'Zeile 4, Spalte B prüfen
If IsEmpty(Zelle) Then
'then do nothing
ElseIf Zelle  "" Then
iAufgabe = iAufgabe + 1
Zelle.Offset(-1, 0).Value = "Aufgabenblock " & iAufgabe
End If
'Alle horizontalen Seitenwechsel abarbeiten
For Each objHPagebreak In .HPageBreaks
Set Zelle = .Cells(objHPagebreak.Location.Row + 4, 2) 'Zelle mit Überschrift
If IsEmpty(Zelle) Then
'then do nothing
ElseIf Zelle  "" Then
iAufgabe = iAufgabe + 1
Zelle.Offset(-1, 0).Value = "Aufgabenblock " & iAufgabe
End If
Next
End With
End Sub

Anzeige
AW: Bestimmte Zelle nach jedem Seitenumbruch
13.09.2013 08:15:21
Sascha
Leider keine Veränderung. Alle Daten sind in einer Exceldatei, nur auf unterschiedlichen Tabellenblättern (insg. 17 Tabellen, 15 mit Daten, 1 Inhalt wo die Buttons sitzen und ausgewählt wird, ein Ausgabenblatt, das Ziel für die Daten).
Weiterhin gilt: Leere ich die Ausgabe, lasse neue (mehr als 2) Seiten füllen und scrolle dann auf dem Ausgabenblatt bis ganz nach unten mit dem Mausrad und aktiviere dann den Nummerieren-Button auf dem ersten Tabellenblatt, dann funktioniert es, sonst gibt's den Index Fehler.
Kopieren funktioniert hier ganz leienhaft mit einer If-Funktion:
Sub Loeschen()
If Range("B7").Value = True Then 'mit B7 ist eine Checkbox verbunden
Worksheets("3. xxx").Rows("58:116").Copy 'Die Rows geben die einzelnen Seiten vor
Worksheets("Ausgabe").Rows(1).Insert Shift:=xlDown
End If
If Range("B6").Value = True Then
Worksheets("2. xxx").Rows("1:52").Copy
Worksheets("Ausgabe").Rows(1).Insert Shift:=xlDown
End If
End Sub
So geht es noch bis 60 hoch. Ich kopiere die Rows (nicht Range, hatte es mit PasteSpecial Paste:=xlPasteFormats versucht, aber dann konnte ich da nicht einbauen, dass alle seiten untereinander kopiert werden, wenn man mehrere auswählt), da teilweise Text in verbundenen Zellen steht (und die damit unterschiedliche Höhen haben) und mit Zeilenumbruch in einer Zeile dargestellt wird. Deswegen kann man auch leider nicht konstant von Zelle B4 zur nächsten Seite zählen, da jede Seite unterschiedliche Zeilenanzahlen hat. Diese verbundenen Zellen sind aber nie in der Nähe der Überschriftzelle.
Als zweites Makro habe ich dann nur noch ein Löschenmakro um die Ausgabe zu clearen:
Sub AusgabeLöschen()
Sheets("Ausgabe").Select
Rows("1:3500").Select
Selection.Delete Shift:=xlUp
Sheets("Ausgabe").Pictures.Delete
Worksheets("Inhalt").Activate
End Sub
Auch hier wieder rows, da die Spaltenformatierung erhalten bleiben muss.
Und das ist dann auch schon alles. Kann mir absolut nicht erklären wieso das Makro erst nach dem scrollen durch das Ausgabeblatt funktioniert.

Anzeige
AW: Bestimmte Zelle nach jedem Seitenumbruch
13.09.2013 13:11:41
fcs
Hallo Sascha,
nach dem Kopieren werden scheinbar die Seitenumbrüche im Blatt "Ausgabe" nicht oder nicht schnell genug neu berechnet/aktualisiert.
Ich hab jetzt das Scrollen in das Makro eingebaut. Danach funktionierts ohne Fehler.
Gruß
Franz
Sub EinfuegenAufgabenBereich()
Dim wks As Worksheet
Dim objHPagebreak As HPageBreak
Dim Zelle As Range, iAufgabe As Integer
Set wks = ActiveWorkbook.Worksheets("Ausgabe")
iAufgabe = 0 'Zähler zurücksetzen auf 0
With wks
.Activate
.Range("A1").Select
Application.ScreenUpdating = True
Set Zelle = .Cells.SpecialCells(xlCellTypeLastCell)
ActiveWindow.ScrollRow = Zelle.Row + 1
ActiveWindow.ScrollRow = 1
'Seite 1 prüfen
Set Zelle = .Cells(5, 2) 'Zeile 4, Spalte B prüfen
If IsEmpty(Zelle) Then
'then do nothing
ElseIf Zelle  "" Then
iAufgabe = iAufgabe + 1
Zelle.Offset(-1, 0).Value = "Aufgabenblock " & iAufgabe
End If
'Alle horizontalen Seitenwechsel abarbeiten
For Each objHPagebreak In .HPageBreaks
Set Zelle = .Cells(objHPagebreak.Location.Row + 4, 2) 'Zelle mit Überschrift
If IsEmpty(Zelle) Then
'then do nothing
ElseIf Zelle  "" Then
iAufgabe = iAufgabe + 1
Zelle.Offset(-1, 0).Value = "Aufgabenblock " & iAufgabe
End If
Next
End With
End Sub
Deine anderen Makros würde ich wie folgt ändern. Dabei wird dann vor jedem kopierten Satz Zeilen ein manueller horizontaler Seitenumbruch eingefügt. Das kannst du aber auch weglassen
'Diese Code-Zeile ganz oben im Modul mit den Makros
Private bolUmbruch As Boolean 'Merker für Einfügen eines Seitenumbruchs
Sub AusgabeLöschen()
With Sheets("Ausgabe")
.Pictures.Delete
.UsedRange.EntireRow.Delete Shift:=xlUp
End With
End Sub
Sub Loeschen()
bolUmbruch = False
If Range("B7").Value = True Then prcCopy Worksheets("3. xxx").Rows("58:116")
If Range("B6").Value = True Then prcCopy Worksheets("2. xxx").Rows("1:52")
Application.CutCopyMode = False
Call EinfuegenAufgabenBereich
End Sub
Sub prcCopy(rngBereich As Range)
Dim wksAusgabe As Worksheet, Zeilen As Long
Set wksAusgabe = Worksheets("Ausgabe")
With rngBereich
.Copy
Zeilen = .Rows.Count
End With
wksAusgabe.Rows(1).Insert Shift:=xlDown
'außer beim 1. mal nach den eingefügten Zeilen einen manuellen Seitenumbruch setzen
If bolUmbruch Then
wksAusgabe.HPageBreaks.Add wksAusgabe.Cells(Zeilen + 1, 1)
Else
bolUmbruch = True
End If
End Sub

Anzeige
AW: Bestimmte Zelle nach jedem Seitenumbruch
13.09.2013 08:15:25
Sascha
Leider keine Veränderung. Alle Daten sind in einer Exceldatei, nur auf unterschiedlichen Tabellenblättern (insg. 17 Tabellen, 15 mit Daten, 1 Inhalt wo die Buttons sitzen und ausgewählt wird, ein Ausgabenblatt, das Ziel für die Daten).
Weiterhin gilt: Leere ich die Ausgabe, lasse neue (mehr als 2) Seiten füllen und scrolle dann auf dem Ausgabenblatt bis ganz nach unten mit dem Mausrad und aktiviere dann den Nummerieren-Button auf dem ersten Tabellenblatt, dann funktioniert es, sonst gibt's den Index Fehler.
Kopieren funktioniert hier ganz leienhaft mit einer If-Funktion:
Sub Loeschen()
If Range("B7").Value = True Then 'mit B7 ist eine Checkbox verbunden
Worksheets("3. xxx").Rows("58:116").Copy 'Die Rows geben die einzelnen Seiten vor
Worksheets("Ausgabe").Rows(1).Insert Shift:=xlDown
End If
If Range("B6").Value = True Then
Worksheets("2. xxx").Rows("1:52").Copy
Worksheets("Ausgabe").Rows(1).Insert Shift:=xlDown
End If
End Sub
So geht es noch bis 60 hoch. Ich kopiere die Rows (nicht Range, hatte es mit PasteSpecial Paste:=xlPasteFormats versucht, aber dann konnte ich da nicht einbauen, dass alle seiten untereinander kopiert werden, wenn man mehrere auswählt), da teilweise Text in verbundenen Zellen steht (und die damit unterschiedliche Höhen haben) und mit Zeilenumbruch in einer Zeile dargestellt wird. Deswegen kann man auch leider nicht konstant von Zelle B4 zur nächsten Seite zählen, da jede Seite unterschiedliche Zeilenanzahlen hat. Diese verbundenen Zellen sind aber nie in der Nähe der Überschriftzelle.
Als zweites Makro habe ich dann nur noch ein Löschenmakro um die Ausgabe zu clearen:
Sub AusgabeLöschen()
Sheets("Ausgabe").Select
Rows("1:3500").Select
Selection.Delete Shift:=xlUp
Sheets("Ausgabe").Pictures.Delete
Worksheets("Inhalt").Activate
End Sub
Auch hier wieder rows, da die Spaltenformatierung erhalten bleiben muss.
Und das ist dann auch schon alles. Kann mir absolut nicht erklären wieso das Makro erst nach dem scrollen durch das Ausgabeblatt funktioniert.

Anzeige
AW: Bestimmte Zelle nach jedem Seitenumbruch
13.09.2013 08:55:29
Sascha
"ActiveWindow.SmallScroll Down:=3000" eingefügt und jetzt funktioniert es. (Habe max. 3000 Zeilen, wenn alles ausgewählt und ausgegeben wird)
Danke für deine großartige Hilfe Franz!
Ich wünsche Dir ein schönes Wochenende!
Gruß Sascha

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige