15. marts 2007 - 17:56
Der er
2 kommentarer og
1 løsning
Macro til ny linie
Hej.. Jeg har denne kode:
Sub ActiveRowTest()
Dim lRow As Long, rCell As Range
ActiveSheet.Unprotect
If Selection.Areas.Count = 1 And Selection.Columns.Count = 1 Then
Selection.EntireRow.Insert
For Each rCell In Selection
lRow = rCell.Row
Range("L" & lRow).FormulaR1C1 = "=RC[-2]+RC[-1]"
Range("H" & lRow & ",F" & lRow & ",E" & lRow & ",
K" & lRow).NumberFormat = "#,##0"
Range("A" & lRow).Value = "Ny Sag"
Next rCell
Else
MsgBox "Vælg een celle eller lodrette celler kontinuerligt."
End If
ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
End Sub
Det den gør er, at når jeg eks. markere A2:A5, indsætter den en række nye linier i et låst dokument, og giver bestemte kolonner i disse linier bestemte formateringer tusindtalsseperator ol.
Jeg benytter koden i et skema som det her:
__________________
\ a b c d e f g
1 d d d d d d d
2 d d d d d d d
3 c* s*
4 d d d d d d d
5 d d d d d d d
6 c** s**
__________________
*tæller aktive rækker (TÆLV) b1:b2 - *sums e1:e2
**tæller aktive rækker (TÆLV) b4:b5 - **sums e4:e5
Skemaet herover viser hvad der skal ske: I linie 3 har jeg eks. 2 funtioner, TÆLV(B1:B2), og en SUM(E1:E2) (samme i linie 6). Når en bruger så vælger at indsætte en ny række i linie 2, kan TÆLV og SUM ikke finde ud af automatisk at ændre deres funkion så de tager højde for den nye linie..
Jeg startede med en kode alá
Sub ActiveRowTest()
x = activecell.row
y = "L" & x
Rows(ActiveCell.Row).Select
Selection.Insert Shift:=xlDown
range(y).select
ActiveCell.FormulaR1C1 = "=RC[-2]+RC[-1]"
End Sub
.. men denne tager ikke højde for at formateringen (død og pine) skal være ens hver gang i alle de specifikke felter (herunder at nogle celler skal være låst, andre ikke).
100p til vinderen :)
15. marts 2007 - 23:15
#1
Hm, måske lavede jeg mit spørgsmål lidt for kompliceret, ser nok lidt uoverskueligt ud:
Hvis jeg benytter en makro med linien:
"Selection.EntireRow.Insert"
..tæller de nedenstående funktioner ikke linierne sammen -hvordan får jeg dem til det :)
(Og igen, grunden til jeg ikke benytter
"Selection.Insert Shift:=xlDown" er, at jeg efterfølgende skal redigere formatteringen af specifikke celler i den indsatte række.
18. marts 2007 - 20:19
#3
Hej excelent,
Jeg har fået det til at virke nu, ved ikke hvorfor det ikke fungerede.
Dokumentet skulle bruges til sagssttyring af ejendomme. Eks. ville række 2-34 vise sager fra forrige måned (primo marts), hvor række 35 talte de ovenstående rækker (for at vise hvor mange sager det drejede sig om).
I række 36-45, skulle der så tastes nye sager ind, og så skulle tællere i række 46 vise resultater for indeværende måned, samt sammenlægge begge resultater (meget simplificeret..)
I kollonne 46 skulle man kunne trykke på en knap der tilføjede en sag det rigtige sted (altså indeværende måned), og det var her tællerne ikke rykkede ordentligt med.
Anyways, tællerne virker nu, så ved ikke præcist hvad der har været galt.
Til info har jeg brugt følgende kode:
Sub NySag()
Dim lRow As Long, rCell As Range
Dim lFirstRow As Long, lLastRow As Long
ActiveSheet.Unprotect
If Range("T" & Selection.Row) <> "S" Then
MsgBox "Du kan kun indsætte nye sager ved de markerede punkter.."
Exit Sub
End If
If Selection.Areas.Count = 1 And Selection.Columns.Count = 1 Then
Selection.EntireRow.Insert
For Each rCell In Selection
lRow = rCell.Row
Range("L" & lRow).FormulaR1C1 = "=RC[-2]+RC[-1]"
Range("L" & lRow & ",T" & lRow & ",U" & lRow).Locked = True
Range("E" & lRow & ",F" & lRow & ",H" & lRow & ",J" & lRow & ",K" & lRow & ",L" & lRow & ",M" & lRow).NumberFormat = "#,##0"
Range("A" & lRow & ",B" & lRow & ",C" & lRow & ",D" & lRow & ",E" & lRow & ",F" & lRow & ",G" & lRow & ",H" & lRow & ",I" & lRow & ",J" & lRow & ",K" & lRow & ",M" & lRow & ",N" & lRow & ",O" & lRow & ",P" & lRow & ",Q" & lRow & ",R" & lRow & ",S" & lRow).Locked = False
Range("A" & lRow).Value = "Ny sag"
Range("U" & lRow).Value = "S"
Next rCell
Else
MsgBox "Kun en celle"
End If
ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
End Sub
Linien "If Range("T" & Selection.Row) <> "S" Then" lavede jeg får at kunne styre hvorhenne en bruger fik lov til at indsætte ovennævte nye sag. I rækkerne hvor der ikke står et "S" kolonne "T", kan man ikke få lov til at indsætte en ny sag..
Men ellers tak for tilbuddet om hjælp :)