Avatar billede msl- Nybegynder
14. oktober 2010 - 14:00 Der er 7 kommentarer og
1 løsning

Knap til indsætning af x antal nye linjer i Excel ark

Hej eksperter

Jeg har et regneark til simpel bogføring, hvor jeg gerne vil have mulighed for at der automatisk kan indsættes nye linjer.

Jeg har formler i kolonne E (f.eks. =AN6) samt kolonne AN (f.eks. =SUM(F6:AM6)+D6). Endvidere er der betinget formatering i rækkerne.

Er det muligt at lave en VBA knap som indsætter 10 rækker hvori ovenstående formler samt formateringen for de rækker der er forinden medtages?

Linjerne skal indsættes efter den række hvori der sidst er indtastet en værdi (med udgangspunkt i kolonne D som er beløbskolonnen)

Dog har jeg nedenunder "bogføringsrækkerne" en sumlinje. Der skal naturligvis ikke "måles" på denne linje så de indsatte rækker fejlagitgit indsættes under summen.
Avatar billede anlu Nybegynder
14. oktober 2010 - 16:35 #1
Gør denne kode som du forventer?


    Dim rn As Range
    Dim rnNew As Range
    Dim i As Integer
   
    Set rn = Sheet1.Range("D2")
    Set rn = rn.End(xlDown) ' find sidste indtastning i kolonne D
    Set rn = rn.Offset(0, -3) ' kolonne A, sidste række
    Set rnNew = rn.Offset(1, 0).EntireRow
    For i = 1 To 10
        rnNew.Insert
        ' sæt formel i kolonne E
        rn.Offset(i, 4).Formula = "=" & Replace(rn.Offset(i, 39).AddressLocal, "$", "")
        ' sæt formel i kolonne AN
        rn.Offset(i, 39).Formula = "=SUM(" & _
            Replace(rn.Offset(i, 5).AddressLocal, "$", "") & ":" & _
            Replace(rn.Offset(i, 38).AddressLocal, "$", "") & ")+" & _
            Replace(rn.Offset(i, 3).AddressLocal, "$", "")
        ' kopier format fra sidste række
        rn.EntireRow.Copy
        rn.Offset(i, 0).EntireRow.PasteSpecial xlPasteFormats
    Next
Avatar billede anlu Nybegynder
14. oktober 2010 - 18:46 #2
Fandt lige ud af en noget kønnere måde at få sat formlerne på :o)


    Dim rn As Range
    Dim rnNew As Range
    Dim i As Integer
   
    Set rn = Sheet1.Range("D2")
    Set rn = rn.End(xlDown) ' find sidste indtastning i kolonne D
    Set rn = rn.Offset(0, -3) ' kolonne A, sidste række
    Set rnNew = rn.Offset(1, 0).EntireRow
    For i = 1 To 10
        rnNew.Insert
        ' sæt formel i kolonne E
        rn.Offset(i, 4).FormulaR1C1Local = "=R[0]C[35]"
        ' sæt formel i kolonne AN
        rn.Offset(i, 39).Formula = "=SUM(R[0]C[-34]:R[0]C[-1])+R[0]C[-36]"
        ' kopier format fra sidste række
        rn.EntireRow.Copy
        rn.Offset(i, 0).EntireRow.PasteSpecial xlPasteFormats
    Next
Avatar billede msl- Nybegynder
15. oktober 2010 - 08:23 #3
Hej anlu

Tak for dit svar :) Som det ser ud nu kan jeg umiddelbart ikke få det til at fungere.

Jeg får en Run-time error '424':

Object required


Trykker jeg så "Debug" går den ind i koden og highlighter følgende:
Set rn = Sheet1.Range("D2")

Det skulle nok egentligt være nævnt at den første bogføringsrække altid vil være række 6.

Det jeg har gjort er at gå op i "Udvikler" hvorefter jeg har indsat en knap (formularkontrolelement).

Jeg har så højreklikket på knappen, tildelt makroen under "Module3" hvilket var det modul den selv åbnede i, koden er indsat som følger:

Sub nylinje()
  Dim rn As Range
    Dim rnNew As Range
    Dim i As Integer
   
    Set rn = Sheet1.Range("D6")
    Set rn = rn.End(xlDown) ' find sidste indtastning i kolonne D
    Set rn = rn.Offset(0, -3) ' kolonne A, sidste række
    Set rnNew = rn.Offset(1, 0).EntireRow
    For i = 1 To 10
        rnNew.Insert
        ' sæt formel i kolonne E
        rn.Offset(i, 4).FormulaR1C1Local = "=R[0]C[35]"
        ' sæt formel i kolonne AN
        rn.Offset(i, 39).Formula = "=SUM(R[0]C[-34]:R[0]C[-1])+R[0]C[-36]"
        ' kopier format fra sidste række
        rn.EntireRow.Copy
        rn.Offset(i, 0).EntireRow.PasteSpecial xlPasteFormats
    Next
End Sub
Avatar billede msl- Nybegynder
15. oktober 2010 - 08:25 #4
Oh :) Det eneste der skulle ændres var: Set rn = Range("D6")
Avatar billede msl- Nybegynder
15. oktober 2010 - 08:25 #5
Smid endelig et svar, 1000 tak for hjælpen ;)
Avatar billede anlu Nybegynder
15. oktober 2010 - 08:37 #6
Det var så lidt :o)
Avatar billede msl- Nybegynder
15. oktober 2010 - 12:40 #7
Lige et enkelt spørgsmål til en rettelse:

Som sagt, så starter bogføringsrækkerne ved række 6.

Såfremt der KUN er bogført på række 6 og man kører makroen, så indsætter den de 10 linjer under min sum-række som først kommer adskillige rækker længere nede.

Vælger jeg derimod række 5 som udgangspunkt, og bogfører flere linjer, lad os sige 6, 7 og 8, så bliver de nye linjer indsat mellm række 6 og 7, til trods for at der er indhold i de efterfølgende linjer.

Er der en simpel måde hvorpå det kan løses? :)
Avatar billede anlu Nybegynder
15. oktober 2010 - 14:51 #8
For at fange den med om der kun er bogført på linje 6 (når vi starter i linje 6), kan man lave et check på om der står noget i D7 således:


    Set rn = Sheet1.Range("D6")
    If rn.Offset(1, 0).Value <> "" Then
        Set rn = rn.End(xlDown) ' find sidste indtastning i kolonne D
    End If
    Set rn = rn.Offset(0, -3) ' kolonne A, sidste række
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Vi har et stort udvalg af Excel kurser. Find lige det kursus der passer dig lige her.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester