Hej Jupp Det funka! Tack så mycket! Hej Igen Ytterliggare Eftersom du verkar vara så väldans kvällspigg av dig... Joho du.. Det gick skapligt mycket fortare.. Har inte vågat köra med stora filen än men 500 rader gick på kanske 10 sekunder mot 30 innan.. Hej igen Hittade felet men förstår inte riktigt varför det är så... HejSkärmuppdatering..
Hur gör man enklast om man vill uppdatera en label som innehåller radnr samtidigt som man fyller en flexgrid.
Det är så jäkla många poster så jag måste på nåt sett visa hur långt jag kommit och om jag bara ändrar värdet för labeln händer ingenting förrän den räknat färdigt, men det kan ta en 20-30min..
Mvh
RickardSv: Skärmuppdatering..
Förmodligen räknar du i någon form av loop
Där lägger du in ett DoEvents och omedelbart före eller blir
det efter ? testa båda alternativen.
Label1 = radNr
mvh
SvenSv: Skärmuppdatering..
Men.....
Det går så förbenat mycket långsammare då eftersom den ritar om hela fönstret för varje rad som trillar in i Flexgriden. Och det är närmare 80.000 vilket ger ungefär 40 min istället för 7.
Går det inte att bara uppdatera den lilla lilla Labeln? Allt annat får se skit ut om det vill..
Mvh
RickardSv: Skärmuppdatering..
Du får kosta på dig att göra FlexGriden.Visible = False
Precis före du startar loopen och sedan Visible = True
när alla uträkningar är klara.
Du får visa en trevlig bild under tiden med "Vänta Jag Räknar"
mvh
Sven
Kolla tiden så ser du vilken oehörd skillnad det blir
DSSv: Skärmuppdatering..
En annan sak som du skall anlysera noga , är om du kan
göra förberäkningar innan du startar loopen.
Använd så många konstanter som möjligt är.
Vidare om du har sinus cosinus beräkningar så
lägger du in alla värde för varje grad eller halvgrad
som du behöver för noggrannhet i en Array.
Hämta från arrayen istället för att beräkna i varje loop.
Om du känner för det kan jag hjälpa till att anlyser dina
formler för optimering.
mvh
SvenSv: Skärmuppdatering..
Du behöver inte göra DoEvents i varje slinga
lägg in en räknare tex i = i +1
If i > 100 then
DoEvents
i = 0
Label1 = radNr
End if
DSSv: Skärmuppdatering..
Så kanske du kan lista ut varför den här loopen först räknar upp till sista posten säg 15 och sedan helt plötsligt hoppar ner till 10 igen och sen går upp till 15 och avslutar...
Ska testa dina förslag med visible..
Dim a As Double
Dim c As Double
Dim Max As Double
Public Sub PrintFile()
Max = Form1.vsFlexGrid1.Rows - 1
' =========================================
Open "c:\edi.txt" For Output As #1
Print #1, "8;7;"
head = "H;" & rad & "-1"
' =========================================
For a = 1 To Max
Phonenr = Form1.vsFlexGrid1.Cell(flexcpText, a, 0) ' Från Telnr
Product = Form1.vsFlexGrid1.Cell(flexcpText, a, 9) ' Artikel i Visma
duration = Form1.vsFlexGrid1.Cell(flexcpText, a, 4) ' Samtalslängd
cost = Form1.vsFlexGrid1.Cell(flexcpValue, a, 5) ' Kostnad samtal
FactCustno = Form1.vsFlexGrid1.Cell(flexcpValue, a, 8) ' Faktureras kundnr i Vismaa
Actorno = Form1.vsFlexGrid1.Cell(flexcpValue, a, 11) ' Aktörsnr i Visma
For c = a To Max - 1
If Phonenr = Form1.vsFlexGrid1.Cell(flexcpText, c + 1, 0) Then
duration = Val(Form1.vsFlexGrid1.Cell(flexcpText, c + 1, 4)) + Val(duration)
cost = Val(Form1.vsFlexGrid1.Cell(flexcpValue, c, 5)) + Val(cost)
If c = Max - 1 Then
Print #1, Actorno & " " & Phonenr & " " & duration & " " & cost
End If
Else
Print #1, Actorno & " " & Phonenr & " " & duration & " " & cost
a = c
Exit For
End If
Next
' If a = Max Then
' Print #1, Actorno & " " & Phonenr & " " & duration & " " & cost
'End If
Next
Close #1
End Sub
Tack, Tack, Tack!!
//RSv: Skärmuppdatering..
Tyvärr måste jag göra en del eländiga saker i loopen, bla en sqlfråga som jag inte kommer ifrån... Pust och stön... 8 timmar till deadline... hua.. Men jag är nästan färdig med en alfaalfa som kanske håller att provköra..
Rickard, Killen med koll på kalendern...Sv: Skärmuppdatering..
Gjorde en simulation på ditt loop problem men kan
inte få fram 10 15 problemmet. Du kan själv kolla om
det klarna med denna simulation.
Dvs när PhoneNr stämmer och kanske stämmer två ggr ?
Option Explicit
Private Sub Command1_Click()
Dim a As Double
Dim c As Double
Dim Max As Double
Dim Phonenr As String 'dummy
Max = 500
Phonenr = "50022273"
' =========================================
'Open "c:\edi.txt" For Output As #1
'Print #1, "8;7;"
'head = "H;" & rad & "-1"
' =========================================
For a = 1 To Max
'.............................
'..............................
For c = a To Max - 1
If c = 15 Then 'dummy simulation
Phonenr = "50022272"
End If
If Phonenr = "50022272" Then
'Form1.vsFlexGrid1.Cell(flexcpText, c + 1, 0) Then
'.......................................
If c = Max - 1 Then
'Print #1, Actorno & " " & Phonenr & " " & duration & " " & cost
Label1 = c
End If
Else
'Print #1, Actorno & " " & Phonenr & " " & duration & " " & cost
Label2 = a
a = c
Exit For
End If
Next ' c
Next 'a
'Close #1
End Sub
mvh
SvenSv: Skärmuppdatering..
Om den ger sig in i loop två så vet jag ju att det är flera rader innan den ska skriva ut någon rad. när den sen går ur den loopen så får den a=c dvs att den ska skita i dom raderna i den stora loopen. Men det verkar den tappa bort så fort den är ute i den stora loopen. så jag flyttade ut det till efter next och då gick det bra.
Gäller variabler för såna räknare bara innom resp loop? Verkar så..
Iallfall, nöjd och glad på alla sätt och kunden också.. Tack, Tack!
/RickardSv: Skärmuppdatering..
>Gäller variabler för såna räknare bara innom resp loop? Verkar så..
Nej variablen lever tills allt är utfört i SubRutinen utan Error
Okidoki du har fixat det
ha det
Sven