Formatering med VBA
Udskrevet fra: Dansk Regneark Forum
Kategori: Hjælp til regneark.
Forum navn: Generelt
Forum beskrivelse: Hjælp til generel daglig brug af programmet Excel
Web-adresse: https://forum.excel-regneark.dk/forum_posts.asp?TID=751
Udskrevet den: 06.Mar.2025 kl. 23:18
Emne: Formatering med VBA
Besked fra: dixib
Emne: Formatering med VBA
Posteringsdato: 17.Apr.2012 kl. 15:28
Hej alle Excel-hajer
Jeg vil gerne kunne formatere diverse celler i forhold til valget i andre celler. Da jeg har mere end tre valg i den celle, som styrer formateringen, er jeg kommet frem til, at det er nødvendigt at bruge VBA. Det er dog ikke lykkedes mig at finde frem til hvordan (eller kunne få de koder jeg har fundet til at virke).
Jeg håber det ud fra nedenstående ark er muligt at forstå, hvad jeg mener. Først og fremmest skal valget i "Type" styre baggrundsfarven i feltet "Name". Hvis det er muligt vil jeg også gerne have at hvis der f.eks. vælges "T1" i "Type" at det ikke kun er baggrundsfarven i "Name" der ændre, men flere felter i rækken.
Hvis nogen kender til gode guides til VBA for en 100% nybegynder, så ville det heller ikke være dårligt, så jeg også forstår, hvordan det hele foregår.
På forhånd tak Ole Møller Christensen
http://ole.dixib.dk/VBA_test.xls - http://ole.dixib.dk/VBA_test.xls
|
Svar:
Besked fra: rassten
Posteringsdato: 18.Apr.2012 kl. 01:10
Hej Er det her noget i den stil den har brug for.
uploads/107/color_efter_celle_v%C3%A6rdi.xls - uploads/107/color_efter_celle_værdi.xls
Se Sheet2.
Private Sub Worksheet_Change(ByVal Target As Range) On Error Resume Next
lr = Cells(Rows.Count, 3).End(xlUp).Row
For i = 2 To lr If Range("c" & i).Value = "T1" Then Rows(i & ":" & i).EntireRow.Interior.Color = RGB(153, 204, 255) If Range("c" & i).Value = "T2" Then Range("b" & i).Interior.Color = RGB(204, 255, 204) If Range("c" & i).Value = "T3" Then Range("b" & i).Interior.Color = RGB(255, 204, 153) If Range("c" & i).Value = "T4" Then Range("b" & i).Interior.Color = RGB(255, 153, 204) Next End Sub
|
hver gang der sker noget i sheet2, kører makroen.
------------- VH rassten
Arbejde excel 2010 Privat excel 2010
|
Besked fra: dixib
Posteringsdato: 18.Apr.2012 kl. 08:21
Hej rassten
Det er er i hvert tilfælde et godt skridt i den rigtige retning! Der er dog to problemer...
Først så bliver hele rækken blå, når der vælges T1, hvor jeg kun ønsker at det er de tre første og femte kolonne (i dette tilfælde). Efter at have valgt T1 for en række og derefter vælger en anden værdi, så forbliver alle de øvrige felter blå, og kun felter i anden kolonne skifter farve. I dette tilfælde skal resten af kolonnerne skifte tilbage til hvid baggrund.
Da du har benyttet det andet worksheet, som jeg benyttede til værdierne i min dropdown, virker denne funktion ikke i din fil, men jeg har kopieret koden over i min egen version og har opdateret den på linket i det første indlæg.
En ekstra feature, som jeg godt kunne ønske mig er at der kommer en tyk border omkring felter, når der vælges T1, som jeg også har opdateret i min fil. Dette skal også forsvinde igen lige som baggrundsfarven i de øvrige kolonner.
Endnu en gang ville det være dejlig, hvis nogen har links til tutorials/guides til disse koder, så jeg bedre forstår, hvad der foregår og evt. selv kan begynde at redigere i dem.
Mange tak for hjælpen indtil nu.
Venlig hilsen Ole Møller Christensen
|
Besked fra: rassten
Posteringsdato: 18.Apr.2012 kl. 11:07
Prøv
Private Sub Worksheet_Change(ByVal Target As Range) On Error Resume Next
lr = Cells(Rows.Count, 3).End(xlUp).Row
Range("a2:c" & lr, "e2:e" & lr).Interior.Color = xlNone Range("a2:c" & lr, "e2:e" & lr).Borders(xlInsideHorizontal).LineStyle = xlNone For i = 2 To lr If Range("c" & i).Value = "T1" Then Range("a" & i & ":" & "c" & i).Interior.Color = RGB(153, 204, 255) If Range("c" & i).Value = "T1" Then With Range("a" & i & ":" & "c" & i).Borders(xlEdgeTop) .LineStyle = xlContinuous .Weight = xlMedium End With With Range("a" & i & ":" & "c" & i).Borders(xlEdgeBottom) .LineStyle = xlContinuous .Weight = xlMedium End With End If If Range("c" & i).Value = "T1" Then Range("e" & i).Interior.Color = RGB(153, 204, 255) If Range("c" & i).Value = "T1" Then With Range("e" & i).Borders(xlEdgeTop) .LineStyle = xlContinuous .Weight = xlMedium End With With Range("e" & i).Borders(xlEdgeBottom) .LineStyle = xlContinuous .Weight = xlMedium End With End If If Range("c" & i).Value = "T2" Then Range("b" & i).Interior.Color = RGB(204, 255, 204) If Range("c" & i).Value = "T3" Then Range("b" & i).Interior.Color = RGB(255, 204, 153) If Range("c" & i).Value = "T4" Then Range("b" & i).Interior.Color = RGB(255, 153, 204) Next End Sub
|
For dit andet spørgsmål. Prøv at søge i dette Forum, jeg ved at bla. Allan har svaret lignende tidligere.
------------- VH rassten
Arbejde excel 2010 Privat excel 2010
|
Besked fra: Kurt Kubik
Posteringsdato: 18.Apr.2012 kl. 17:57
Besked fra: rassten
Posteringsdato: 18.Apr.2012 kl. 18:03
Hvilket link tænker du på? jeg kan godt hente begge eksempel filer, men hvis du har problem skriv, så kan jeg eventuelt sende dem til dig.
------------- VH rassten
Arbejde excel 2010 Privat excel 2010
|
Besked fra: Kurt Kubik
Posteringsdato: 18.Apr.2012 kl. 19:50
rassten skrev:
Hvilket link tænker du på? jeg kan godt hente begge eksempel filer, men hvis du har problem skriv, så kan jeg eventuelt sende dem til dig.
|
Mærkeligt - første link dur slet ikke her!
|
Besked fra: rassten
Posteringsdato: 18.Apr.2012 kl. 20:15
Prøv: uploads/107/Kopi_af_VBA_test-1.xls - uploads/107/Kopi_af_VBA_test-1.xls uploads/107/color_efter_celle_v%C3%A6rdi.xls - uploads/107/color_efter_celle_værdi.xls uploads/107/color_efter_celle_v%C3%A6rdi_v2.xls - uploads/107/color_efter_celle_værdi_v2.xls
------------- VH rassten
Arbejde excel 2010 Privat excel 2010
|
Besked fra: dixib
Posteringsdato: 19.Apr.2012 kl. 07:57
Mit domæne har været nede kortvarigt, da jeg ikke havde fået betalt min regning  Skulle være oppe at køre igen, men dejligt du kunne hjælpe med filer i mellemtiden rassten.
Jeg prøver at kigge på din nye kode og kigger lidt videre i forum'et efter andre godter.
|
|