30. december 2008 - 05:29Der er
13 kommentarer og 1 løsning
Lagring af data i forskellige celler/ark fra indtastningsark
Jeg har et dataark bestående af: 1. Kolonne: forestillingsnr. 2. kolonne. forestillingsnavne
et regnskabsark bestående af kolonner med forestillingsnr.;forestillingsnavn;antal pladser;Billetpriser A;B;C;Indtægter i alt:forestillingsudgifter:Dækningningsbidrag: kolonne 1 og 2 er lig med datarket: 'Forestillinger data'!A1 ... osv.
Nu ønsker jeg en formular/ak, som jeg delvist har konstrueret med data i én kolonne: B1 er lig med: indtastet forestillingsnr. B2 er lig med: =SLÅ.OP(B1;'Forestillinger data'!A:A;'Forestillinger data'!B:B) De efterfølgende rækker i formularen/arket er beregnet til indtastning af data jfr. regnskabsarket (antal pladser;Billetpriserne A,B,C; Antal solgte pladser. Herefter beregnes "indtægter i alt" osv.)
Mit problem er, at det, som jeg indtaster i indtastningsformularen, skal lagres i de respektive celler i mit regnskabsark ud for de respektive forestillinger. Altså * de data, som jeg indtaster vedr. forestilling nr. 1, skal lagres i regnskabsarket i rækken ud for forestilling nr. 1. * de data, som jeg indtaster vedr. forestilling nr. 2, skal lagres i regnskabsarket i rækken ud for forestilling nr. 2. Kan dette klares med en formel, og hvordan ser den ud? Eller skal dette klares med en makro, og hvordan ser den ud? Jeg har ikke megen forstand på programmering og makroer. Jeg håber du eller andre kan hjælpe mig? Mit udkast kan ses på GratisUpload.dk: http://www.gratisupload.dk/download/20593/
Hos Computerworld it-jobbank er vi stolte af at fortsætte det gode partnerskab med folkene bag IT-DAY – efter vores mening Danmarks bedste karrieremesse for unge og erfarne it-kandidater.
Detgte er ikke nødvendigvis den mest elegange metode, rent kodningsmæssigt, men det løser opgaven:
Private Sub Worksheet_Change(ByVal Target As Range) If Not Intersect(Target, Range("c22:c26")) Is Nothing Then Fstnr = ActiveSheet.Range("c1").Value For Each c In Sheets("Regnskab").Range("a2:a45").Cells If c.Value = Fstnr Then Select Case Target.Address Case Is = "$C$22" c.Offset(0, 2).Value = Target.Value Case Is = "$C$23" c.Offset(0, 3).Value = Target.Value Case Is = "$C$24" c.Offset(0, 4).Value = Target.Value Case Is = "$C$25" c.Offset(0, 5).Value = Target.Value Case Is = "$C$26" c.Offset(0, 6).Value = Target.Value End Select End If Next End If End Sub
Hej jkrons. Tak for dit svar. Nu er jeg ikke en ørn til VB. Jeg har gjort følgende: Åbnet VB og indsat ovennævnte makro ud for indtastningsarket (I toppen står der General og Declarations) Jeg håber, at det er den rigtige måde. I Prisgruppearket har jeg indsat =+Indtastning!$C$7, =+Indtastning!$C$8 osv. i de respektive celler. Problem: I Prisgruppearket skriver den samme tal, jeg sidst har indtastet i indtastningsarket. Der skiftes ikke data ud fra hvilken forestilling der vælges/indtastes i. Du kan se mit forsøg på http://www.gratisupload.dk/download/20670/ Jeg håber meget, at du kan hjælpe mig.
Jeg havde ikke -fra din første postc - opfattet, at der også skulle ske noget i prisgruppearket. Men du kan ikke gører det, som du gør, ved hjælp af formler, for så ændres det hele hver gangm, du taster i indtastning. Du er nødt til at gøre det ved hjælp af en makro, på samme måde som jeg har gjort ved Regnskab. Jeg vil geren se på det, men kan ikke lige love at jeg bliver færdig i dag eller i morgen :-)
Forøvrigt når du skal kopiere koden ind, skal du højreklikke på den arkfane, den skal høre til og vælge Vis programkode. Kopier koden hertil.
Det var alligevel ret hurtigt, så her er en løsning. Du skal starte med at slette alle formlerne der er i prisgruppearket. Koden skal stadig være i Indtastningsarket.
Private Sub Worksheet_Change(ByVal Target As Range) If Not Intersect(Target, Range("c22:c26")) Is Nothing Then Fstnr = ActiveSheet.Range("c1").Value For Each c In Sheets("Regnskab").Range("a2:a45").Cells If c.Value = Fstnr Then Select Case Target.Address Case Is = "$C$22" c.Offset(0, 2).Value = Target.Value Case Is = "$C$23" c.Offset(0, 3).Value = Target.Value Case Is = "$C$24" c.Offset(0, 4).Value = Target.Value Case Is = "$C$25" c.Offset(0, 5).Value = Target.Value Case Is = "$C$26" c.Offset(0, 6).Value = Target.Value End Select End If Next End If If Not Intersect(Target, Range("c7:c19")) Is Nothing Then Fstnr = ActiveSheet.Range("c1").Value For Each c In Sheets("Prisgrupper").Range("a2:a47").Cells If c.Value = Fstnr Then Select Case Target.Address Case Is = "$C$7" c.Offset(0, 3).Value = Target.Value Case Is = "$C$8" c.Offset(0, 4).Value = Target.Value Case Is = "$C$9" c.Offset(0, 5).Value = Target.Value Case Is = "$C$10" c.Offset(0, 6).Value = Target.Value Case Is = "$C$11" c.Offset(0, 7).Value = Target.Value Case Is = "$C$12" c.Offset(0, 8).Value = Target.Value Case Is = "$C$13" c.Offset(0, 9).Value = Target.Value Case Is = "$C$14" c.Offset(0, 10).Value = Target.Value Case Is = "$C$15" c.Offset(0, 11).Value = Target.Value Case Is = "$C$16" c.Offset(0, 12).Value = Target.Value Case Is = "$C$17" c.Offset(0, 13).Value = Target.Value Case Is = "$C$18" c.Offset(0, 14).Value = Target.Value Case Is = "$C$19" c.Offset(0, 15).Value = Target.Value End Select End If Next End If End Sub
Man kunne i øvrigt måske med fordel udvide din funktionalitet i arket, så du vlagte forestillingsnummeret, fra en oversigt over forestillinger i stedet for at indtaste det. Desuden kunne man rette, koden, så /indtastning/valg af en ny forestilling sikrede, at alle de oprindelige data i indtastningsarket slettes.
Mange tak for den sendte løsning. Nu har jeg noget at arbejde videre på og lære af. Jeg har intet kendskab til VB. Men jeg regner med, at jeg kan kopiere din formel og ændre lidt i teksten og få det til at virke. Jeg skal have data lagert i "Prisgrupper", "Antal solgte pladser" og "Regnskab" samt ganget de respektive celler i "Prisgrupper" med "Antal solgte pladser" til "Billetsalg". Jeg håbet, at jeg har held med dette!!! Der er blot et lille problem: "Indtastningsark" C7 bliver lagret i "Prisgrupper" D3, men skal være "C3". Kan du hjælpe med denne rettelse.
allanknudsen >> En anden gang, husk at sende egne indlæg som "Kommentar" og ikke som "Svar". "Svar" er tiltænkt løsningen, så der kan tildeles point for den hjælp man modtager.
Hej vejmand. Tak for din oplysning. Man må lære så længe man lever. Og til jkrons: Vil du sende et svar. Jeg kan ikke give dig point, sålænge du kun har kommentar. Allan Knudsen
Hej jkrons Det går ikke helt smertefrit. Jeg kan ikke lagre tal fra indtastningsarket kolonne D i "Antal solgte pladser" Kan du se, hvad der er forket i koderne: Private Sub Worksheet_Change(ByVal Target As Range) If Not Intersect(Target, Range("c7:c19")) Is Nothing Then Fstnr = ActiveSheet.Range("c1").Value For Each c In Sheets("Prisgrupper").Range("a3:a47").Cells If c.Value = Fstnr Then Select Case Target.Address Case Is = "$C$7" c.Offset(0, 2).Value = Target.Value Case Is = "$C$8" c.Offset(0, 3).Value = Target.Value Case Is = "$C$9" c.Offset(0, 4).Value = Target.Value Case Is = "$C$10" c.Offset(0, 5).Value = Target.Value Case Is = "$C$11" c.Offset(0, 6).Value = Target.Value Case Is = "$C$12" c.Offset(0, 7).Value = Target.Value Case Is = "$C$13" c.Offset(0, 8).Value = Target.Value Case Is = "$C$14" c.Offset(0, 9).Value = Target.Value Case Is = "$C$15" c.Offset(0, 10).Value = Target.Value Case Is = "$C$16" c.Offset(0, 10).Value = Target.Value Case Is = "$C$17" c.Offset(0, 12).Value = Target.Value Case Is = "$C$18" c.Offset(0, 13).Value = Target.Value Case Is = "$C$19" c.Offset(0, 14).Value = Target.Value End Select End If Next End If If Not Intersect(Target, Range("d7:d19")) Is Nothing Then Fstnr = ActiveSheet.Range("c1").Value For Each d In Sheets("Antal solgte pladser").Range("a3:a47").Cells If d.Value = Fstnr Then Select Case Target.Address Case Is = "$d$7" c.Offset(0, 2).Value = Target.Value Case Is = "$d$8" c.Offset(0, 3).Value = Target.Value Case Is = "$d$9" c.Offset(0, 4).Value = Target.Value Case Is = "$d$10" c.Offset(0, 5).Value = Target.Value Case Is = "$d$11" c.Offset(0, 6).Value = Target.Value Case Is = "$d$12" c.Offset(0, 7).Value = Target.Value Case Is = "$d$13" c.Offset(0, 8).Value = Target.Value Case Is = "$d$14" c.Offset(0, 9).Value = Target.Value Case Is = "$d$15" c.Offset(0, 10).Value = Target.Value Case Is = "$d$16" c.Offset(0, 10).Value = Target.Value Case Is = "$d$17" c.Offset(0, 12).Value = Target.Value Case Is = "$d$18" c.Offset(0, 13).Value = Target.Value Case Is = "$d$19" c.Offset(0, 14).Value = Target.Value End Select End If Next End If
Du skal ikke rette For Each c til For Each d, som du har gjort. C er ikke kolonnen, men en objektvariabel, som indeholder celleinformation. Desuden skal alle dine "d"referencer i den sidste del skrives med stort. VBA skelner mellem store og små bogstaver:
Private Sub Worksheet_Change(ByVal Target As Range) If Not Intersect(Target, Range("c7:c19")) Is Nothing Then Fstnr = ActiveSheet.Range("c1").Value For Each c In Sheets("Prisgrupper").Range("a3:a47").Cells If c.Value = Fstnr Then Select Case Target.Address Case Is = "$C$7" c.Offset(0, 2).Value = Target.Value Case Is = "$C$8" c.Offset(0, 3).Value = Target.Value Case Is = "$C$9" c.Offset(0, 4).Value = Target.Value Case Is = "$C$10" c.Offset(0, 5).Value = Target.Value Case Is = "$C$11" c.Offset(0, 6).Value = Target.Value Case Is = "$C$12" c.Offset(0, 7).Value = Target.Value Case Is = "$C$13" c.Offset(0, 8).Value = Target.Value Case Is = "$C$14" c.Offset(0, 9).Value = Target.Value Case Is = "$C$15" c.Offset(0, 10).Value = Target.Value Case Is = "$C$16" c.Offset(0, 11).Value = Target.Value Case Is = "$C$17" c.Offset(0, 12).Value = Target.Value Case Is = "$C$18" c.Offset(0, 13).Value = Target.Value Case Is = "$C$19" c.Offset(0, 14).Value = Target.Value End Select End If Next End If If Not Intersect(Target, Range("d7:d19")) Is Nothing Then Fstnr = ActiveSheet.Range("c1").Value For Each c In Sheets("Antal solgte pladser").Range("a3:a47").Cells If c.Value = Fstnr Then Select Case Target.Address Case Is = "$D$7" c.Offset(0, 2).Value = Target.Value Case Is = "$D$8" c.Offset(0, 3).Value = Target.Value Case Is = "$D$9" c.Offset(0, 4).Value = Target.Value Case Is = "$D$10" c.Offset(0, 5).Value = Target.Value Case Is = "$D$11" c.Offset(0, 6).Value = Target.Value Case Is = "$D$12" c.Offset(0, 7).Value = Target.Value Case Is = "$d$13" c.Offset(0, 8).Value = Target.Value Case Is = "$D$14" c.Offset(0, 9).Value = Target.Value Case Is = "$D$15" c.Offset(0, 10).Value = Target.Value Case Is = "$D$16" c.Offset(0, 10).Value = Target.Value Case Is = "$D$17" c.Offset(0, 12).Value = Target.Value Case Is = "$D$18" c.Offset(0, 13).Value = Target.Value Case Is = "$D$19" c.Offset(0, 14).Value = Target.Value End Select End If Next End If
End Sub
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.