Anzeige
Archiv - Navigation
1960to1964
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

Laufzeitfehler '1004':

Laufzeitfehler '1004':
23.01.2024 23:42:46
Kamochan
Hallo Zusammen,

zu aller erst möchte ich mich einmal erwähnen, dass ich mich zwar recht gut in Excel auskenne, jedoch kompletter Neuling in VBA bin.
Ich habe mir zahlreiche Videos dazu angeschaut und habe bereits erste Schritte erfolgreich geschafft... (Naja aus meiner Sicht zumindest) :D.
Ich hoffe, das ich alle notwendigen Informationen hier erfasst habe und das mir wer pfiffiges weiter helfen kann.
Vielen Dank

Szenario:
Ich habe eine Datei, in dieser möchte ich via VBA Daten aus einer anderen Datei kopieren und einfügen.
Das ganze so, dass man es nicht alles sieht und mit Arbeitsblättern die geschützt sind und es danach auch wieder sein sollen.
Die Bereiche für die Kopierten Werte so wie die Range sind bekannt und ändern sich nicht.
Am Ende soll er mir das ganze noch mit einer Messagebox bestätigen.
Ergänzend: Das Löschen des Zwischenspeichers hatte ich nachträglich eingefügt, da ich vermutet habe, dass was im Zwischenspeicher blockt.
Mittlerweile vermute ich aber das es am Dateinamen liegt, dass dort noch was drin steht und er damit ein Problem hat (ist aber nur meine unwissende Vermutung)

Problem:
Mein gebasteltes Makro funktioniert zwar, jedoch bekomme ich bei jeder 2. Ausführung des Makros irgendwann einen Fehler.
Führe ich das Makro danach ein 3. mal aus, funktioniert es wieder. Eben nur jede 2. Ausführung nach einer erfolgreichen Ausführung nicht.

Fehler:
Laufzeitfehler '1004': Die PasteSpecial-Methode des Range-Objektes konnte nicht ausgeführt werden.
Leider konnte ich für meinen konkreten Fall keine Lösung finden, weshalb ich mich als Community Neuling an euch wende.

Makro:



Sub WochenImport()

Dim Dateiname As Variant
Dim wbQuelle As workbook
Dim LetzteZeile As Long



'ScreenUpdateing und PopUps deaktivieren
Application.ScreenUpdating = False
Application.DisplayAlerts = False

'Benutzer Datei auswählen lassen
Dateiname = Application.GetOpenFilename(FileFilter:="Excel-Dateien (*.xlsm),*.xlsm")

'Wurde eine Datei ausgewählt?
If Dateiname > False Then

LetzteZeile = ThisWorkbook.Worksheets(4).Cells(Rows.Count, 1).End(xlUp).Row

'Arbeitsmappe öffnen
Set wbQuelle = Workbooks.Open(Filename:=Dateiname)

'Daten kopieren
wbQuelle.Worksheets(4).Range("G1:H16").Copy

'Aktuelles Datenblatt entsperren
ThisWorkbook.Worksheets(4).Unprotect Password:="xxx"

'Daten einfügen
ThisWorkbook.Worksheets(4).Range("A" & LetzteZeile + 1).PasteSpecial xlPasteAll

'Lösche Inhalt des Zwischenspeichers
Application.CutCopyMode = False

'Aktuelles Datenblatt sperren
ThisWorkbook.Worksheets(4).Protect Password:="xxx"

'Arbeitsmappe schließen
wbQuelle.Close SaveChanges:=False

' Tabellenblatt wechseln
ThisWorkbook.Worksheets(3).Activate

'Nachrichtenfenster für erfolgreichen Import
MsgBox "Import erfolgreich beendet", vbInformation


Else
'Nachrichtenfenster für nicht erfolgten Import
MsgBox "Keine Datei ausgewählt.", vbExclamation

End If

'ScreenUpdateing und PopUps deaktivieren
Application.ScreenUpdating = True
Application.DisplayAlerts = True



End Sub


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

Betreff
Datum
Anwender
Anzeige
AW: Laufzeitfehler '1004':
24.01.2024 00:09:06
onur
Der Zwischenspeicher bleibt nicht ewig erhalten. Bei einigen Aktionen wie z.B. einfach nur "Datei speichern" (oder auch "Blatt sperren/entsperren") wird der Speicher wieder geleert.
Deswegen: Kopieren und ohne Umwege sofort wieder einfügen
sieht als code so aus
24.01.2024 08:34:53
MCO
Moin!

Ich hab den Code mal etwas zusammengefasst und den Vorschlag von Onur eingebaut
Sub WochenImport()


Dim Dateiname As Variant
Dim wbQuelle As Workbook
Dim LetzteZeile As Long
Dim twb As Worksheet


'ScreenUpdateing und PopUps deaktivieren
Application.ScreenUpdating = False
Application.DisplayAlerts = False

'Benutzer Datei auswählen lassen
Dateiname = Application.GetOpenFilename(FileFilter:="Excel-Dateien (*.xlsm),*.xlsm")

'Wurde eine Datei ausgewählt?
If Dateiname > False Then

Set twb = ThisWorkbook.Worksheets(4)
LetzteZeile = twb.Cells(Rows.Count, 1).End(xlUp).Row
twb.Unprotect Password:="xxx" 'Aktuelles Datenblatt entsperren

Set wbQuelle = Workbooks.Open(Filename:=Dateiname) 'Arbeitsmappe öffnen
wbQuelle.Range("G1:H16").Copy twb.Range("A" & LetzteZeile + 1) 'Daten kopieren 'Daten einfügen
wbQuelle.Close SaveChanges:=False 'Arbeitsmappe schließen

twb.Protect Password:="xxx" 'Aktuelles Datenblatt sperren
ThisWorkbook.Worksheets(3).Activate ' Tabellenblatt wechseln

'Nachrichtenfenster für erfolgreichen Import
MsgBox "Import erfolgreich beendet", vbInformation

Else
'Nachrichtenfenster für nicht erfolgten Import
MsgBox "Keine Datei ausgewählt.", vbExclamation
End If

'ScreenUpdating und PopUps aktivieren
With Application
'.ScreenUpdating = True 'am ende vom Code unnötig
.DisplayAlerts = True
.CutCopyMode = False 'Lösche Inhalt des Zwischenspeichers
End With
End Sub


Gruß, MCO
Anzeige
AW: sieht als code so aus
24.01.2024 14:48:14
Kamochan
Hallo MCO,

auch vielen Dank vorab an Onur.
Ich habe es mal ausprobiert, allerdings einen Fehler bekommen.
Konnte diesen aber finden.
        wbQuelle..Range("G1:H16").Copy twb.Range("A" & LetzteZeile + 

Kam es zum Fehler 438:

Mir viel beim Nachvollziehen auf, dass er gar keine Worksheet Zuweisung hat.
Diese habe ich eingetragen und nun funktioniert es genauso, wie es soll.
        wbQuelle.Worksheets(4).Range("G1:H16").Copy twb.Range("A" & LetzteZeile + 

Vielen lieben Dank!

Problem solved
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige