Avatar billede micaud Mester
20. januar 2012 - 11:05 Der er 5 kommentarer og
1 løsning

Langsom VBA i excel 2010

Hej.

Jeg har opgraderet fra 2003 til 2010 og det giver store problemer med hastigheden på min VBA kode.

Jeg har følgende kode i Excel:

Jeg starter med følgende for at optimere hastigheden:

Application.ScreenUpdating = False
ActiveSheet.PivotTables("Pivottabel1").ManualUpdate = True
    With Application
        .Calculation = xlManual
    End With

Herefter koden, som er uhyr langsom i Excel 2010, hvor det tager 38 sekunder, men i Excel 2003 tager det blot 1 sekund:


Public Sub OPB(op As Object, NR As String) 'AFDELINGER
Starttid = Now
'On Error Resume Next
A = 1
    With ActiveSheet.PivotTables("Pivottabel1").PivotFields("Butik")
        .Orientation = xlPageField
    End With
        With ActiveSheet.PivotTables("Pivottabel1").PivotFields("Butik")
            Y = .PivotItems.Count
            .PivotItems(Y).Visible = True
        End With
If NR = "0" Then
   
    With ActiveSheet.PivotTables("Pivottabel1").PivotFields("Butik")
        For X = 1 To .PivotItems.Count
                .PivotItems(X).Visible = True
        Next
                .PivotItems("51").Visible = False
                .PivotItems("61").Visible = False
                .PivotItems("70").Visible = False
                .PivotItems("72").Visible = False
                .PivotItems("74").Visible = False
    End With

Else

If op = True Then
    With ActiveSheet.PivotTables("Pivottabel1").PivotFields("Butik")
        For X = 1 To .PivotItems.Count
            NR1 = .PivotItems(X).Name
            If NR1 = NR Then
                .PivotItems(X).Visible = True
    Else
                .PivotItems(X).Visible = False
    End If
        Next
    End With
End If
End If
A = 0
MsgBox "Opdateringen er færdig og varede " & FormatDateTime(Now - Starttid, vbLongTime)
End Sub

Hvad gør jeg for, at det kører ligeså hurtig i Excel 2010 som i 2003?
Avatar billede kabbak Professor
20. januar 2012 - 14:11 #1
prøv at se om denne vil køre om det gør nogen forskel, ved jeg ikke.

Public Sub OPB(op As Object, NR As String)    'AFDELINGER
    Starttid = Now
    'On Error Resume Next
    A = 1
    With ActiveSheet.PivotTables("Pivottabel1").PivotFields("Butik")
        .Orientation = xlPageField
        Y = .PivotItems.Count
        .PivotItems(Y).Visible = True

        If NR = "0" Then
            For X = 1 To .PivotItems.Count
                .PivotItems(X).Visible = True
            Next
            .PivotItems("51").Visible = False
            .PivotItems("61").Visible = False
            .PivotItems("70").Visible = False
            .PivotItems("72").Visible = False
            .PivotItems("74").Visible = False

        Else

            If op = True Then

                For X = 1 To .PivotItems.Count
                    NR1 = .PivotItems(X).Name
                    If NR1 = NR Then
                        .PivotItems(X).Visible = True
                    Else
                        .PivotItems(X).Visible = False
                    End If
                Next
            End With
        End If
    End If
    A = 0
    MsgBox "Opdateringen er færdig og varede " & FormatDateTime(Now - Starttid, vbLongTime)
End Sub
Avatar billede kabbak Professor
20. januar 2012 - 14:11 #2
Prøv at se om den vil køre, om den er bedre ved jeg ikke.

Public Sub OPB(op As Object, NR As String)    'AFDELINGER
    Starttid = Now
    'On Error Resume Next
    A = 1
    With ActiveSheet.PivotTables("Pivottabel1").PivotFields("Butik")
        .Orientation = xlPageField
        Y = .PivotItems.Count
        .PivotItems(Y).Visible = True

        If NR = "0" Then
            For X = 1 To .PivotItems.Count
                .PivotItems(X).Visible = True
            Next
            .PivotItems("51").Visible = False
            .PivotItems("61").Visible = False
            .PivotItems("70").Visible = False
            .PivotItems("72").Visible = False
            .PivotItems("74").Visible = False

        Else

            If op = True Then

                For X = 1 To .PivotItems.Count
                    NR1 = .PivotItems(X).Name
                    If NR1 = NR Then
                        .PivotItems(X).Visible = True
                    Else
                        .PivotItems(X).Visible = False
                    End If
                Next
            End With
        End If
    End If
    A = 0
    MsgBox "Opdateringen er færdig og varede " & FormatDateTime(Now - Starttid, vbLongTime)
End Sub
Avatar billede kabbak Professor
20. januar 2012 - 14:13 #3
End With, skal flyttes

Public Sub OPB(op As Object, NR As String)    'AFDELINGER
    Starttid = Now
    'On Error Resume Next
    A = 1
    With ActiveSheet.PivotTables("Pivottabel1").PivotFields("Butik")
        .Orientation = xlPageField
        Y = .PivotItems.Count
        .PivotItems(Y).Visible = True

        If NR = "0" Then
            For X = 1 To .PivotItems.Count
                .PivotItems(X).Visible = True
            Next
            .PivotItems("51").Visible = False
            .PivotItems("61").Visible = False
            .PivotItems("70").Visible = False
            .PivotItems("72").Visible = False
            .PivotItems("74").Visible = False

        Else

            If op = True Then

                For X = 1 To .PivotItems.Count
                    NR1 = .PivotItems(X).Name
                    If NR1 = NR Then
                        .PivotItems(X).Visible = True
                    Else
                        .PivotItems(X).Visible = False
                    End If
                Next
        End If
    End If
    End With
    A = 0
    MsgBox "Opdateringen er færdig og varede " & FormatDateTime(Now - Starttid, vbLongTime)
End Sub
Avatar billede kabbak Professor
20. januar 2012 - 14:22 #4
Generelt er jeg enig i at både 2007 og 2010 versioner er betydelig langsommere end 2003.

Jeg har alle 3 versioner, men bruger faktisk 2003 til at programmere med, i de andre kan man jo altid sætte koden ind.

Jeg kunne godt lide at vide hvordan man forhindre den nyeste i at lukke .xls filer op,når man klikker på dem, dem vil jeg jo gerne have i 2003 versionen
Avatar billede micaud Mester
30. januar 2012 - 17:41 #5
Hej Kabbak.

Det virker desværre ikke, det er forsat langt langsommere.

Øv det er det eneste regneark, som jeg manger at konvertere, men også det vigtigste.

Ja, jeg har også blot konverteret, men det er jo meget uheldigt, at det tager så meget længere tid.

Min rapportering vil nu tage 15-20 minutter mod før 3 minutter.
_____________________________________________

Mht. til xls filer, så havde jeg samme problem, og jeg kunne ikke via stifinder tvinge den til at bruge 2003.

Løsningen for mig var at afinstallere og installere version 2003 på ny, og det virker fint, så nu åbner xls-filer automatisk i 2003, og xlsm og xlsx åbner i 2010 versionen.
Avatar billede micaud Mester
19. februar 2014 - 20:45 #6
Lukkes - jeg benytter udsnitsværktøj nu, så problemer er ikke mere aktuelt
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
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

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