Mycket inlägg från mig nu! :) <br><br> Niklas, >Ja, jag blir alldeles svettig av alla dina intrikata frågor ;-) Niklas, Jag förstår vad du menar med namn, men jag kan inte se att jag tjänar något på det. Niklas, <code> Nicklas, Ok, tac! XL vill inte visa värden
Jag har en egen funktion - SheetSum som ser ut så här:<br>
<code>
Public Function SHEETSUM(Address As Range, SheetNames As Range)
Application.Volatile
Dim r As Range
On Error Resume Next
If IsArray(SheetNames) Then
For Each r In SheetNames
SHEETSUM = SHEETSUM + Worksheets(r.Value).Cells(Address.Row, Address.Column)
Next
End If
On Error GoTo 0
End Function
</code>
Det jag vill göra nu är att använda funktionen i ett kalkylblad. <br>
Problemet är att funktionen är så långsam, och jag använder den på så många ställen, att jag inte har tid att anropa den om och om igen.<br>
<br>
Då tänkte jag att jag uppdaterar sidan med dessa summor vid ett speciellt tillfälle (när man skall se summorna), och därför satte jag EnableCalculation = False på det blad som har alla summorna.
<br>
Jag tänkte sedan att när man gör en grej på ett annat blad så kalkylerar jag den. Så här ser den koden ut (jag kunde inte bestämma mig för vilken jag skulle ta with på, så jag tog båda) :
<code>
If shtHistory.Range("Unit") = "Total VGT" Then
If shtTotal.bUpdateTotal Then
shtHistory.EnableCalculation = False
shtTotal.EnableCalculation = True
shtTotal.Calculate
shtTotal.EnableCalculation = False
shtHistory.EnableCalculation = True
shtHistory.Calculate
End If
ElseIf shtHistory.Range("Unit") = "Total VGT + PT" Then
If shtTotalPt.bUpdateTotalPT Then
shtHistory.EnableCalculation = False
shtTotalPt.EnableCalculation = True
shtTotalPt.Calculate
shtTotalPt.EnableCalculation = False
shtHistory.EnableCalculation = True
shtHistory.Calculate
End If
End If
</code>
Själva logiken är det nog inget fel på.
Problemet är att Excel inte vill uppdatera alls. När jag beräknar delresultat med F9 får jag fram rätt siffror, men själva i rutan händer ingenting.
<br><br>
Någon som vet nåt?
<br><br>
/Niklas JanssonSv: XL vill inte visa värden
Ja, jag blir alldeles svettig av alla dina intrikata frågor ;-)
Utan att ha närmare fördjupat mig i din kod så funderar jag på
om inte du skulle använda dig av:
Application.Calculation = xlCalculationManual
Application.Calculation = xlCalculationAutomatic
Worksheets(1).Calculate
Händelsen
Sub Worksheet_Deactivate()
Din funktion summerar celler i ett flertal blad i den aktiva arbetsboken. Personligen skulle jag nog nyttja XL:s inbyggda SUMMA-funktion och koppla formeln till ett namn istället.
Nu ska jag ta dagens första kaffe så får vi se om min hjärna kommer igång idag också :-)
Mvh
XL-DennisSv: XL vill inte visa värden
He he...
Vad gäller Application.Calculation så är det problem eftersom det finns det andra blad som jag behöver kalkylera under tiden. Det är bara två som inte skall kalkyleras.
Jag har funderat på SUM (använder engelsk version), men hur menar du att jag skulle göra med namn?
Det rör sig om 2 x 300 summor, där varje summa går till nio eller tio blad.
Kanske med någon matrisfunktion? Tyvärr är jag rätt kass på såna. :)
/Niklas JanssonSv: XL vill inte visa värden
>Det är bara två som inte skall kalkyleras.
Du kan skapa en array med de arbetsblad som ska kalkyleras och sedan loppa igenom arrayen för att initiera beräkningen.
For i = 1 to Ubound(Array)
Worksheets(i).Calculate
next i
Hm, 2 x 300 summor låter det....
Kan du inte skapa mellanformler som drar ned på storleken per formel men där antal formler ökar istället. Det kan påverka prestandan positivt.
Nej, matrisfunktioner fungerar bästa på mindre datamaterial - De påverkar en hel del prestandan negativt så du slipper denna gång :-)
Namn:
Ett namn kan referera till cell(er), konstanter och funktioner/formler.
Exempelvis:
Namn: SUMMERING
Refererar till: =SUM(SUM(.......),SUM(....),SUM(......),SUM(......))
(Använd F2-tangenten när du bygger formeln i dialogrutan)
För att använda formeln så ange följande i en cell:
=SUMMERING
För riktigt stora datamängder kan detta också påverka prestandan positivt.
Hoppas det hjälper dig med ditt problem, åtminstone genom att påvisa de möjligheter vi har.
Mvh
XL-Dennis
Psd. Även funktionen DSUM kan vara ett alternativt DSSv: XL vill inte visa värden
Den summa du får fram är ju bara en summa av massvis med summor. Det är väl ok, men jag behöver en summa per cell i flera blad.
Summa!A1="=SHEETSUM(A1, AllaBlad)"
Där AllaBlad är ett namn på en range med namnen på bladen.
Jag skall sedan ha denna formel i 2 x 300 rutor, och de behövs bara beräknas ibland.
Jag löste det ändå. Det är lite segt, men det är amerikanare som skall ha det och de är ganska sega :->.
/Niklas JanssonSv: XL vill inte visa värden
>Det är väl ok, men jag behöver en summa per cell i flera blad.
Bra att du löste det men det är alltid bra att var tydlig o fullständig i beskrivningen - Ovanstående kunde i alla fall jag inte utläsa.
Mvh
XL-Dennis Sv: XL vill inte visa värden
|----------------
|Blad 1
| |-----------------
| |Blad 2
| |
| |
|----------------
|SummaBlad
|
|
|
</code>
A1 i SummaBlad = A1 i Blad1 + A1 i Blad2 ...<br>
A2 -"- = A2 -"- + A2 -"-<br>
...<br>
<br>
(Inte just A1 och A2, men ni fattar poängen)<br>
<br>
Nåväl. Finns det något vettigare sätt vill jag gärna veta det. Det är ganska långsamt.<br><br>
/Niklas JansonSv: XL vill inte visa värden
Det var en snygg presentation du gör - Dessutom i 3-D ;-)
Följande är hämtat från min webbplats:
Kalkylbladsberäkningar
Har man flera kalkylblad som t ex ska summeras ihop finns det olika sätt att lösa det på.
Anta att man vill summera värden i cellen A1 från kalkylbladen "Blad1" t o m "Blad4": =SUMMA(Blad1:Blad4!A1)
Om namn på de kalkylblad man vill utföra beräkningar på är av samma namntyp, t ex "Blad"x, så kan en annorlunda inmatning av formeln avsevärt reducera tiden. Genom att ange =SUMMA(Blad?!A1) så genererar XL resultatet =SUMMA(Blad1:Blad4!A1).
Tillägg:
Om vi har skapat formeln =SUMMA(Blad1:Blad4!A1) så kan vi kopiera den nedåt i kolumnen och då refereras A2, A3 i bladserien.
Mvh
XL-DennisSv: XL vill inte visa värden
Det visste jag faktiskt inte. Men funkar det om namnen är
Cab, Chassis, osv?
/Niklas Jansson