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

Excel maakt er bij de 2e keer runnen script een zootje van....

Status
Niet open voor verdere reacties.

willie76

Gebruiker
Lid geworden
6 nov 2010
Berichten
124
Forumleden,

Ik heb een vba-script gemaakt om een bepaald groot analyse rapport in excel te zetten, waarbij ik op verschillende tabbladen de verschillende analyses onderbreng.
Uiteindelijk wil ik een tijdsgrafiek maken van alle gevonden resultaten.

Echter,

Als ik de eerste keer het script run doet ie precies zoals het bedoeld is, maar als ik het script een tweede keer run, zet excel de ranges e.d. allemaal anders weg.
Hierdoor lopen mn index-functies in het werkblad in de war en krijg ik als resultaat overal n/a#

Ik heb echt geen flauw idee waarom het de eerste keer WEL lukt (mn script werkt dus !!!) en de 2e volgende keren niet !!!!!

Wie kan me helpen ????

De code is:
Code:
Private Sub CommandButton1_Click()

'' Opent de HTML-file uit de geseletceerde directory ''
Workbooks.Open Filename:="K:\tmp\MR2\PIQT raporten\SPT report.htm"
    ActiveSheet.Range("A1:H464").Select
    Selection.Copy
    Application.DisplayAlerts = False
    ActiveWorkbook.Close False
    Application.DisplayAlerts = True
    
''Er wordt een tijdelijk werkblad aangemaakt om de html-file te herschikken''
    Sheets("SPT report").Activate
    Sheets.Add.Name = "Tijdelijk"
    Sheets("Tijdelijk").Select
    ActiveSheet.Range("A1").Select
    ActiveSheet.Paste
    Sheets("SPT report").Visible = True

'De HTML-file wordt geherschikt op het tijdelijke tabblad''
    Sheets("Tijdelijk").Activate
    ActiveWindow.SmallScroll Down:=45
    ActiveSheet.Range("B64:G97").Select
    Selection.Cut
    ActiveWindow.SmallScroll Down:=-66
    ActiveSheet.Range("H15").Select
    ActiveSheet.Paste
    ActiveWindow.SmallScroll Down:=45
    ActiveSheet.Rows("49:98").Select
    Selection.Delete Shift:=xlUp
    ActiveWindow.SmallScroll Down:=45
    ActiveSheet.Range("B102:G127").Select
    Selection.Cut
    ActiveWindow.SmallScroll Down:=-39
    ActiveSheet.Range("H62").Select
    ActiveSheet.Paste
    ActiveWindow.SmallScroll Down:=15
    ActiveSheet.Rows("88:128").Select
    Selection.Delete Shift:=xlUp
    ActiveWindow.SmallScroll Down:=-123
    ActiveSheet.Range("A1").Select
   
 ''Het herschikte rapport wordt in z'n geheel gekopieerd naar de tabblad SPT report''
    ActiveSheet.Range("A1:M373").Select
    Selection.Copy
    Sheets("SPT report").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Sheets("SPT report").Range("A1").Select
    Application.CutCopyMode = False
   
''Het tijdelijke tabblad wordt gedelete''
    Application.DisplayAlerts = False
    Sheets("Tijdelijk").Delete
    Application.DisplayAlerts = True
    
    Sheets("SPT report").Select
    ActiveSheet.Range("A1").Select
    
''De verschillende onderdelen worden vanuit het report naar de specifieke tabbladen en geplaatst in de eerstvolgende lege regel''
Sheets("Flood Field Uniformity temp").Visible = True
    Sheets("Flood Field Uniformity temp").Select
    ActiveSheet.Range("A2:J7").Copy
    Sheets("Flood Field Uniformity temp").Visible = False
    
    Sheets("Flood Field Uniformity").Select
    Set NextRow = ActiveSheet.Cells(Cells.Rows.Count, 1).End(xlUp).Offset(1, 0)
    NextRow.Select
    Selection.PasteSpecial (xlValues), Transpose:=False
    ActiveSheet.Range("A1").Select
    
    Sheets("Spatial Linearity temp").Visible = True
    Sheets("Spatial Linearity temp").Select
    ActiveSheet.Range("A2:W2").Copy
    Sheets("Spatial Linearity temp").Visible = False
  
Sheets("Spatial Linearity").Select
    Set NextRow = ActiveSheet.Cells(Cells.Rows.Count, 1).End(xlUp).Offset(1, 0)
    NextRow.Select
    Selection.PasteSpecial (xlValues), Transpose:=False
    ActiveSheet.Range("A1").Select
    
Sheets("Slice Profile temp").Visible = True
    Sheets("Slice Profile temp").Select
    ActiveSheet.Range("A2:G4").Copy
    Sheets("Slice Profile temp").Visible = False
  
Sheets("Slice Profile").Select
    Set NextRow = ActiveSheet.Cells(Cells.Rows.Count, 1).End(xlUp).Offset(1, 0)
    NextRow.Select
    Selection.PasteSpecial (xlValues), Transpose:=False
    ActiveSheet.Range("A1").Select

Sheets("Spatial Resolution temp").Visible = True
    Sheets("Spatial Resolution temp").Select
    ActiveSheet.Range("A2:E3").Copy
    Sheets("Spatial Resolution temp").Visible = False
  
Sheets("Spatial Resolution").Select
    Set NextRow = ActiveSheet.Cells(Cells.Rows.Count, 1).End(xlUp).Offset(1, 0)
    NextRow.Select
    Selection.PasteSpecial (xlValues), Transpose:=False
    ActiveSheet.Range("A1").Select
    
''Het report wordt "onzichtbaar" gemaakt''
Sheets("SPT report").Visible = False

