Enige context: de volgende macro opent het meest recente bestand in de opgegeven map. Ik probeer alle gegevens in het nieuw geopende blad naar een ander werkblad te kopiëren. Soms, en alleen soms, krijg ik een 1004-foutmelding.
“Plakmethode van werkbladklasse mislukt”.
Soms werkt de macro. Ik kan niet vaststellen waarom dit gebeurt.
Kan iemand problemen met de code identificeren?
Het klembord wissen werkt soms, maar niet altijd.
Ook heb ik verschillende macro’s zoals deze (gekoppeld aan verschillende mappen) in een grotere macro gebruikt. Ik loop af en toe tegen hetzelfde probleem aan.
Sub ImportOldRates()
'Declare the variables
Dim MyPath As String
Dim MyFile As String
Dim LatestFile As String
Dim LatestDate As Date
Dim LMD As Date
'Specify the path to the folder
MyPath = "C:\Folder1\Folder2\"
'Make sure that the path ends in a backslash
If Right(MyPath, 1) <> "\" Then MyPath = MyPath & "\"
'Get the first Excel file from the folder
MyFile = Dir(MyPath & "*.xls", vbNormal)
'If no files were found, exit the sub
If Len(MyFile) = 0 Then
MsgBox "No files were found...", vbExclamation
Exit Sub
End If
'Loop through each Excel file in the folder
Do While Len(MyFile) > 0
'Assign the date/time of the current file to a variable
LMD = FileDateTime(MyPath & MyFile)
'If the date/time of the current file is greater than the latest
'recorded date, assign its filename and date/time to variables
If LMD > LatestDate Then
LatestFile = MyFile
LatestDate = LMD
End If
'Get the next Excel file from the folder
MyFile = Dir
Loop
'Open the latest file
Workbooks.Open MyPath & LatestFile
Application.DisplayAlerts = False
Application.EnableEvents = False
Application.Run "ConnectChartEvents"
Cells.Select
Range("E2").Activate
Selection.copy
ActiveWindow.Close
ActiveSheet.PasteSpecial Format:="Unicode Text", Link:=False, _
DisplayAsIcon:=False, NoHTMLFormatting:=True
Application.CutCopyMode = False
Selection.Columns.AutoFit
Range("A1").Select
Application.DisplayAlerts = True
Application.EnableEvents = True
End Sub
Antwoord 1, autoriteit 100%
Dit zou beter passen als commentaar, maar ik wilde mijn twee cent toevoegen en heb nog niet de mogelijkheid om hier commentaar te geven.
Ik kom af en toe een soortgelijke fout tegen in macro’s die ik gebruik om grafieken uit Excel te kopiëren en in PowerPoint-presentaties te plakken; voor mij tenminste, de fout treedt af en toe op wanneer de macro probeert te plakken in PPT, wat me doet geloven dat het probleem ligt bij het schakelen tussen het Excel-programma en het PPT-programma.
Omdat ik te lui was om een effectievere manier te bedenken om afbeeldingen naar PPT te brengen, heb ik de onderstaande regel toegevoegd om de fout in de meeste gevallen te voorkomen.
Application.Wait (Now + TimeValue("0:00:01"))
Ik heb dit toegevoegd onmiddellijk voordat de oproep wordt gedaan om naar PPT te gaan, en het heeft het optreden van de fout aanzienlijk verminderd (ik krijg het nu zeer zelden, en als ik dat doe, werkt het opnieuw uitvoeren van de macro prima). Het dwingt de macro in feite om te stoppen en 1 seconde te wachten voordat hij verder gaat, zodat de programma’s kunnen inhalen voordat ze proberen de gegevens te plakken. Er zijn meer directe manieren om dit in theorie te bereiken, zoals DoEvents
die de macro zouden moeten laten wachten tot de huidige processen zijn voltooid, maar dat heeft dit probleem nooit voor mij opgelost.
Antwoord 2, autoriteit 29%
Bedankt voor ieders bijdrage.
Het blijkt dat het probleem werd veroorzaakt door
Range("E2").Activate
Het kopiëren van het hele blad zou mijn systeemgeheugen soms uitputten en de kopieerfunctie doen mislukken. Voor de geïnteresseerden heb ik gewoon een kleiner assortiment gekozen.
Range("A1,Z400").Activate
Dit heeft het probleem verholpen
Antwoord 3
Ik heb dit probleem onlangs gehad en geen van de bovengenoemde oplossingen werkt voor mij volledig consistent. Ik heb een oplossing gevonden die ik in deze thread wilde plaatsen.
Het implementeren van foutafhandeling om zowel het kopiëren als het plakken opnieuw te proberen, lijkt de meest consistente oplossing. De meer conservatieven onder ons willen misschien ook een teller implementeren die het aantal nieuwe pogingen beperkt tot misschien 100 of zo.
Dit loste mijn fouten op en aangezien de garbagecollection in Excel op zijn best dubieus is, is dit misschien wel de beste beschikbare oplossing.
Antwoord 4
Ik heb hetzelfde probleem gehad en de Copy & Plakken in “DoEvents” deed het voor mij. Er is een fout opgetreden terwijl ik een voortgangsbalk had in een gebruikersformulier dat zichzelf bijwerkte tijdens het uitvoeren van een for-loop.
...
DoEvents
Worksheets(1).Rows(i).Copy
Worksheets(2).Range("A" & i).PasteSpecial xlPasteAll
DoEvents
...