Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1208to1212
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

viele Blätter...

viele Blätter...
Jörg-HH
Hallo zusammen
dieser Code soll 65 Blätter erzeugen. Nachdem er immer nach dem 55. mit Fehler bei der Copy-Zeile abbricht, habe ich diesen Abschnitt geteilt. Zu meinem großen Erstaunen wird aber immer noch nach dem 55. Blatt abgebrochen.
Wie komm ich denn aus der Nummer raus?
Grüße - Jörg
Sub NeuesBlatt()
Dim NewWS As Worksheet
Dim sh As Shape
Dim NewName As String
Set NewWS = ThisWorkbook.Worksheets("Master")
Application.EnableEvents = False
Application.ScreenUpdating = False
Application.Calculation = xlManual
For j = 1 To 30
NewWS.Copy after:=ThisWorkbook.Worksheets(ThisWorkbook.Worksheets.Count)
For i = 2 To 4
ActiveSheet.Shapes("Dropd" & i).OnAction = "Druckverf"
Next i
With ActiveSheet
.Name = j
.Tab.ColorIndex = -4142
.Shapes("btnNeuesBlatt").Delete
End With
Next j
For jj = 31 To 65
NewWS.Copy after:=ThisWorkbook.Worksheets(ThisWorkbook.Worksheets.Count)
For ii = 2 To 4
ActiveSheet.Shapes("Dropd" & ii).OnAction = "Druckverf"
Next ii
With ActiveSheet
.Name = jj
.Tab.ColorIndex = -4142
.Shapes("btnNeuesBlatt").Delete
End With
Next jj
Application.EnableEvents = True
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
End Sub

20
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: viele Blätter...
01.04.2011 14:11:11
Hajo_Zi
Hallo Jörg,
kann es sein das Du nicht genügend Arbeitsspeicher hast?

Arbeitsspeicher...
01.04.2011 14:13:31
Jörg-HH
Hallo Hajo
4 GB mit den Win-üblichen Einschränkungen (war das nicht 3,...GB was Win verwalten kann?)
Jörg
AW: Arbeitsspeicher...
01.04.2011 14:18:00
Hajo_Zi
Halo Jörg,
dann liegt es nicht daran. Bei Windows 7 gibt es diese Grenze nicht mehr.
Gruß Hajo
AW: Arbeitsspeicher...
01.04.2011 14:26:49
ransi
HAllo Jörg
Da ist was anderes faul.
For J = 1 To 500
    NewWS.Copy after:=ThisWorkbook.Worksheets(ThisWorkbook.Worksheets.Count)
    ' For i = 2 To 4
    ' ActiveSheet.Shapes("Dropd" & i).OnAction = "Druckverf"
    ' Next i
    With ActiveSheet
        .Name = J
        .Tab.ColorIndex = -4142
        ' .Shapes("btnNeuesBlatt").Delete
    End With
Next J

