Fetstil Fetstil Kursiv Understrykning linje färgläggning tabellverk Punktlista Nummerlista Vänster Centrerat högerställt Utfyllt Länk Bild htmlmode
  • Forum & Blog
    • Forum - översikt
      • .Net
        • asp.net generellt
        • c#
        • vb.net
        • f#
        • silverlight
        • microsoft surface
        • visual studio .net
      • databaser
        • sql-server
        • databaser
        • access
        • mysql
      • mjukvara klient
        • datorer och komponenter
        • nätverk, lan/wan
        • operativsystem
        • programvaror
        • säkerhet, inställningar
        • windows server
        • allmänt
        • crystal reports
        • exchange/outlook
        • microsoft office
      • mjukvara server
        • active directory
        • biztalk
        • exchange
        • linux
        • sharepoint
        • webbservers
        • sql server
      • appar (win/mobil)
      • programspråk
        • c++
        • delphi
        • java
        • quick basic
        • visual basic
      • scripting
        • asp 3.0
        • flash actionscript
        • html css
        • javascript
        • php
        • regular expresssion
        • xml
      • spel och grafik
        • DirectX
        • Spel och grafik
      • ledning
        • Arkitektur
        • Systemutveckling
        • krav och test
        • projektledning
        • ledningsfrågor
      • vb-sektioner
        • activeX
        • windows api
        • elektronik
        • internet
        • komponenter
        • nätverk
        • operativsystem
      • övriga forum
        • arbete karriär
        • erbjuda uppdrag och tjänster
        • juridiska frågor
        • köp och sälj
        • matematik och fysik
        • intern information
        • skrivklåda
        • webb-operatörer
    • Posta inlägg i forumet
    • Chatta med andra
  • Konto
    • Medlemssida
    • Byta lösenord
    • Bli bonsumedlem
    • iMail
  • Material
    • Tips & tricks
    • Artiklar
    • Programarkiv
  • JOBB
  • Student
    • Studentlicenser
  • KONTAKT
    • Om pellesoft
    • Grundare
    • Kontakta oss
    • Annonsering
    • Partners
    • Felanmälan
  • Logga in

Hem / Forum översikt / inlägg

Posta nytt inlägg


VBA suger 100% CPU och hoppar över lästa celler

Postades av 2007-10-09 21:42:44 - Bo Bjurman, i forum microsoft office, Tråden har 5 Kommentarer och lästs av 1668 personer

Hej varför hämtar den inte ca: 1/3 av cellerna från filen EABnyaPriser.xls
Loop rad skall stega upp 1 rad i excels primärdokument,
Loop rad2 skall söka igenom hela EABnyaPriser.xls för att få träff på artikelnumret som den läst i primärdokumentet,
Vid träff på numret skall priset hämtas från EABnyapriser.xls till pris cellen i primärdokumentet.
När jag lagt in en räknare så verkar det som att den får träff på artikelnumret men priset hämtas aldrig över till primärdokumentet.
Dokumenten innehåller drygt 8000 excelrader vardera.

Vad är det för fel ?

Här är programsnutten, jag har remarkat de nedre raderna som inte behövs.

Dessutom går programmet så segt att Excel till och från lägger av och startar upp igen, den slukar på direkte 100 procent cpu-kraft
PS! när jag klipper ur 25 rader i vardera worksheeten och kör dessa 25, verkar det fungera klickrent, även när jag kör med F8 manuellt verkar det fungera, jag fattar ingenting.

Private Sub kopiera1_Click()
Dim rad As Integer
Dim rad2 As Integer

For rad = 1 To Range("BB10000").End(xlUp).Row
A2 = 0
For rad2 = 1 To 8271



If Range("BB" & rad) = Workbooks("EABnyaPriser.xls").Worksheets(1).Range("A" & rad2) Then
Range("AY" & rad) = Workbooks("EABnyaPriser.xls").Worksheets(1).Range("F" & rad2)
Range("BG" & rad) = Workbooks("EABnyaPriser.xls").Worksheets(1).Range("G" & rad2)
A2 = A2 + 1

ElseIf A2 < 1 And rad2 = 8271 Then
Rem Range("AY" & rad) = "saknas"
Rem Range("AY" & rad + 10020) = Workbooks("EABnyaPriser.xls").Worksheets(1).Range("F" & rad)
Rem Range("BB" & rad + 10020) = Workbooks("EABnyaPriser.xls").Worksheets(1).Range("A" & rad)
Rem Range("C" & rad + 10020) = Workbooks("EABnyaPriser.xls").Worksheets(1).Range("B" & rad)
Rem Range("E" & rad + 10020) = Workbooks("EABnyaPriser.xls").Worksheets(1).Range("G" & rad)

End If
Next rad2
Next rad
End Sub


Svara

Sv: VBA suger 100% CPU och hoppar över lästa celler

Postades av 2007-10-10 10:38:41 - Niklas Jansson

Koden är väldigt rörig och det är därför svårt att se vad det är frågan om.

