VBA Script au format conditionnellement texte spécifique dans une cellule concaténée

StackOverflow https://stackoverflow.com//questions/22060605

  •  23-12-2019
  •  | 
  •  

Question

Je suis nouveau pour exceller et essayer d'écrire un script VBA pour formater conditionnellement certaines cellules.

J'ai une colonne A à chaque cellule ressemble à ceci.

Nom du projet: Nom one
AO: Nom deux
Bo: Nom Trois
Co: Nom Quatre
Faire: nom cinq

Un détail supplémentaire est que toutes les cellules n'ont pas toutes cinq lignes. Par exemple, une cellule peut seulement avoir:

ao: nom deux
Bo: Nom Trois

Ce que je dois faire est de le formater afin que le nom du projet :, ao :, BO :, Co :, et font: sont tous en gras tandis que le nom est en gras, italicisé et coloré. Je ne peux pas dire comment ajouter de la couleur ici, mais cela ressemblerait à ceci.

Nom du projet: nom un (avec couleur)

AO: Nom Deux
bo: Nom Trois
co: nom quatre
faire: Nom cinq

Je me demande s'il y a un moyen de créer un script VBA pour le faire automatiquement? Ma solution de contexte Les derniers jours ont sélectionné individuellement du texte dans chaque cellule et en appliquant le formatage là-bas, et il a été enfer!

Version Excel: 2010

Était-ce utile?

La solution

édité

Cette paire de sous-routines fera le travail.Le formatage peut être appliqué à une gamme de cellules à la fois.

' Make a keyboard shortcut for this macro:
Sub FormatActiveCells()
    Dim c As Range
    For Each c In Selection.Cells
        FormatCell c
    Next
End Sub

' This subroutine does the work
Sub FormatCell(c As Range)
    Dim pos1 As Integer, pos2 As Integer
    ' Determine if line 1 is project name
    pos1 = InStr(1, c.Text, "Project Name:")
    If pos1 > 0 Then
        ' Make "Project Name:" bold
        c.Characters(pos1, Len("Project Name:")).Font.FontStyle = "Bold"
        ' Advance past colon character
        pos1 = pos1 + Len("Project Name:")
        ' Find end-of-line character
        pos2 = InStr(pos1, c.Text, Chr(10))
        ' Make text between "Project Name:" and end-line italicized and colored
        c.Characters(pos1, pos2 - pos1).Font.FontStyle = "Bold Italic"
        c.Characters(pos1, pos2 - pos1).Font.Color = RGB(0, 0, 255)
        ' Point both positions to one character past end-of-line
        pos2 = pos2 + 1
        pos1 = pos2
    Else
        ' Point both positions to first character
        pos1 = 1
        pos2 = 1
    End If

    ' Format additional lines
    Do
        ' Find colon character
        pos2 = InStr(pos1, c.Text, ":")
        ' If not found, we're done
        If pos2 = 0 Then Exit Do
        ' Make text from start of line to colon bold
        c.Characters(Start:=pos1, Length:=pos2 - pos1).Font.FontStyle = "Bold"
        ' Find end-of-line
        pos2 = InStr(pos2 + 1, c.Text, Chr(10))
        ' If not found, we're done
        If pos2 = 0 Then Exit Do
        ' Point both positions to one character past end-of-line
        pos2 = pos2 + 1
        pos1 = pos2
        DoEvents
    Loop
End Sub

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top