06. januar 2010 - 09:16Der er
28 kommentarer og 1 løsning
Flette celler i rækker udfra uge nr.
Hej Alle
Jeg er ved at opbygge en Anual Training Plan.
I denne har jeg en række(B36:BB36) med uge nr. baseret på flg. formel(=HELTAL((B34-(DATO(ÅR(B34+(REST(8-UGEDAG(B34);7)-3));1;1))-3+REST(UGEDAG(DATO(ÅR(B34+(REST(8-UGEDAG(B34);7)-3));1;1))+1;7))/7)+1). I rækken (B35:BB35) har jeg indsat måned udfra uge nr. formlen.
Mit problem er at jeg gerne vil have at excel fletter de celler hvor den samme mdr. er vist. Kan dette lave sig gøre?
Sub Merge1() Dim rng As Range Dim rng2 As Range Set rng = Sheets("Ark1").Range("B35:BB35") '** ret evt.Arknavn her
For t = 1 To 12 For Each c In rng If c = t Then If rng2 Is Nothing Then Set rng2 = c Else Set rng2 = Application.Union(rng2, c) End If End If Next rng2.Select Application.DisplayAlerts = False
Sub Merge1() Dim rng As Range Dim rng2 As Range Set rng = Sheets("ATP").Range("B35:BB35")
For t = 1 To 12
For Each c In rng If Month(c) = t Then If rng2 Is Nothing Then Set rng2 = c Else Set rng2 = Application.Union(rng2, c) End If End If Next rng2.Select Application.DisplayAlerts = False
tror det er noget andet, jeg har lavet sådan at jeg angiver en start dato for min sæson. Når jeg skifter rundt med den, er det lidt forskellige måneder den springer over, den laver bare en mdr. dobbelt så lang.
Sub Merge2() Dim rng As Range Dim rng2 As Range Application.ScreenUpdating = False Set rng = Sheets("ATP").Range("B35:BB35")
For Each d In rng For Each c In rng If Month(c) = Month(d) Then If rng2 Is Nothing Then Set rng2 = c Else Set rng2 = Application.Union(rng2, c) End If End If Next rng2.Offset(1, 0).Select
dog vil jeg høre om man kan få den til at starte med at nulstille rækken først, dvs. ophæve alle flettninger. Derved kan jeg bare køre makroen hvis startdatoen bliver ændret.
lige et tillægsspørgsmål, nu har du jo set mit ark. på ATP,en, kan man få indtastnings områderne til at følge dato rækken, dvs. hvis start dato bliver ændret, flytter mine indtastninger med til enten højre eller venstre.
Udskift din kode med denne, så kører koden når du skifter dato
Private Sub Worksheet_Change(ByVal Target As Range) If Intersect(Target, Range("R29")) Is Nothing Then Exit Sub Dim rng As Range Dim rng2 As Range Application.ScreenUpdating = False Set rng = Sheets("ATP").Range("B35:BB35") Sheets("ATP").Range("B36:BB36").UnMerge
For Each d In rng For Each c In rng If Month(c) = Month(d) Then If rng2 Is Nothing Then Set rng2 = c Else Set rng2 = Application.Union(rng2, c) End If End If Next rng2.Offset(1, 0).Select
den sidste kode sætter ikke kant på efter fletning. jeg har prøvet at rode lidt med det selv, fatter dog ikke noget, kan ikke få det til at virke.
er det korekt at jeg skal fjerne de to første linjer i den sidste kode, også lade de første linjer af den kode som hedder merge2() blive?
mht indtastningsomr. som er dette de hvide omr. i ATP, under uge nr. her er det mening at sætter et bogstav alt efter hvilken periode denne uge skal være mærket som. De to nederste omr. vil blive brugt til at sætte tal ind, der viser træningen i de enkelte zoner.
Slet alt kode jeg har lavet og så indsæt den sidste i arkets kodemodul - (kodemodulet finder du ved at højreklikke på arkfane og vælg "Vis programkode")
Kan se at du har sat den til at kigge i r29. denne celle er nu kun en formel, skal jeg flytte den over til den celle som der bliver tastet i, dette er på et andet ark.
JEg kan stadig ikke få nakroen til at gå igang. Det felt jeg taster i er på et andet ark. I koden skriver ændrer jeg (Target, Range("R29")) til (Target, Sheets("Pers. opl").Range("H2")
ok nej indtastnings celle skal være i samme ark som koden men så smider du koden ind i et almindeligt Modul
I projektmappen taster du ALT+F11 I menuen Insert, vælger du Module Indsæt koden der Husk slet koden i Arkmodulet
Sub Merge3() Dim rng As Range Dim rng2 As Range Application.ScreenUpdating = False Set rng = Sheets("ATP").Range("B35:BB35") Sheets("ATP").Range("B36:BB36").UnMerge
For Each d In rng For Each c In rng If Month(c) = Month(d) Then If rng2 Is Nothing Then Set rng2 = c Else Set rng2 = Application.Union(rng2, c) End If End If Next rng2.Offset(1, 0).Select
Den er næsten i hus. Den fletter helt rigtigt. Den slutter dog ikke af med at sætte en kant linie på, bare i højre side er fint, så vil de være adskilt. Kan du hjæjpe med det.
Af en eller anden grund får jeg ikke mail når du kommenterer her i tråden, det er så årsagen til at der går lidt tid imellem
Men ja jeg er opmærksom på det med rammerne så prøv denne: husk slet den gamle kode!
Sub Merge4() Dim rng As Range Dim rng2 As Range Application.ScreenUpdating = False Sheets("ATP").Select Sheets("ATP").Range("B36:BB36").UnMerge Set rng = Sheets("ATP").Range("B35:BB35")
For Each d In rng For Each c In rng If Month(c) = Month(d) Then If rng2 Is Nothing Then Set rng2 = c Else Set rng2 = Application.Union(rng2, c) End If End If Next rng2.Offset(1, 0).Select
Application.DisplayAlerts = True Selection = Selection.Offset(-1, 0).Value Set rng2 = Nothing Next ramme Range("A1").Select Application.ScreenUpdating = True End Sub
Sub ramme()
Range("B36:BB36").Select
With Selection.Borders(xlEdgeLeft) .LineStyle = xlContinuous .Weight = xlThin .ColorIndex = xlAutomatic End With With Selection.Borders(xlEdgeTop) .LineStyle = xlContinuous .Weight = xlThin .ColorIndex = xlAutomatic End With With Selection.Borders(xlEdgeBottom) .LineStyle = xlContinuous .Weight = xlThin .ColorIndex = xlAutomatic End With With Selection.Borders(xlEdgeRight) .LineStyle = xlContinuous .Weight = xlThin .ColorIndex = xlAutomatic End With With Selection.Borders(xlInsideVertical) .LineStyle = xlContinuous .Weight = xlThin .ColorIndex = xlAutomatic End With
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.