Dauert zwar etwas, läuft aber ohne Probleme.
Starte doch mal deinen Rechner neu.
(Jeder boot tut gut)
Manchmal hilfts.
ransi
Anzeige
...bei 56 ist Feierabend...
01.04.2011 15:25:09
Jörg-HH
Hi Ransi
neu gestartet, alles abgeschaltet außer der Schleife und der Copy-Zeile, auch die Automatiken auf EIN, und dann von Hand Schritt für Schritt durchgetackert...
Jetzt bekomme ich immerhin ein 56. Blatt spendiert, aber dann ist Schluß...
Wat nu...?
:-((
AW: Arbeitsspeicher...
01.04.2011 16:09:13
Jörg-HH
...wenn ich deinen Code bei mir laufen lasse (statt 500 nur 65), kriege ich 54 Blätter angeboten.
Was ist denn auf deinem Rechner anders als bei mir, Ranis...? xl2003 ist doch überall gleich, dachte ich...
Jörg
AW: Arbeitsspeicher...
01.04.2011 17:23:10
Bernd
Hallo Jörg,
ich habe zwar noch weniger Ahnung als Du was VBA anbelangt, aber ich hatte jetzt auch erst dieses Problem. Matthias hier aus dem Forum hat mir eine - wie ich finde - sehr gute Lösung gebastelt. Schau mal im Archiv unter:
https://www.herber.de/forum/archiv/1208to1212/t1208361.htm
Such mal auf der Seite nach "hier die Ausweichvariante". Vielleicht kannst Du das ja auf Deine Bedürfnisse anpassen.
Lasse die Frage offen.
Gruß und schönes WE
Bernd
Anzeige
AW: Arbeitsspeicher...
02.04.2011 19:35:16
Jörg-HH
...danke für den Hinweis, Bernd. Ist ja beruhigend, daß andere ähnliche Probleme haben :-)
Grüße - Jörg
lad mal hoch ...
01.04.2011 18:18:02
Matthias
Hallo
Zitat:
Was ist denn auf deinem Rechner anders als bei mir, Ranis...? [ Ranis=ransi ] ;o)
Ich denke mal der Unterschied ist, das nur Du die Datei auf Deinem Rechner hast.
Das kann also niemand real testen.
Um gezielt Hilfe zu bekommen, schlage ich vor:
Lad mal Deine Tabelle "Master" hier hoch (aber ohne sensible Daten)
Lass alle Objekte Formeln Formatierungen etc., sowie den KopierCode drin!
Denn nur so ist ein Test sinnvoll.
Dann kann man das mal richtig checken, was da nicht stimmt. Sonst ist das ja nur Rätselei.
Ich könnte dann mal mit XL2000 und analog in XL2007 checken (sofern Du das möchtest).
Gruß Matthias
Anzeige
510 KB...
01.04.2011 23:41:40
Jörg-HH
Hi Matthias
ich hab die Datei um alles Überflüssige abgespeckt - nur noch zwei Blätter, paar Namen, vier Dropdowns - trotzdem ist sie 510 KB groß und Hans erlabut nur 300 :-(
was kann man sonst noch tun, um sie abzuspecken...?
Jörg
nimm die definierten Namen raus ...
02.04.2011 08:04:28
Matthias
Hallo Jörg
Ohne die definierten Namen läufts durch.
Die Namen kannst Du ja auch später setzen.
Gruß Matthias
...ja - dann geht's... aber warum?
02.04.2011 11:03:46
Jörg-HH
Moin Matthias
du hast recht. Aber es müssen wirklich ALLE Namen raus, wie ich gemerkt habe.
Gut - dann kann man diese Klippe ja auf Umwegen umfahren - aber gibt's denn dafür eine Erklärung?
Schönes WE - Jörg
Anzeige
AW: ...ja - dann geht's... aber warum?
02.04.2011 13:14:51
Matthias
Hallo
Also ne Erklärung kann ich Dir leider nicht liefern,
aber immerhin kannst Du ja jetzt Deine Blätter erstellen.
In meinem Test habe ich bis 1000 Blätter ohne Problem erstellt
Ich habe es allerdings etwas anders geschrieben als es in Deiner Datei steht.


Option Explicit
Dim i&, ii&, j&, jj&, m&, zZ&
Sub NeuesBlatt()
Dim NewWS As Worksheet
Set NewWS = ThisWorkbook.Worksheets("Master")
zZ = 150 'Schleifen-Ende für die Anzahl der Kopien definieren
Application.EnableEvents = False
Application.ScreenUpdating = False
Application.Calculation = xlManual
MsgBox "Kopiere " & zZ & " x das Masterblatt ..." & vbLf & "Fortschrittsanzeige ( in Statusbar ) _
For j = 1 To zZ
NewWS.Copy after:=ThisWorkbook.Worksheets(ThisWorkbook.Worksheets.Count)
With ActiveSheet
.Name = j
.Shapes("btnNeuesBlatt").Delete
If Application.Version  "9.0" Then .Tab.ColorIndex = -4142 'nicht in XL2000
End With
Application.StatusBar = j & " von " & zZ & " fertig"
Next
Application.StatusBar = False
MsgBox "Kopieren fertig" & vbLf & "Es erfolgt jetzt die Macrozuweisung der Objekte"
For m = 3 To ThisWorkbook.Worksheets.Count
With Worksheets(m)
Application.StatusBar = m & " von " & ThisWorkbook.Worksheets.Count & " fertig"
For i = 2 To 4
.Shapes("Dropd" & i).OnAction = "Druckverf"
Next
End With
Next
Application.EnableEvents = True
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
Application.StatusBar = False
Tabelle2.Activate
MsgBox "fertig :o)"
End Sub
Sub Druckverf()
MsgBox "Hallo"
End Sub



Das Ganze ist ohne Fehlerroutine natürlich etwas anfälliger als mit Fehlerroutine.
So beginne ich z.B mit For m = 3 to ...
Das muss man natürlich beachten und bei Bedarf anpassen.
Auch Dir ein schö.WE.
Gruß Matthias
Anzeige
kleiner Vorschlag,
02.04.2011 13:23:23
Tino
Hallo,
kopiere die erste Tabelle und mach alle Formatierungen, Objekte löschen usw…
Dann nimmst Du dieses als Vorlage und kopierst dieses entsprechend oft. (2 To zZ)
Dadurch kannst Du einiges an Schleifen einsparen.
Gruß Tino
...danke für eure Hinweise...
02.04.2011 19:37:11
Jörg-HH
...ganz nebenbei hab ich dabei was über die Registerfarben in xl2000 gelernt :-)
Schönen Sonntag!
Jörg
WOW....
02.04.2011 20:11:35
Jörg-HH
...und was soll ich euch sagen...
bei 55 Blatt is Sense :-)) auch mit dem geänderten Code
also - fertichstellen in Handarbeit und Ursachenforschung später...
200 Blätter mit 2 Schleifen ...
01.04.2011 19:22:08
Matthias
Hallo
erste Ergebnisse:
Bei meinem Nachbau (der natürlich nicht 100% realistisch ist - nur mit den 4 Shapes)
konnte ich das Blatt Master (200 - 250 x) kopieren.


