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?
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