10. december 2007 - 11:43Der er
14 kommentarer og 1 løsning
Betinget formatering, Betingelser >4
Jeg har brug for at formatere celler hvis betingelser i en nabocelle er opfyldt.
B4:B41 skal formateres hvis betingelse i C4:C41 er opfyldt D4:D41 skal formateres hvis betingelse i E4:E41 er opfyldt F4:F41 skal formateres hvis betingelse i G4:G41 er opfyldt H4:H41 skal formateres hvis betingelse i I4:I41 er opfyldt J4:J41 skal formateres hvis betingelse i K4:K41 er opfyldt L4:L41 skal formateres hvis betingelse i M4:M41 er opfyldt N4:N41 skal formateres hvis betingelse i N4:N41 er opfyldt
Cellerne i alle kolonnerne er formateret med formatet Standard. Indholdet fremtræder som en tekststreng (selv om det mest er tal) Betingelserne er hvis indholdet i området starter med noget andet end + eller A eller B eller C skal indholdet i nabocellen formateres med overstreget font.
Jeg kender godt brugen af Formater-Betinget formatering, men her er for mange betingelser. Hvordan laver man det i VBA?
For Each c In r1.Cells førstetegn = Left(c.Value, 1) If InStr("+ABC", førstetegn) = 0 Then adr = c.Address Range(adr).Offset(0, -1).Select ActiveCell.Font.Strikethrough = True End If Next End Sub
OK, her har jeg fået et problem. Jeg glemte at fortælle at området heller ikke må være tomt.
Jeg har selv sat det ind i jkron's og kabbak's formler, og de virker - for så vidt. Men hvis man vender tilbage og ændrer en celle der giver overstreget font i nabocellen så den ikke skal give overstreget font, bliver det ikke ændret. Supertekst, kan ikke få din VBA til at virke. Har sat den ind i et modul og kalder den med F8 - Sub-navn. Den formaterer alle celler i kolonne B der har indhold, uanset om der står noget i kolonne C eller ej og uanset hvad der står i kolonne C
Hvad så hvis du f.eks. derefter ændrer B5 til Fxx og B6 til Axx og kører makroen igen? Jeg tager på arbejde nu. Får måske tid til at kigge ind igen ved 8-tiden.
For Each c In r1.Cells førstetegn = Left(c.Value, 1) adr = c.Address Range(adr).Offset(0, -1).Select
If InStr("+ABC", førstetegn) = 0 Or førstetegn = "" Or IsEmpty(førstetegn) = True Then ActiveCell.Font.Strikethrough = True Else ActiveCell.Font.Strikethrough = False End If Next End Sub
Det ser interessant ud supertekst. Jeg er på arbejde og får ikke tid til at teste før i morgen. Måske skulle den starte med at sætte formatet til normal font (uden overstregning) for området. Arket bruges til at hente data fra et andet ark i formatet [t]:mm, lave dem om til tekstformat og afkorte dem. Hvis din makro startede med at lave formatet til normal kunne jeg flette den ind i den makro der henter og indsætter data.
Private Sub SætTilStandard() GennemLøb False End Sub Private Sub TestOverstregning() GennemLøb True End Sub Private Sub GennemLøb(opgave As Boolean) udfør "C4:C41", opgave udfør "E4:E41", opgave udfør "G4:G41", opgave udfør "I4:I41", opgave udfør "K4:K41", opgave udfør "M4:M41", opgave udfør "O4:O41", opgave
End Sub Private Sub udfør(område, opgave) Dim rr Application.ScreenUpdating = False
Set rr = Range(område) For Each c In rr.Cells adr = c.Address Range(adr).Offset(0, -1).Select
If opgave = False Then ActiveCell.NumberFormat = "General" ActiveCell.Font.Strikethrough = False Else førstetegn = Left(c.Value, 1) If InStr("+ABC", førstetegn) = 0 Or førstetegn = "" Or IsEmpty(førstetegn) = True Then ActiveCell.Font.Strikethrough = True Else ActiveCell.Font.Strikethrough = False End If End If Next Application.ScreenUpdating = True End Sub
supertekst> OK, sender. Filen fylder 1,35 MB Alle ark er beskyttet på grund af funktionalitet overfor brugere. Der er ikke kodeord i beskyttelsen, og jeg har lavet en lille makro til at beskytte og en til at låse op (BeskytAlle - ÅbenAlle). Er først hjemme ca. 23:30
Her er den makrokode jeg har modtaget fra supertekst:
Public Sub SætTilStandard() GennemLøb False End Sub Public Sub TestOverstregning() GennemLøb True End Sub Private Sub GennemLøb(opgave As Boolean) udfør "C4:C41", opgave udfør "E4:E41", opgave udfør "G4:G41", opgave udfør "I4:I41", opgave udfør "K4:K41", opgave udfør "M4:M41", opgave udfør "O4:O41", opgave
End Sub Private Sub udfør(område, opgave) Dim rr Application.ScreenUpdating = False
Set rr = Range(område) For Each c In rr.Cells adr = c.Address Range(adr).Offset(0, -1).Select
If opgave = False Then ActiveCell.NumberFormat = "General" ActiveCell.Font.Strikethrough = False Else førstetegn = Left(c.Value, 1) If InStr("+ABC", førstetegn) = 0 Or førstetegn = " " Or IsEmpty(førstetegn) = True Then ActiveCell.Font.Strikethrough = True Else ActiveCell.Font.Strikethrough = False End If End If Next Application.ScreenUpdating = True End Sub
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.