Men några uppenbara kommentarer:
1. Det mest troliga felet är att något är skumt med "A2"-grejen. Men eftersom den heter A2 så har jag ingen aning om vad det är eller syftet...
2. Det näst mest troliga felet är att du har rader längre ner än 10000, och att det finns ett hål någonstans i listan.
3. Att det tar sån tid beror på att du har så inihelvete stora loopar. Potentiellt 8271*10000= 82 miljoner jämförelser, och dessutom massa tunga cellreferenser.
4. Du bör absolut inte använda Range("BB" & ...), det lämpliga är att köra med .cells(rad, "BB") eller helst "BB" uttryckt som kolumnpositionen.
5. Använd aldrig Rem. Kör i så fall med '
6. Använd aldrig en fast siffra, såsom 8271, om det ska användas i mer än ett sammanhang.
7. Referera till worksheets en enda gång.

Så, till att börja med:
<code>
Private Sub kopiera1_Click()
Dim rad As Integer
Dim rad2 As Integer
Dim ws as Worksheet
Set ws = Workbooks("EABnyaPriser.xls").Worksheets(1)
For rad = 1 To Range("BB65535").End(xlUp).Row
A2 = 0
For rad2 = 1 To 8271
If Cells(rad, "BB") = ws.Cells(rad2, "A") Then
Cells(rad, "AY") = ws.Cells(rad2, "F")
Cells(rad, "BG") = ws.Cells(rad2, "G")
A2 = A2 + 1
End If
Next rad2
Next rad
End Sub
</code>

Nu är det ju plötsligt möjligt att läsa koden... Och även att debugga.

För att snabba upp det nu finns det två sätt:
1. Använd excels inbyggda funktion Range.Find för att hitta matchningar.
2. Sortera båda listorna först, och ha bara en loop. Det innebär att du måste hålla två variabler som får gå "i synk". Detta ger i allmänhet den högsta prestandavinsten.

Om du måste ha dem i ursprunglig ordning efteråt är det också lätt att fixa. Kommer du inte på hur, kan du fråga.


Svara

Sv:VBA suger 100% CPU och hoppar över lästa celler

Postades av 2007-10-11 17:23:16 - Bo Bjurman

Tack för tipsen,
Jag vill helst inte röra dokumenten sorteringsmässigt.
A2 är bara en true eller false för att känna av om man skall skriva artikeln saknas eller lägga till en artikel som saknas, bara en tillfällig grej, det är lika om jag tar bort A2 historien.
Jag verkar inte ha några hål, har kollat alla rader och checkat hur långt den sätter loop värdet och det verkar stämma.

Som sagt att bara peta på filöppning en gång som du säger verkar intressant.


Svara

Sv: VBA suger 100% CPU och hoppar över lästa celler

Postades av 2007-10-11 19:39:08 - Niklas Jansson

Sorteringen fixar du genom att först skapa en ny kolumn SortOrder, där du skriver i 1,2, osv. Sen sorterar du etc. enligt tidigare kommentar. När allt är klart sorterar du på kolumnen SortOrder.

Problemet har då förmodligen att göra med mellanrum före och efter, och gemener/versaler. Prova att köra trim(ucase(...)) på båda sidor i jämförelsen.

Annars får du kolla vilka rader som inte kommer med, och sen ta in en liten mängd rader, där just de ingår, stega igenom och se varför de inte kommer med.


Svara

Sv:VBA suger 100% CPU och hoppar över lästa celler

Postades av 2007-10-16 16:49:57 - Dennis Wallentin

Niklas,

Om rad o rad2 deklareras som Long istället för Integer så blir det inga problem om antalet överstiger ca 32000 rader. Oavsett det så går det litet snabbare med Long istället för med Integer.

(I övrigt så får vi något att "bita" i när Excel 2007 används och där någon säger jag har 895000 rader!)

Mvh
Dennis


Svara

Sv: VBA suger 100% CPU och hoppar över lästa celler

Postades av 2007-10-16 17:18:07 - Niklas Jansson

Det var inte integer som var problemet, det var att 10000 var hårdkodat som den översta gränsen.


Svara

Nyligen

  • 14:24 CBD regelbundet?
  • 14:23 CBD regelbundet?
  • 14:22 Har du märkt några verkliga fördel
  • 09:09 Vill du köpa medicinska tester?
  • 12:47 Vem beviljar assistansen – kommune
  • 14:17 Någon med erfarenhet av hemstädnin
  • 14:14 Bör man använda sig av en båtförme
  • 14:12 Finns det någon intressant hundblo

Sidor

  • Hem
  • Bli bonusmedlem
  • Läs artiklar
  • Chatta med andra
  • Sök och erbjud jobb
  • Kontakta oss
  • Studentlicenser
  • Skriv en artikel

Statistik

Antal besökare:
Antal medlemmar:
Antal inlägg:
Online:
På chatten:
4 569 615
27 953
271 709
591
0

Kontakta oss

Frågor runt konsultation, rådgivning, uppdrag, rekrytering, annonsering och övriga ärenden. Ring: 0730-88 22 24 | pelle@pellesoft.se

© 1986-2013 PelleSoft AB. Last Build 4.1.7169.18070 (2019-08-18 10:02:21) 4.0.30319.42000
  • Om
  • Kontakta
  • Regler
  • Cookies