• Privacywetgeving
    Het is bij Helpmij.nl niet toegestaan om persoonsgegevens in een voorbeeld te plaatsen. Alle voorbeelden die persoonsgegevens bevatten zullen zonder opgaaf van reden verwijderd worden. In de vraag zal specifiek vermeld moeten worden dat het om fictieve namen gaat.

Fout 9 tijdens update routine

Status
Niet open voor verdere reacties.

Hans Gorter

Gebruiker
Lid geworden
27 okt 2008
Berichten
97
Op onze school worden rapportages gemaakt van leerlingen (in onderstaande code wkbOld met naam sFileOld). De layout verandert nog wel eens (wkbNew met name sFilenew) en nu heb ik een routine geschreven (thisworkbook) die zoveel doet als pak cel A1 uit wkbold en plak die in cel B7 in wkbNew. Tenslotte wordt wkbnew dan bewaard onder de oude naam en klaar is kees: het oude rapport is overgeheveld in de nieuwe layout.
In Thisworkbook staan op rijen in twee kolommen sOldRange en sNewrange
dus in eerste kolom staat A1, twee kolom B7. Uiteraard zijn er verschillende rijen daaronder die met een for next stuk voor stuk worden afgewerkt.

Bij de tweede doorloop (eerste keer werkt wel) , ontstaat Foutmelding 9 tijdens de uitvoering. Het subscript valt buiten het bereik
Op de regel die begint met .Copy.

Wie o wie weet wat de reden is? En vast bedankt voor uw aandacht


For Each objFile In objFolder.Files

sFileOld = sFiledirectory & objFile.Name



For x = 31 To 1000

ThisWorkbook.Activate

If WorksheetFunction.Trim(Cells(x, 3).Value) = "" Then
x = 1000
Else
sOldrange = Cells(x, 3).Value
sNewrange = Cells(x, 4).Value


If wkbNew Is Nothing Then
Set wkbNew = Workbooks.Open(Filename:=sFileNew, UpdateLinks:=False, ReadOnly:=False)
Else
Set wkbNew = Workbooks(sFileNew)
wkbNew.Activate
End If


If wkbOld Is Nothing Then
Set wkbOld = Workbooks.Open(Filename:=sFileOld, UpdateLinks:=True, ReadOnly:=True)
Else
Set wkbOld = Workbooks(sFileOld)
wkbOld.Activate
End If

With wkbOld.Worksheets(1).Range(sOldrange)
.Copy wkbNew.Worksheets(1).Range(sNewrange) 'hier ontstaat fout bij 2e doorloop
End With



End If
Next
 
Dat kan 'iets' simpeler:

Code:
Sub tst()
  For Each objFile In objFolder.Files
    With workbooks.add(objFile)
       ThisWorkbook.sheets(1).usedrange.columns(3).copy .sheets(1).[B31]
       .saveAs ......
       .close false
    End with
  Next
End Sub
 
re: Fout 9

Beste sns,

Zeer veel dank voor de code, die voor mij als beginner moeilijk leesbaar is.
Ik denk te begrijpen dat er nieuwe workbooks worden aangemaakt en dat is niet de bedoeling.

Ook ben ik geoon benieuwd wat de fout veroorzaakt. Omdat het bij de tweede keer gebeurt, moet het waarschijnlijk zijn dat deze code niet goed is
die immers de 2e keer wordt doorlopen.

(zelfde bij wkbnew).
Set wkbOld = Workbooks(sFileOld)
wkbOld.Activate

Nogmaals dank en misschien wilt u hier nog naar kijken.
 
Dank je wel voor je antwoord. Welk bereik bestaat dan niet meer? En hoe zou ik de code moeten aanpassen? en woon je in de buurt van Breda want dan kan ik je tenminste als dank iets te drinken aanbieden
 
Dat kan 'iets' simpeler:

Code:
Sub tst()
  For Each objFile In objFolder.Files
    With workbooks.add(objFile)
       ThisWorkbook.sheets(1).usedrange.columns(3).copy .sheets(1).[B31]
       .saveAs ......
       .close false
    End with
  Next
End Sub


Ik heb het geprobeerd te lezen en volgens mij wordt alles dat staat in thisworkbook gekopieerd naar workbooks.add(ojfile). Maar da's niet de bedoeling. Met de waardes die staan in thisworkbook moet hij (mijn code) de cellen kopieren van wkbOld naar wkbNew.
Met excuses als ik het verkeerd heb begrepen.
 
Dank je wel voor je antwoord. Welk bereik bestaat dan niet meer? En hoe zou ik de code moeten aanpassen? en woon je in de buurt van Breda want dan kan ik je tenminste als dank iets te drinken aanbieden

Zo te zien: sNewrange
Je kunt kijken met een onderbrekingsteken naar de betreffende regel.
Je zet een onderbrekingsteken in de kantlijn van de code op de betreffende regel en de macro stopt op dat punt. Dan kan je zien welke waardes gegeven worden.
Of je kijkt bij lokale variabelen welke waarde elke variabele heeft.

Stuur anders de benodigde bestanden naar mij op als je door de bomen het bos niet meer ziet.
Uiteraard zonder gevoelige informatie.

Neen, ik woon niet echt in buurt van Breda. Toch bedankt.:thumb::cool:

Met vriendelijke groet,


Roncancio
 
Wat ontzettend aardig van je. Bijgaand de bestanden. Bestand1 en Bestand2 (die je in een aparte directory moet zetten, op het userform moet je aangeven waar je ze neerzet) moeten dus de layout krijgen van RoosSjablolonDagrapportage. Het benodigde prg staat in Roos Updateprg Dagrapportage.

Ben heel benieuwd naar de oplossing en vast heel veel dank!
 

Bijlagen

  • Bestand 1.xls
    13,5 KB · Weergaven: 28
  • Bestand 2.xls
    13,5 KB · Weergaven: 17
  • Roos Updateprg Dagrapportage.xls
    87,5 KB · Weergaven: 21
  • RoosSjabloonDagrapportage.xls
    59 KB · Weergaven: 29
De code is beveiligd met een wachtwoord.
Dat kan ik wel kraken maar dat doe ik uit principe niet.

Met vriendelijke groet,


Roncancio
 
De code is beveiligd met een wachtwoord.
Dat kan ik wel kraken maar dat doe ik uit principe niet.

Met vriendelijke groet,


Roncancio

De layoutbestanden hebben een wachtwoord, mag je kraken maar aan die code heb je niets. De code in het Updateprg is niet beveiligd en daar zit de relevante code. Eenbeetje dom van mij dat niet te vermelden, excuses!
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan