Waarom komt “Plakmethode van werkbladklasse niet” soms voor?

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 DoEventsdie 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
...

Other episodes