Avatar billede magmat Nybegynder
05. januar 2007 - 09:51 Der er 2 kommentarer og
1 løsning

Ved inds. af linie skal der kopieres fra ovenstående linie

Jeg kunne godt tænke mig en rutine der køres når man indsætter en linie.

Når man indsætter en linie skal den spørge:
om man vil kopiere alle celler i kol 1-20 fra den ovenstående linie
eller
om man vil kopiere alle celler i kol 1-20 fra den nedenstående linie
eller
om man bare ønsker en tom linie.

Da der kan være formler i linierne er det ikke kun talværdierne den skal kopiere, men også formlerne.

Kan det overhovedet lade sig gøre? Eller drømmer jeg bare?
Avatar billede kabbak Professor
05. januar 2007 - 11:07 #1
Delvis, denne makro indsætter rækken over den aktive celle.
Hvis du svarer ja til boksen, bruger den rækken lige over, ved nej den under.

Men pas på formler fra neden af, hvis de henviser til en række ovenover, bliver de rykket.

Sub IndsaetRow()
    Dim R As Long, I As Integer, Svar As String
    R = ActiveCell.Row    'finder sidste række i A kolonnen
    Range("A" & R).Select
    ActiveCell.EntireRow.Insert Shift:=xlDown    ' indsætter række lige over den active celle
    Range("A" & R).Select
    Svar = MsgBox("Skal der kopieres fra rækken ovenover", vbYesNo)
   
    If Svar = vbYes Then
    ' Indsætter fra  rækken over
        For I = 0 To 29    ' ret her for flere kolonner 30
            If ActiveCell.Offset(-1, I).HasFormula Then    ' har celler i rækken ovenover en formel
                ActiveCell.Offset(-1, I).AutoFill _
                        Destination:=Range(ActiveCell.Offset(-1, I), ActiveCell.Offset(0, I)) _
                                    , Type:=xlFillDefault    ' hvis overstående celler har en formel trækkes den ned,Fra A kolonnen og 30 kolonner til højre
            Else
                ActiveCell.Offset(0, I).Value = ActiveCell.Offset(-1, I).Value
            End If
        Next
    Else
    ' Indsætter fra  rækken under
        For I = 0 To 29    ' ret her for flere kolonner 30
            If ActiveCell.Offset(1, I).HasFormula Then    ' har celler i rækken ovenover en formel
                ActiveCell.Offset(1, I).AutoFill _
                        Destination:=Range(ActiveCell.Offset(1, I), ActiveCell.Offset(0, I)) _
                                    , Type:=xlFillDefault    ' hvis overstående celler har en formel trækkes den ned,Fra A kolonnen og 30 kolonner til højre
            Else
                ActiveCell.Offset(0, I).Value = ActiveCell.Offset(1, I).Value
            End If
        Next
    End If
    Range("A" & R).Select
End Sub
Avatar billede magmat Nybegynder
06. januar 2007 - 21:29 #2
Super, det var lige hvad jeg skulle bruge.
Har du et svar :o)
Avatar billede kabbak Professor
07. januar 2007 - 11:00 #3
et svar ;-))
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
Excel kurser for alle niveauer og behov – find det kursus, der passer til dig

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