Live-Forum - Die aktuellen Beiträge
Datum
Titel
17.04.2024 18:57:33
17.04.2024 16:56:58
Anzeige
Archiv - Navigation
1416to1420
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
Listenauswertung - Laufzeitfehler 1004:
27.03.2015 13:04:49
Paul
Hallo zusammen,
ich versuche aus einer Auflistung / einem Protokoll in dem Arbeitsaufträge aus verschiedenen Gremien aufgeführt sind, per Makro einen "Report" zu erstellen, der wiederum an unterschiedliche Empfängerkreise verschickt werden soll.
D.h. es wird zum einen nach dem Gremium und zum anderen nach "erledigt/nicht erledigt" gefiltert und soll dann im selben Format in eine neue Excel Datei kopiert werden.
Die Filterung, Markierung und das Erzeugen einer neuen Datei bekomme ich mit folgendem Code gut hin. Allerdings bekomme ich bei PasteSpecial immer einen Laufzeitfehler 1004 ("Die PasteSpecial-Methode des Range-Objektes konnte nicht ausgeführt werden"). Offenbar wir mir der Zwischenspeicher immer geleert.

Sub Auftraege_kopieren()
Application.ScreenUpdating = False
Dim Gremium As String
Gremium = InputBox("Bitte das auszuwertende Gremium eingeben:", "AutoFilter")
Selection.AutoFilter Field:=1, Criteria1:=Gremium, Operator:=xlFilterValues
Selection.AutoFilter Field:=9, Criteria1:=Array("0", "1"), Operator:=xlFilterValues
ActiveSheet.Range("A1:J" & ActiveSheet.UsedRange.Rows.Count).SpecialCells(xlCellTypeVisible) _
.Copy
Call Report_erstellen
MsgBox ("Der Bericht wurde erstellt")
Call Filter_aufheben
Application.ScreenUpdating = True
End Sub
Sub Report_erstellen()
Dim Report As Workbook
Set Report = Workbooks.Add
Application.SheetsInNewWorkbook = 1
Application.Range("A1").PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=False
Application.Range("A1").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, _
Transpose:=False
ActiveSheet.PageSetup.PrintArea = Range("A1:J" & ActiveSheet.UsedRange.Rows.Count).SpecialCells( _
xlCellTypeVisible).Address
Report.SaveAs Environ("Userprofile") & "\Desktop" & InputBox("Bitte den Namen des Reports  _
eingeben:") & ".xlsx"
ActiveWindow.Close
End Sub
Sub Filter_aufheben()
Selection.AutoFilter Field:=1
Selection.AutoFilter Field:=9
End Sub
Kann mir irgendjemand weiterhelfen oder hat eine Idee, wie ich das vereinfachen kann?
Viele Grüße
Paul

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Listenauswertung - Laufzeitfehler 1004:
27.03.2015 13:15:50
Rudi
Hallo,
versuch's mal so
Sub Report_erstellen()
Dim Report As Workbook
Set Report = Workbooks.Add(1)
Application.Range("A1").PasteSpecial _
Paste:=xlPasteFormats, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
Gruß
Rudi

AW: Listenauswertung - Laufzeitfehler 1004:
30.03.2015 09:01:39
Paul
Hallo Rudi,
danke erst einmal.
Prinzipiell funktioniert das. Allerdings kann ich aus irgendwelchen Gründen nur einmal PasteSpecial ausführen. Also entweder "xlPasteFormats" oder "xlPasteValues".
Kann man ggf. ein Template hinterlegen, so dass ich nur noch Werte und nicht mehr die ganzen Formatierungen kopieren muss?
Zusätzlich habe ich festgestellt, dass der Report über 30MB groß ist. Selbst wenn nur 8 Zeilen (10 Spalten) kopiert werden. Könnte das mit der "UsedRange" zusammen hängen? Habe eine bedingte Formatierung engebaut, die verhältnismäßig viele Zeilen anspricht.
Viele Grüße
Paul

Anzeige
AW: Listenauswertung - Laufzeitfehler 1004:
31.03.2015 13:54:55
fcs
Hallo paul,
die Verwendung von UsedRange kann problematisch sein, wenn Formatierungen außerhalb des eigentlichen Datenbereichs festgelegt wurden.
Für die Ermittlung der letzten Zeile mit Inhalt müssen dann andere Methoden verwendet werden.
Ich hab deine Makros mal etwas optimiert. Dabei wird immer die letzte Zeile mit Inhalt in Spalte A ermittelt, statt UsedRange zu benutzen.
Ein Template mit formatierungen für die kompletten Spalten und Seitenlay-Out könnte man auch verwenden, dann bräuchte man nur die Werte kopieren.
Gruß
Franz
Sub Auftraege_kopieren()
Application.ScreenUpdating = False
Dim Gremium As String, Zeile_L As Long
Gremium = InputBox("Bitte das auszuwertende Gremium eingeben:", "AutoFilter")
If Gremium = "" Then GoTo Beenden 'Abbrechen gewählt
Selection.AutoFilter Field:=1, Criteria1:=Gremium, Operator:=xlFilterValues
Selection.AutoFilter Field:=9, Criteria1:=Array("0", "1"), Operator:=xlFilterValues
With ActiveSheet
Zeile_L = .Cells(.Rows.Count, 1).End(xlUp).Row
.Range("A1:J" & Zeile_L).SpecialCells(xlCellTypeVisible).Copy
End With
If Report_erstellen(Gremium) = True Then
MsgBox "Der Bericht wurde erstellt und gespeichert"
Else
MsgBox "Der Bericht wurde erstellt, aber nicht gespeichert"
End If
Call Filter_aufheben
Beenden:
Application.ScreenUpdating = True
End Sub
Function Report_erstellen(Gremium As String) As Boolean
Dim Report As Workbook, strName As String, Zeile_L As Long
Report_erstellen = False
'Neue Mappe mit einem Blatt öffnen
Set Report = Workbooks.Add(Template:=xlWBATWorksheet)
With Report.Sheets(1)
.Range("A1").PasteSpecial Paste:=xlPasteColumnWidths, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
.Range("A1").PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
.Range("A1").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
Zeile_L = .Cells(.Rows.Count, 1).End(xlUp).Row
.PageSetup.PrintArea = _
.Range("A1:J" & Zeile_L).Address
End With
'Vorschlag für Name
strName = Environ("Userprofile") & "\Desktop\Report " & Gremium _
& Format(Date, " YYYY-MM-DD") & ".xlsx"
'Speichern unter-Dialog anzeigen
Application.ScreenUpdating = True
If Application.Dialogs(xlDialogSaveAs).Show(strName, 51) = True Then '51 = xlsx-Format
Report.Close savechanges:=False
Report_erstellen = True
End If
Application.ScreenUpdating = False
End Function
Sub Filter_aufheben()
Selection.AutoFilter Field:=1
Selection.AutoFilter Field:=9
End Sub

Anzeige

318 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige