27. april 2007 - 11:29Der er
27 kommentarer og 1 løsning
lagkager automatisk ændring af størrelse
Jeg har et regneark som viser to løsninger på et problem. En før og en efter løsning. Jeg har så lavet to lagkager, en for hver løsning, som viser de omkostninger som tilhører hver løsning. Jeg vil så gerne vide om man kan få lagkagen for efter løsningen til automatisk at blive mindre eller større i omfang, alt efter hvor store omk. er. F.eks. hvis omk. i efter løsningen svarer til 80 % af omk. i før løsningen. Så skal lagkage nr. 2 kun være 80 % af størrelsen i forhold til lagkage 1.
Jeg har prøvet at sætte koden ind i et ark. Og den ser ud som følger
Private Sub Worksheet_Change(ByVal Target As Range) If Intersect(Target, Range("B2:B7", "D2:D7")) Is Nothing Then Exit Sub x1 = Application.WorksheetFunction.Sum([b2:b7]) y1 = Application.WorksheetFunction.Sum([d2:d7]) s = y1 / x1 * 100
x = ActiveSheet.Shapes("Diagram 1").Width / 100 * s y = ActiveSheet.Shapes("Diagram 1").Height / 100 * s ActiveSheet.Shapes("Diagram 2").Width = x ActiveSheet.Shapes("Diagram 2").Height = y
End Sub
Men når jeg ændrer på en værdi, så kommer den op med meddelelsen:
Run-time error '-2147024809 (80070057)': Emnet med det angivne navn blev ikke fundet.
Hvis man prøver at debugge er følgende linie markeret:
x = ActiveSheet.Shapes("Diagram 1").Width / 100 * s
Jeg har lige prøvet at lave makroen og graferne i et helt ny excel-fil, og så virker det fint, men når jeg sætter det ind i den fil jeg arbejder på kommer den op med fejlmeddelelsen. Der er godt nok også en masse andre makroer i denne fil, men det har vel ikke noget at sige. Der er godt i ikke nogen makro i det ark, hvor jeg arbejder. Kan du gennemskue hvorfor det ikke virker?
Worksheets("Existing").Activate '<<<<<<<<<<<<< End Sub
Private Sub nulstil(ArkNr, område, tegn) Worksheets(ArkNr).Activate ActiveSheet.Unprotect Range(område).Select Selection.Value = tegn ActiveSheet.Protect End Sub
Jeg tror det virker nu, jeg fjernede bare koden, lavede lagkagerne og satte koden ind igen og så fungerer det fint. Nu er der bare det problem at jeg gerne vil bygge cirklerne op på henvisninger til et andet ark, men når jeg gør det skifter cirkel nummer 2 ikke størrelse.
jeg har flyttes koden til det ark hvor kildedata er derefter har jeg ændret koden så den henviser til arket med graf
Private Sub Worksheet_Change(ByVal Target As Range) If Intersect(Target, Range("B2:B5", "D2:D5")) Is Nothing Then Exit Sub x1 = Application.WorksheetFunction.Sum([b2:b5]) y1 = Application.WorksheetFunction.Sum([d2:d5]) s = y1 / x1 * 100
x = Sheets("Graf").Shapes("Diagram 1").Width / 100 * s y = Sheets("Graf").Shapes("Diagram 1").Height / 100 * s Sheets("Graf").Shapes("Diagram 2").Width = x Sheets("Graf").Shapes("Diagram 2").Height = y
Ved ikke lige helt hvad jeg skal slette. Jeg har et ark, som hedder existing, hvor der skal henvises til cellerne C25-c30, og et ark som hedder ProposalCash, hvor der skal henvises til cellerne c29-c35.
Det skulle gerne være sådan at grafarket opdateres, så snart man ændrer tallene.
Private Sub Worksheet_Change(ByVal Target As Range) If Intersect(Target, Range("C25:C30")) Is Nothing Then Exit Sub x1 = Application.WorksheetFunction.Sum([b2:b5]) y1 = Application.WorksheetFunction.Sum([d2:d5]) s = y1 / x1 * 100
x = Sheets("Graf").Shapes("Diagram 1").Width / 100 * s y = Sheets("Graf").Shapes("Diagram 1").Height / 100 * s Sheets("Graf").Shapes("Diagram 2").Width = x Sheets("Graf").Shapes("Diagram 2").Height = y End Sub
og denne i ProposalCash:
Private Sub Worksheet_Change(ByVal Target As Range) If Intersect(Target, Range("C29:C35")) Is Nothing Then Exit Sub x1 = Application.WorksheetFunction.Sum([b2:b5]) y1 = Application.WorksheetFunction.Sum([d2:d5]) s = y1 / x1 * 100
x = Sheets("Graf").Shapes("Diagram 1").Width / 100 * s y = Sheets("Graf").Shapes("Diagram 1").Height / 100 * s Sheets("Graf").Shapes("Diagram 2").Width = x Sheets("Graf").Shapes("Diagram 2").Height = y
Jeg har sat koderne ind i de to ark. I Existing ser det sådan ud.
Private Sub Worksheet_Change(ByVal Target As Range) If Intersect(Target, Range("C25:C30")) Is Nothing Then Exit Sub x1 = Application.WorksheetFunction.Sum([b2:b7]) y1 = Application.WorksheetFunction.Sum([d2:d8]) s = y1 / x1 * 100
x = Sheets("Lagkage-prøve").Shapes("Diagram 1").Width / 100 * s y = Sheets("Lagkage-prøve").Shapes("Diagram 1").Height / 100 * s Sheets("Graf").Shapes("Diagram 2").Width = x Sheets("Graf").Shapes("Diagram 2").Height = y End Sub
og i ProposalCash ser det sådan ud:
Private Sub Worksheet_Change(ByVal Target As Range) If Intersect(Target, Range("C29:C35")) Is Nothing Then Exit Sub x1 = Application.WorksheetFunction.Sum([b2:b7]) y1 = Application.WorksheetFunction.Sum([d2:d8]) s = y1 / x1 * 100
x = Sheets("Lagkage-prøve").Shapes("Diagram 1").Width / 100 * s y = Sheets("Lagkage-prøve").Shapes("Diagram 1").Height / 100 * s Sheets("Graf").Shapes("Diagram 2").Width = x Sheets("Graf").Shapes("Diagram 2").Height = y
Men når jeg taster en værdi ind i felt i Existing siger den - Runtime error6 Overflow
Og når jeg taster noget ind i ProposalCash siger den Compile error expected end sub
og linien Private Sub Worksheet_Change(ByVal Target As Range) bliver markeret.
Private Sub Worksheet_Change(ByVal Target As Range) If Intersect(Target, Range("c25:c30")) Is Nothing Then Exit Sub x1 = Application.WorksheetFunction.Sum([c25:c30]) y1 = Application.WorksheetFunction.Sum([ark2!c29:c35]) s = y1 / x1 * 100 x = Sheets("Graf").Shapes("Diagram 1").Width / 100 * s y = Sheets("Graf").Shapes("Diagram 1").Height / 100 * s Sheets("Graf").Shapes("Diagram 2").Width = x Sheets("Graf").Shapes("Diagram 2").Height = y End Sub
Private Sub Worksheet_Change(ByVal Target As Range) If Intersect(Target, Range("c29:c35")) Is Nothing Then Exit Sub x1 = Application.WorksheetFunction.Sum([ark1!c25:c30]) y1 = Application.WorksheetFunction.Sum([c29:c35]) s = y1 / x1 * 100 x = Sheets("Graf").Shapes("Diagram 1").Width / 100 * s y = Sheets("Graf").Shapes("Diagram 1").Height / 100 * s Sheets("Graf").Shapes("Diagram 2").Width = x Sheets("Graf").Shapes("Diagram 2").Height = y End Sub
Worksheets("Existing").Activate '<<<<<<<<<<<<< End Sub
Private Sub nulstil(ArkNr, område, tegn) Worksheets(ArkNr).Activate ActiveSheet.Unprotect Range(område).Select Selection.Value = tegn ActiveSheet.Protect End Sub
Jeg tror den kommer i kambolage med den nye makro. Når jeg trykker på den knap jeg har lavet til at nustille siger der, runtime error '11' Division by zero
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.