16. oktober 2002 - 09:53Der er
19 kommentarer og 1 løsning
Den hænger når makroen kører.
Hej Eksperter.
Jeg sidder lidt i saksen! Den her makro jeg kører får excell til at gå ned. Hvad er der galt i den? Den er meget tung og kræver helt vildt meget. hvis det er det der er problemet, er der så en smartere måde at gøre det på?
Sub Dantextfil()
Dim XLws As Object Dim FileXLS As String Dim FileCSV As String Dim FileCSV2 As String Dim i As Integer
Set XLws = workbooks("Tilpasningsark til modelporteføljer.xls").Worksheets("CSV") FileXLS = "I:\Portman\Modelporteføljer\Tekstfiler\Pfhld.xls"
Derfor kan du vel godt debugge alligevel - sæt et par breakpoints ind, og se hvor det går galt. Alternativt smid en msgbox ind i hveranden linie - og norter hvilken msgbox der blev den sidst viste, inden excel crasher. Derudfra finder du linien hvor den fejlskabende kode er
tror det er i din while wend den ligger, det lydder som om den ikke stopper
jeg har et bud men ved ikke helt om det er det.......
i = 1 While LCase(XLws.Cells(i, 1).Value) <> "slut" Select Case XLws.Cells(i, 1).Text Case "" XLws.Rows(i).Delete i = i + 1 Case Else i = i + 1 End Select Wend
Et sted det ihertilfælde går galt er linien med filexist (med mindre det er en funktion du selv har lavet) FileExist er et Filesystemobject og kan ikke bruges som du skriver. Hvis du skal bruge det skal du indsætte denne linie Set FS = CreateObject("Scripting.FileSystemObject") og ændre If FS.FileExist(FileXLS) = True Then Kill FileXLS
En anden ide er i stedet for at kill filen så overskriv uden advarsel.:
Tubber har sikkert ret i at løkken vil køre helt i bund dvs til række 65536. Det kan ske fordi cellen med slut bliver sprunget over. Hvis vi antager at cellen med slut ligger i række 100 og rækken lige før slettes så bliver rækken med slut til række 99, men din tæller i vil være 100 og række 100 chekkes istedet for 99. Skal du slette linier så start fra bunden istedet for.
Bare for også at være ireterende - Han spørger vist ikke om hvordan man debugger, men om hvad fejlen er :OP
jeg ved ikke om det her virker i VBA, men det gør i VB, men i VB er der en der hedder Debug.Print, den udskriver det man vil have udskrevet i et debug vindue....
Der var temmeligt travlt efter jeg skrev dette indlæg, så jeg nåede ikke at kigge mere på det idag. Jeg løste problemet midlertidigt med at finde en gammel gemt kopi af arket frem. Så virkede det igen, men crashede hver tredje gang. Derfor er jeg stadig interesseret i at få løst problemet.
FileExist har jeg kodet selv, så det er ikke der fejlen ligger. Den anden ide er rimelig sandsynlig, da det er omkring der problemet opstår.(Det ville debugging selvfølgelig afsløre, men det har jeg ikke tid til lige foreløbig.:) Måske en gang i næste uge).
Der vil jeg også prøve det med løkken, men jeg tror ikke det er der fejlen er. For det første virker makroen nogle gange. For det andet går det så langsomt i Excell, at man kan se hvad der sker løbende, og det er før den begynder og slette noget at den går ned.
Det at makroen virker nogle gange, får mig måske til at tro at det er fordi at den kræver så meget (for den er MEGET tung at køre) at systemet ikke helt kan håndterer den.
Den kører med 100% af CPU'en i cirka 8 sekunder.
Jeg får ikke prøvet alt det her af, før i næste uge, men jeg håber i har tålmodiged og løbende kan hjælpe.
Hej... håber i stadig er der. Her i næste uge får jeg tid til at kigge på problemet. Jeg har arbejdet en del med arket i denne og sidste uge og det var ikke kill kommandoen den var gal med. Det går ned ca. hver tredje gang makroen kører, men hvis man lukker arket ned efter anden gang og så åbner det igen, virker det igen to gange. Hvorefter man så kan lukke det ned osv. Derfor tror jeg det er fordi den fylder et eller andet i cachen eller rammen som den ikke sletter bagefter. Lyder det ikke sandsynligt? derfor ville jeg hører om der er en kommando i VB som på en måde flusher rammen, som jeg så kunne putte ind til sidst i makroen.
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.