Avatar billede densortehingst Seniormester
05. januar 2019 - 15:53 Der er 1 løsning

pause / skærmopdatering

Kan jeg i en word makro lave en rutine / opdatering af skærmbilledet?
jeg har en makro, så løber i en løkke fra 1 til mange. Jeg laver en tabel på 10.000 rækker og lader min løkke fjerne de rækker der er tomme.
De første 5-6 rækker fjerne den og opdaterer skærmbilledet, men herefter arbejder den bare og man har ingen ide om, hvor langt den er kommet (før den er færdig). Det ville være smukt, hvis man lavede en løkke der sagde
for 1 to end
  slet række
  opdater skærmbillede
næste

eller sådan noget lignende :)
Avatar billede Lene Fredborg Ekspert
05. januar 2019 - 17:15 #1
Det er måske ikke nødvendigt at opdatere for hver række. Jo flere opdateringer, jo længere tid tager det at afvikle koden. Du kan udnytte Mod operator til kun af gennemføre opdateringen efter et vist antal rækker/med et vist interval. Hvis du f.eks. i løkken, der kalder sletning af rækker, bruger en tæller (her blot en variabel med navnet n), kan du et passende sted i løkken indsætte kode:

If n Mod 10 = 0 Then
    Application.ScreenRefresh
End If

Koden virker sådan: Hvis n divideret med 10 giver en rest på 0, vil Application.ScreenRefresh blive udført og dermed opdatere skærmen. Skærmen bliver dermed kun opdateret, hver gang n er ændret med 10. Udskift 10 med en passende værdi.

Måske du har brug for at slå skærmopdatering til også, hvis den er slået fra – du må prøve dig frem:

If n Mod 10 = 0 Then
    With Application
        .ScreenUpdating = True
        .ScreenRefresh
        .ScreenUpdating = False
    End With
End If


Måske du også har brug for at indsætte kode, som flytter markøren til passende sted i dokumentet ved hver opdatering af skærmen. Jo flere ting, du føjer til, og jo flere skærmopdateringer, der laves, jo længere tid vil koden tage om at blive afviklet.

Du kan godt placere opdateringskoden i f.eks. en separat, generel function, som du kalder fra løkken. Eksempel – her er både Mod-værdien og den aktuelle tæller brugt som parametre.

Function fncRefreshScreen(intMod As Integer, intCount As Integer)
    'intMod: how often to refresh
    'intCount: the actual counter value to check
    If intCount Mod intMod = 0 Then
        With Application
            .ScreenUpdating = True
            .ScreenRefresh
            .ScreenUpdating = False
        End With
    End If
End Function


Så kan du kalde din function på en af følgende måder:

Call fncRefreshScreen(10, n)
eller
fncRefreshScreen 10, n

Bemærk: Hvis du bruger Call, skal parameterværdierne i parentes.
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester