excel vba: make part of string bold

后端 未结 2 707
清歌不尽
清歌不尽 2020-12-06 18:17

I have excel cells which contain entries like this:

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

Cell content is displayed on multiple lines in the

相关标签:
2条回答
  • 2020-12-06 18:40

    Inspired by various research in the last few days:

    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
    

    It might be a bit overdone, butI have tested it and it works like a charm. Hope this helps!

    0 讨论(0)
  • 2020-12-06 18:44

    Have it now:

    lngPos = InStr(ActiveCell.Value, "/")
    With ActiveCell.Characters(Start:=1, Length:=lngPos - 1).Font
        .FontStyle = "Bold"
    End With
    
    0 讨论(0)
提交回复
热议问题