20. januar 2012 - 11:05Der 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?
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
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
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
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
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.
Lukkes - jeg benytter udsnitsværktøj nu, så problemer er ikke mere aktuelt
Synes godt om
Ny brugerNybegynder
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.