''De gegevens worden gesorteerd op naam, datum en echo-nr''
    ActiveWorkbook.Worksheets("Flood Field Uniformity").Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("Flood Field Uniformity").Sort.SortFields.Add Key:= _
        Range("A2:A1000"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
        xlSortNormal
    ActiveWorkbook.Worksheets("Flood Field Uniformity").Sort.SortFields.Add Key:= _
        Range("C2:C1000"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
        xlSortNormal
    With ActiveWorkbook.Worksheets("Flood Field Uniformity").Sort
        .SetRange Range("A2:J10000")
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
        ActiveSheet.Range("A1").Select
    End With

 ActiveWorkbook.Worksheets("Slice Profile").Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("Slice Profile").Sort.SortFields.Add Key:= _
        Range("A2:A1000"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
        xlSortNormal
    ActiveWorkbook.Worksheets("Slice Profile").Sort.SortFields.Add Key:= _
        Range("C2:C1000"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
        xlSortNormal
    With ActiveWorkbook.Worksheets("Slice Profile").Sort
        .SetRange Range("A2:G10000")
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
        ActiveSheet.Range("A1").Select
    End With

 ActiveWorkbook.Worksheets("Spatial Resolution").Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("Spatial Resolution").Sort.SortFields.Add Key:= _
        Range("A2:A1000"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
        xlSortNormal
    ActiveWorkbook.Worksheets("Spatial Resolution").Sort.SortFields.Add Key:= _
        Range("C2:C1000"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
        xlSortNormal
    With ActiveWorkbook.Worksheets("Spatial Resolution").Sort
        .SetRange Range("A2:E10000")
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
        ActiveSheet.Range("A1").Select
    End With
    
''De datum wordt van text-format omgezet in datum-format voor alle werkbladen''

Sheets("Flood Field Uniformity").Activate
ActiveSheet.Range("B2:B10000").Select
    Selection.TextToColumns Destination:=Range("B2"), DataType:=xlDelimited, _
        TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=True, Tab:=False, _
        Semicolon:=False, Comma:=False, Space:=True, Other:=False, FieldInfo _
        :=Array(1, 4), TrailingMinusNumbers:=True
        Selection.NumberFormat = "dd/mm/yyyy"

Sheets("Spatial Linearity").Activate
ActiveSheet.Range("B2:B10000").Select
    Selection.TextToColumns Destination:=Range("B2"), DataType:=xlDelimited, _
        TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=True, Tab:=False, _
        Semicolon:=False, Comma:=False, Space:=True, Other:=False, FieldInfo _
        :=Array(1, 4), TrailingMinusNumbers:=True
        Selection.NumberFormat = "dd/mm/yyyy"
        
Sheets("Slice Profile").Activate
ActiveSheet.Range("B2:B10000").Select
    Selection.TextToColumns Destination:=Range("B2"), DataType:=xlDelimited, _
        TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=True, Tab:=False, _
        Semicolon:=False, Comma:=False, Space:=True, Other:=False, FieldInfo _
        :=Array(1, 4), TrailingMinusNumbers:=True
        Selection.NumberFormat = "dd/mm/yyyy"
        
Sheets("Spatial Resolution").Activate
ActiveSheet.Range("B2:B10000").Select
    Selection.TextToColumns Destination:=Range("B2"), DataType:=xlDelimited, _
        TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=True, Tab:=False, _
        Semicolon:=False, Comma:=False, Space:=True, Other:=False, FieldInfo _
        :=Array(1, 4), TrailingMinusNumbers:=True
        Selection.NumberFormat = "dd/mm/yyyy"
        
''Verspringen naar het eerste tabblad''
Sheets("beginscherm").Activate

 End Sub

Alvast bedankt voor alle hulp......

P.s. als deze post in het VBA-forum hoort, excuses alvast van mijn kant.
 
Dmv F8 kan je in de editor door de code lopen en dan zie je vanzelf waar het misgaat. Alle selects, Activate, SmallScroll Down, etc zijn ook niet nodig. Maar zijn denk ik niet direct de oorzaak van de fout. (ééntje misschien wel of juist het gemis daarvan.)
 
O ja, wellicht ten overvloede: 'Excel' heeft geen eigen wil.
 
Dank je wel VenA voor de tip, die kende ik nog niet.....

Maar het heeft me nog niet tot een oplossing geleid.
Als ik nl alle stappen doorneem, gata het nog steeds de eerste keer dat de html-file wordt ingeladen goed, terwijl de tweede keer het niet op dezelfde wordt gekopieerd en weggeschreven.
Als voorbeeld heb ik in de bijlage het eerste deel van het "gekopieerde" analyse-rapport bijgevoegd.
Op blad 1 is de situatie tijdens de 1e keer runnen van het script (stap voor stap met de F8 functie), op de blad 2 de situatie na de 2e keer runnen (stap voor stap met de F8 functie)....zie het verschil.......

En ik heb dus echt geen flauw idee waar em dat in zit dat het de tweede keer zo "anders" wordt weergegeven.
Ik heb ook de html-bron bestanden gecheckt en deze hebben, zoals verwacht, exact dezelfde opmaak.

De opmerking van snb neem ik maar aan dat dat als grap/komisch bedoelt is.....hahaha
 

Bijlagen

..een werkende workaround is om, na het runnen van het script, het bestand op te slaan -> excel af te sluiten -> excel opnieuw opstarten -> als je het script dan weer runt, gaat het ook op de juiste bedoelde wijze....
Maar dit is natuurlijk niet de bedoeling van het script.....
 
Waarom gebruik je htm bestanden en geen txt of csv bestanden ?
 
Omdat het apparaat wat het rapport "uitspuugd" alleen toestaat om de files op te slaan als htm-file......
Zou converteren dan een optie kunnen zijn als oplossing van t probleem ????
 
Kijk eerst eens of de uitspuger niet ook de optie txt of csv kent (wat ook voor het apparaat veel eenvoudiger is).

Als je een voorbeeld htm bestand hier plaatst kunnen we het gemakkelijk converteren zodat Excel geen lastige interpretatieproblemen heeft.
 
Laatst bewerkt:
Ik sluit mij de grappenmaker aan. Plaats het htm bestand eens. Volgens mij staat deze boordevol verborgen leestekens. In bv Sheet2 B4 lijkt "TypeMRL" te staan. In werkelijkheid staat hier "Type MRL" dus met een tab of spatie ertussen.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan