BAGGRUND: Jeg har lavet en lille ”applikation” i Excel. Den bruger en lille database, som jeg har navngivet Posteringer.
SITUATION: I række 1 har jeg kolonneoverskrifter (feltnavne). I de efterfølgende rækker har jeg data-records. Der er pt. ca. 500 data-records. Der vil komme op til 5-8.000.
Kolonne A-N indeholder ”rigtige data”. Kolonne O-S indeholder formler relateret til kolonne A-N. Formlerne i kolonne O-S har jeg kopieret til de første 10.000 rækker, så man ikke skal gøre det løbende.
De løbende ændringer består i at man indtaster nye records i kolonne A-N.
UDFORDRING: Jeg vil gerne lave en makro der kan tage udvide området Posteringer til at omfatte alle rækker med rigtige data-records.
DET HAR JEG PRØVET: 1. Jeg har lavet makroer – også med relative referencer – men de bliver ved også at indsætte det konkrete sidste rækkenr. i koden. 2. Jeg har navngivet alle 10.000 rækker, men så kommer der blanke records op i de efterfølgende pivot-tabeller, og det vil jeg ikke gerne have.
Tak for hurtigt svar. Det jeg egentlig ønsker er følgende: " UDFORDRING: Jeg vil gerne lave en makro der kan tage udvide området Posteringer til at omfatte alle rækker med rigtige data-records. " Sagt på en anden måde. Når jeg er færdig med makroen skal det navngivne område Posteringer omfatte alle records. For jeg refererer til det navngivne område Posteringer i Pivottabeller.
Eksempel: Starttilstand: Det navngivne område posteringer dækker nu A1:S299. Brugerhandling: Der indtastes data i række 300-310 (i kolonnerne A-N) Systemreaktion: Der beregnes på formlerne i kolonne O-S for række 300-310. Behov for makro: Udvid/redefiner det navngivne område Posteringer til at dække A1:S310.
Herefter vil Pivottabeller automatisk medtage de nye datarecords.
skal det være VBA, så kunne koden pladseres i arkets egen kode - ret arknavn i nedenstående
Private Sub Worksheet_Change(ByVal Target As Range) ActiveWorkbook.Names("Posteringer").RefersToR1C1 = "=Sheet1!R1C1:R" & CStr(Range("A1").End(xlDown).Row) & "C14" End Sub
flemmingdahls løsningsforslag ser spændende ud. Jeg formoder at det sidste "C14" refererer til kolonne N. Så hvis jeg skal have Posteringer til at omfatte kolonner fra A-S regner jeg med at jeg skal jeg skrive "C19"
Det betyder så også (nu gætter jeg), at jeg ikke skal definere navnet Posteringer i brugergrænsefladen, fordi det nu er defineret i VBA?
Til x-lars: Der er blanke rækker i kolonne A-N EFTER de rigtige datarecords.
Skitse:
ABCDEFGHIJKLMNOPQRS Rigtig datarecord ABCDEFGHIJKLMNOPQRS Rigtig datarecord ABCDEFGHIJKLMNOPQRS Rigtig datarecord ABCDEFGHIJKLMNOPQRS Rigtig datarecord OPQRS Række med formler OPQRS Række med formler OPQRS Række med formler OPQRS Række med formler OPQRS Række med formler
Tror ikke på x-lars' løsning virker, når du alle de der tomme fomler... Jeg ville lave op på din løsning, hvis det var mit regneark.
Når der bliver skrevet i kolonne A i en given række: - så vil en makro tilføje nødvendige fomler til denne række - navnet "Posteringer" vil blive opdateret og dermed din pivottabel
Private Const msRNG_POSTERINGER As String = "Posteringer"
Private Sub Worksheet_Change(ByVal Target As Range) ' kan bruges til at smide formler på nye rækker hvis der skrives i kolonne A If Target.Rows.Count = 1 And Target.Columns.Count = 1 Then If Not Intersect(Target, Range("A:A")) Is Nothing Then If Cells(Target.Row, 15).FormulaR1C1 = "" Then Cells(Target.Row, 15).FormulaR1C1 = "=YEAR(RC[-6])" Cells(Target.Row, 16).FormulaR1C1 = "=IF(MONTH(RC[-7])<8,RC[-1]&""-1"",RC[-1]&""-2"")" Cells(Target.Row, 17).FormulaR1C1 = "=VLOOKUP(RC[-16],KontoPlanNiv,2,TRUE)" Cells(Target.Row, 18).FormulaR1C1 = "=VLOOKUP(RC[-17],KontoPlanNiv,3,TRUE)" Cells(Target.Row, 19).FormulaR1C1 = "=VLOOKUP(RC[-18],KontoPlanNiv,4,TRUE)" End If End If End If
' Styrer størrelsen på området posteringer If Intersect(Target, Range(msRNG_POSTERINGER)) Is Nothing Or Target.Rows.Count > 1 Or Target.Columns.Count > 1 Then Application.EnableEvents = False ActiveWorkbook.Names(msRNG_POSTERINGER).RefersToR1C1 = _ "='" & Me.Name & "'!R9C1:R" & CStr(Range("A10").End(xlDown).Row) & "C19" Application.EnableEvents = True 'Den næste linie er kun med i dette eksempel for at vise Posteringer's område MsgBox ActiveWorkbook.Names(msRNG_POSTERINGER).RefersToRange.Address End If End Sub
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.