VBA Script au format conditionnellement texte spécifique dans une cellule concaténée
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
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