fout code, maar er is geen fout!

Status
Niet open voor verdere reacties.

robbie5454

Gebruiker
Lid geworden
23 jun 2003
Berichten
27
Hallo,
Ik heb een macro in excel gemaakt die data plakt in een aantal bestanden, en vervolgens van die bestanden een PDF maakt.
Deze macro werke altijd goed tot een paar weken geleden, ik krijg nu op random plekken foutmeldingen, vaak is het fout 1004, maar volgens mij heb ik ook andere meldingen voorbij zien komen. Als ik vervolgens op foutoplossing klik en dan meteen de code verder laat draaien (dmv F5) is er niks aan de hand, en er was dan dus ook geen fout in de lijn die hij aangaf! Ik snap niet hoe dit kan... Het stukje code waar de fouten in worden aangewezen is:
De foutmelding die ik nu krijg is in de regel workbooks.open: (Fout 1004: Methode Open van Object Workbooks is mislukt) maar er staat dus geen fout in deze regel, als ik de code verder run kan hij het bestand gewoon openen..

Code:
 Do While AantalToevoegen > 0
    If ActiveCell.Value = 1 Then
        bestandlocatie = ActiveCell.Offset(0, -7).Value & ActiveCell.Offset(0, -6).Value
        datum = ActiveCell.Offset(0, -5).Value
        pdflocatie = ActiveCell.Offset(0, 9).Value & ActiveCell.Offset(0, 10).Value & ActiveCell.Offset(0, 5).Value & ".pdf"
        ActiveCell.Offset(0, -5).Range("A1:E1").Copy
        Workbooks.Open Filename:=bestandlocatie
        Sheets(1).Select
        ActiveSheet.Range("A8").Select
        Selection.End(xlDown).Select
        ActiveCell.Offset(1, 0).Range("A1").Select
        Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
               :=False, Transpose:=False
        ActiveCell.Offset(-1, 5).Range("A1:Q1").Copy
        ActiveCell.Offset(0, 5).Range("A1").Select
        ActiveSheet.Paste
            Sheets(2).Select
            With ActiveSheet.PageSetup
                 .LeftFooter = datum
                 .CenterFooter = "TEKST ONDER GRAFIEK." & Chr(10)
                 .RightFooter = "NAAM"
            End With
            ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
            pdflocatie _
            , Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas _
            :=False, OpenAfterPublish:=True
        ActiveWorkbook.Save
        ActiveWindow.Close
        AantalToevoegen = AantalToevoegen - 1
    End If
    ActiveCell.Offset(1, 0).Range("A1").Select
Loop
 
Als een macro het eerst probleemloos doet, en daarna niet (altijd) meer, dan komt dat vaak doordat er iets in de configuratie is veranderd, o.i.e.d. Als de macro in de Stap modus wel goed werkt, dan zou het kunnen zijn dat er een snelheidsprobleempje is. Op het moment dat een actie moet worden uitgevoerd, is de vorige bijvoorbeeld nog niet afgerond, waardoor de volgende niet kan starten. Door de code regel voor regel uit te voeren, is er uiteraard voldoende tijd om alles te starten, en is er geen probleem meer. Probeer eens een pauze in te bouwen, met bijvoorbeeld dit loopje:

Code:
TijdLoop:
    Start = 0        'Om te voorkomen dat de programmatuur zich verslikt, een kleine pauze van 1 seconde...
    Start = Timer    ' Aanvangstijd instellen.
    Do While Timer < Start + 1
        DoEvents     ' Overdragen aan andere processen.
    Loop
Return
In je code zet je dan:
Code:
       GoSub TijdLoop              'Een kleine pauze van 1 seconde...
 
Macro's met meerdere werkmappen en referenties als activecell, activesheet, select etc werken meestal minder solide dan het gebruik van variabelen. als je met Range variabelen werkt, dan werken .offset() en dergelijke commando's altijd, al heb je 100 werkmappen open. zolang je maar naar het juiste object refereert. Ik heb het geposte deel van de macro geprobeerd te herschrijven met het gebruik van objectvariabelen (range, worksheet)

Lost dit je probleem op?

Code:
Dim wbTarget As Workbook
Dim rCurrentcell As Range
Dim rCopy As Range
Dim rTarget As Range

Set rCurrentcell = ActiveCell

Do While AantalToevoegen > 0
 
    If rCurrentcell.Value = 1 Then
        
        With rCurrentcell
        
            Bestandlocatie = .Offset(0, -7).Value & _
                             .Offset(0, -6).Value
            datum = .Offset(0, -5).Value
            pdflocatie = .Offset(0, 9).Value & _
                         .Offset(0, 10).Value & _
                         .Offset(0, 5).Value & ".pdf"
            Set rCopy = Range(.Offset(, -5), .Offset(, -1))
            
        End With
        
        Set wbTarget = Workbooks.Open(Bestandlocatie)
        Set rTarget = wbTarget.Sheets(1).Range("A8").End(xlDown).Offset(1, 0)
        
        With rTarget
            .Resize(, 5) = rCopy.Value
            .Offset(-1, 5).Resize(, 17).Copy Destination:=.Offset(0, 5)
        End With
        
        With wbTarget.Sheets(2)
            
            With .PageSetup
                 .LeftFooter = datum
                 .CenterFooter = "TEKST ONDER GRAFIEK." & Chr(10)
                 .RightFooter = "NAAM"
            End With
            .ExportAsFixedFormat Type:=xlTypePDF, _
                                 Filename:=pdflocatie, _
                                 Quality:=xlQualityStandard, _
                                 IncludeDocProperties:=True, _
                                 IgnorePrintAreas:=False, _
                                 OpenAfterPublish:=True
        End With
        
        wbTarget.Close True
        
        AantalToevoegen = AantalToevoegen - 1
        
    End If
    
    Set rCurrentcell = rCurrentcell.Offset(1, 0)
    
Loop

Set wbTarget = Nothing
Set rTarget = Nothing
Set rCopy = Nothing
Set rCurrentcell = Nothing
 
Bedankt voor de reacties! Ik zal morgen laten weten of het gewerkt heeft!
 
Hoi Robbie,

met welke excel-versie werk je? Bij Excel2007 is er een vervelende bug waarbij je altijd - dus ook als het goed gaat - fout 9 krijgt bij het openen van een workbook of het activeren van een geopend workbook. Misschien speelt er hier ook iets dergelijks en moet je een work around verzinnen.

Groet,

VBAmateur
 
Probleem opgelost!

Dankzij de code van MarkXL is het probleem opgelost! Hartelijk dank mark!

Ik begrijp alleen niet precies waarom de functies activecell, activesheet etc niet werken. Deze zouden het toch ook gewoon moeten doen, is dit dan een fout van Microsoft?
 
Ik kan niet je hele macro zien, maar het kan zijn dat tijdens het lopen van een macro een ander scherm wordt geactiveerd. Het meest ideale is dan ook dat je altijd objectvariabelen gebruikt in plaats van activesheet/activecell e.d.

In dat geval werken je macro's namelijk altijd..., ongeacht het actieve werkblad..
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan