Funzione Excel incorporata o VBA per formattare parte del text (ad es. Colore)

Ho bisogno di formattare un colore (o un text grassetto) della prima row della cella di text multirow. Così ho ottenuto

= myfunction (firstLine, secondLine), che produce (all'interno di una sola cella)

firstLine (vbLf) secondLine 

ma ho bisogno di produrre

  **firstLine** (vbLf) secondLine ** firstLine ** (vbLf)  **firstLine** (vbLf) secondLine 

(la prima row è in grassetto) Così formando solo una porzione di una string ma all'interno di una function VBA. Potrei farlo all'interno di Sub con qualcosa di simile

  lngPos = InStr(myCell.Value, vbLf) With myCell.Characters(Start:=1, Length:=lngPos - 1).Font .FontStyle = "Bold" End With lngPos = InStr (myCell.Value, vbLf)  lngPos = InStr(myCell.Value, vbLf) With myCell.Characters(Start:=1, Length:=lngPos - 1).Font .FontStyle = "Bold" End With Con myCell.Characters (Inizio: = 1, Lunghezza: = lngPos - 1) .Font  lngPos = InStr(myCell.Value, vbLf) With myCell.Characters(Start:=1, Length:=lngPos - 1).Font .FontStyle = "Bold" End With .FontStyle = "Grassetto"  lngPos = InStr(myCell.Value, vbLf) With myCell.Characters(Start:=1, Length:=lngPos - 1).Font .FontStyle = "Bold" End With 

ma non riesco a trovare un modo per farlo all'interno di una function, se è anche ansible.

non è ansible fare altro che restituire un valore da una function definita dall'utente (UDF). È tuttavia ansible triggersre un evento di lavoro con la modifica e aggiornare i dati. Aggiungi questo nel module per la relativa scheda. Cambiare la gamma ("J6: J10") nell'intervallo di monitoraggio e aggiungere il grassetto / qualsiasi codice aggiuntivo:

 Private Sub Worksheet_Change(ByVal Target As Range) If Not Intersect(Target, Range("J6:J10")) Is Nothing Then ' do something on the cells End If End Sub Se non si intersecano (Target, Range ("J6: J10")) non è nulla poi Private Sub Worksheet_Change(ByVal Target As Range) If Not Intersect(Target, Range("J6:J10")) Is Nothing Then ' do something on the cells End If End Sub fa qualcosa sulle cellule Private Sub Worksheet_Change(ByVal Target As Range) If Not Intersect(Target, Range("J6:J10")) Is Nothing Then ' do something on the cells End If End Sub 

Se si desidera triggersre l'aggiornamento via codice in contrasto con l'attesa di una modifica diretta (e la formattazione di una cella non innesca un evento di Change ) potresti forzarlo tramite un semplice sub

Dovresti sempre disabilitare gli Events quando si lavora con l'evento Change per evitare loop involontari. Mentre la formattazione non provoca l'evento stesso, ulteriori modifiche / aggiunte di codice potrebbero farlo – buona pratica per ridurre questo rischio

module normale

 Sub MakeUpdate() Sheets(1).[a1:a10].Formula = Sheets(1).[a1:a10].Formula End Sub Sub MakeUpdate () Sub MakeUpdate() Sheets(1).[a1:a10].Formula = Sheets(1).[a1:a10].Formula End Sub Fogli (1) [a1: a10] .Formula = Fogli (1) [a1: a10] .Formula Sub MakeUpdate() Sheets(1).[a1:a10].Formula = Sheets(1).[a1:a10].Formula End Sub 

nel codice di foglio del foglio (1)

 Private Sub Worksheet_Change(ByVal Target As Range) Dim rng1 As Range Dim rng2 As Range Set rng1 = Intersect(Target, [a1:a10]) If rng1 Is Nothing Then Exit Sub With Application .ScreenUpdating = False .EnableEvents = False End With For Each rng2 In rng1.Cells rng2.Characters(1, InStr(rng2.Value, vbLf) - 1).Font.FontStyle = "Bold" Next With Application .ScreenUpdating = True .EnableEvents = True End With End Sub Dim rng2 come intervallo Private Sub Worksheet_Change(ByVal Target As Range) Dim rng1 As Range Dim rng2 As Range Set rng1 = Intersect(Target, [a1:a10]) If rng1 Is Nothing Then Exit Sub With Application .ScreenUpdating = False .EnableEvents = False End With For Each rng2 In rng1.Cells rng2.Characters(1, InStr(rng2.Value, vbLf) - 1).Font.FontStyle = "Bold" Next With Application .ScreenUpdating = True .EnableEvents = True End With End Sub Imposta rng1 = Intersezione (Target, [a1: a10]) Private Sub Worksheet_Change(ByVal Target As Range) Dim rng1 As Range Dim rng2 As Range Set rng1 = Intersect(Target, [a1:a10]) If rng1 Is Nothing Then Exit Sub With Application .ScreenUpdating = False .EnableEvents = False End With For Each rng2 In rng1.Cells rng2.Characters(1, InStr(rng2.Value, vbLf) - 1).Font.FontStyle = "Bold" Next With Application .ScreenUpdating = True .EnableEvents = True End With End Sub Se rng1 non è nulla allora uscire da Sub Private Sub Worksheet_Change(ByVal Target As Range) Dim rng1 As Range Dim rng2 As Range Set rng1 = Intersect(Target, [a1:a10]) If rng1 Is Nothing Then Exit Sub With Application .ScreenUpdating = False .EnableEvents = False End With For Each rng2 In rng1.Cells rng2.Characters(1, InStr(rng2.Value, vbLf) - 1).Font.FontStyle = "Bold" Next With Application .ScreenUpdating = True .EnableEvents = True End With End Sub Per each rng2 In rng1.Cells Private Sub Worksheet_Change(ByVal Target As Range) Dim rng1 As Range Dim rng2 As Range Set rng1 = Intersect(Target, [a1:a10]) If rng1 Is Nothing Then Exit Sub With Application .ScreenUpdating = False .EnableEvents = False End With For Each rng2 In rng1.Cells rng2.Characters(1, InStr(rng2.Value, vbLf) - 1).Font.FontStyle = "Bold" Next With Application .ScreenUpdating = True .EnableEvents = True End With End Sub rng2.Characters (1, InStr (rng2.Value, vbLf) - 1) .Font.FontStyle = "Grassetto" Private Sub Worksheet_Change(ByVal Target As Range) Dim rng1 As Range Dim rng2 As Range Set rng1 = Intersect(Target, [a1:a10]) If rng1 Is Nothing Then Exit Sub With Application .ScreenUpdating = False .EnableEvents = False End With For Each rng2 In rng1.Cells rng2.Characters(1, InStr(rng2.Value, vbLf) - 1).Font.FontStyle = "Bold" Next With Application .ScreenUpdating = True .EnableEvents = True End With End Sub