Nur Nebenbei:
With ActiveSheet habe ich jeweils vor die erste Schleife gesetzt.
Option Explicit
Sub NeuesBlatt()
Dim NewWS As Worksheet
Dim sh As Shape
Dim NewName As String
Dim i As Long
Dim ii As Long
Dim j As Long
Dim jj As Long
Set NewWS = ThisWorkbook.Worksheets("Master")
MsgBox "Starte Test"
Application.EnableEvents = False
Application.ScreenUpdating = False
Application.Calculation = xlManual
For j = 1 To 150
NewWS.Copy after:=ThisWorkbook.Worksheets(ThisWorkbook.Worksheets.Count)
With ActiveSheet
For i = 2 To 4
.Shapes("Dropd" & i).OnAction = "Druckverf"
Next i
.Name = j
'.Tab.ColorIndex = -4142'Test XL2000
.Shapes("btnNeuesBlatt").Delete
End With
Next j
MsgBox "Ende 1. Test"
For jj = 151 To 250
NewWS.Copy after:=ThisWorkbook.Worksheets(ThisWorkbook.Worksheets.Count)
With ActiveSheet
For ii = 2 To 4
.Shapes("Dropd" & ii).OnAction = "Druckverf"
Next ii
.Name = jj
'.Tab.ColorIndex = -4142'Test XL2000
.Shapes("btnNeuesBlatt").Delete
End With
Next jj
MsgBox "Ende Test"
Application.EnableEvents = True
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
End Sub
Sub Druckverf()
MsgBox "Hallo"
End Sub


https://www.herber.de/bbs/user/74244.xls
Gruß Matthias
Anzeige
EXCEL-Bug
03.04.2011 16:43:24
Jörg-HH
Hallo Erich und alle anderen
nun sehe ich, daß das ja schon öfter diskutiert wurde. Danke für die Links, Erich.
Ich hatte dazu gestern noch jmd gefragt, der mir sagte, daß dies ein uralter und nie behobener Bug ist. Er hat aktuell einen Code geschrieben, der das Problem umgeht, indem man sich auf das kopieren in 30-Blatt-Häppchen in eine neue Datei beschränkt, diese 30 dann in die Orig-Datei überträgt, die neue Datei fein säuberlich abschießt und dann die nächsten 30 Blättchen in Angriff nimmt.
Schönen Rest-Sonntag!
Jörg
Sub NeuesBlatt()
Dim i As Integer
Dim j As Integer
Dim k As Integer
Dim idx As Integer
Dim AnzahlBlätter As Integer
Dim NewWS As Worksheet
Dim sh As Shape
Dim NewName As String
Dim wb As Workbook
Dim arrSheets() As String
Dim nam As Name
Dim ws As Worksheet
Set NewWS = ThisWorkbook.Worksheets("Master")
Application.EnableEvents = False
Application.ScreenUpdating = False
Application.Calculation = xlManual
'Funktion: Alle 30 Blätter ne neue Arbeitsmappe aufmachen,
'          alle Blätter erzeugen und auf einmal in diese (Thisworkbook) Mappe kopieren.
'          Anschließend neue Mappe schließen und sorgfältig wieder aus dem Speicher löschen
'hier die gewünschte Anzahl an Blätter eintragen:
AnzahlBlätter = 65
idx = 0
For i = 1 To AnzahlBlätter \ 30 + 1     'Teilen durch 30 ohne Rest + 1!
Set wb = Application.Workbooks.Add()
For j = 1 To 30     '30 ist beliebig aber funktioniert - wichtig ist  "9.0" Then .Tab.ColorIndex = -4142 'nicht in XL2000
.Shapes("btnNeuesBlatt").Delete
.Shapes("btnFormateInRegister").Delete
.Shapes("btn AutoRep").Delete
If j > 1 Then
ReDim Preserve arrSheets(1 To UBound(arrSheets, 1) + 1)
Else
ReDim arrSheets(1 To 1)
End If
arrSheets(UBound(arrSheets, 1)) = wb.ActiveSheet.Name
End With
If idx = AnzahlBlätter Then Exit For  'wenn Blattanzahl erreicht, Schleife verlassen
Next j
For j = wb.Names.Count To 1 Step -1
wb.Names(j).Delete      'globale Namen löschen, sonst kommt die ewige Abfrage bei jedem  _
Namen
Next j
wb.Sheets(arrSheets).Copy After:=ThisWorkbook.Worksheets(ThisWorkbook.Worksheets.Count)
wb.Close SaveChanges:=False
Set wb = Nothing
Next i
For k = ThisWorkbook.Names.Count To 1 Step -1
Set nam = ThisWorkbook.Names(k)
If Left(nam.RefersTo, 5) = "=#REF" Then
ThisWorkbook.Names(k).Delete      'Namen ohne Bezug gleich löschen
'Namen des Masterblatts als lokale Namen in alle Blätter setzen, die mit einer Zahl anfangen
ElseIf InStr(1, nam.RefersTo, "Master") > 0 Then
For Each ws In ThisWorkbook.Worksheets
If IsNumeric(ws.Name) Then
ws.Names.Add nam.Name, Replace(Replace(nam.Value, "Master", "'" & ws.Name & "'"), "''",  _
"'")
End If
Next
End If
Next k
NewWS.Activate
Application.EnableEvents = True
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
End Sub

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige