2012-04-24 10 views
6

I Excel-Zellen haben, die Einträge wie folgt enthalten:Excel VBA: make Teil der Zeichenfolge bold

name/A/date 
name/B/date 
name/C/date 

Zellinhalt in mehreren Zeilen in der gleichen Zelle angezeigt wird. Ich möchte nur "name" für alle Einträge fett machen. Ich nahm einen Makro, und ich glaube, die Lösung so etwas wie diese:

ActiveCell.FormulaR1C1 = "name/A/date" & Chr(10) & "name/B/date" & Chr(10) & "name/C/date" 
With ActiveCell.Characters(Start:=25, Length:=4).Font 
    .FontStyle = "Bold" 
End With 

Was ich nicht weiß, wie man den Startwert erhalten und die Länge jeden Eintrag. Jeder hat eine Idee?

+0

möglich Duplikat von [Excel VBA: Farbe bestimmter Zeichen in einer Zelle ändern] (http://stackoverflow.com/questions/7618121/excel-vba-change-color-of-certain-characters-in-a- Zelle) – brettdj

Antwort

9

es habe jetzt:

lngPos = InStr(ActiveCell.Value, "/") 
With ActiveCell.Characters(Start:=1, Length:=lngPos - 1).Font 
    .FontStyle = "Bold" 
End With 
0

von verschiedenen Forschungs in den letzten Tagen inspiriert:

Dim totalVals, startPos(), endPos(), i, j, strLen As Long 
Dim currLine As String 

' Split the cell value (a string) in lines of text 
splitVals = Split(ActiveCell.Value, Chr(10)) 

' This is how many lines you have 
totalVals = UBound(splitVals) 

' For each line, you'll have a character where you want the string to start being BOLD 
ReDim startPos(0 To totalVals) 

' And one character where you'll want it to stop 
ReDim endPos(0 To totalVals) 

' The value of the current line (before we loop on ActiveCell.Value) is empty 
currLine = "" 

For i = 0 To totalVals ' For each line... 

    ' Length of the string currently treated by our code : 0 if no treatment yet... 
    strLen = Len(currLine) 

    ' Here we parse and rewrite the current ActiveCell.Value, line by line, in a string 
    currLine = currLine & IIf(currLine = "", "", Chr(10)) & splitVals(i) 

    ' At each step (= each line), we define the start position of the bold part 
    ' Here, it is the 1st character of the new line, i.e. strLen + 1 
    startPos(i) = strLen + 1 

    ' At each step (= each line), we define the end position of the bold part 
    ' Here, it is just before the 1st "/" in the current line (hence we start from strLen) 
    endPos(i) = InStr(IIf(strLen = 0, 1, strLen), currLine, "/") 

Next i 

' Then we use the calculated positions to get the characters in bold 
For j = 0 To UBound(startPos) 
    ActiveCell.Characters(startPos(j), endPos(j) - startPos(j)).Font.FontStyle = "Bold" 
Next j 

Es ist vielleicht ein bisschen übertrieben wird, hat buti es getestet und es funktioniert wie ein Charme. Hoffe das hilft!

Verwandte Themen