2012-04-24 3 views
6

У меня есть клетки первенствовать, которые содержат записи, как это:Excel VBA: сделать часть строки жирным

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

содержание ячейки отображается на нескольких строках в одной и той же клетке. Я хотел бы сделать только «имя» полужирным для всех записей. Я записал макрос, и я думаю, что решение должно быть что-то вроде этого:

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 

То, что я не знаю, как получить начальное значение и длина каждой записи. У кого-то появилась идея?

+0

Возможный дубликат [Excel VBA: изменение цвета определенных символов в ячейке] (http://stackoverflow.com/questions/7618121/excel-vba-change-color-of-certain-characters-in-a- клетка) – brettdj

ответ

9

Есть сейчас:

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

Вдохновленный различных исследований в последние несколько дней:

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 

Это может быть немного преувеличена, Бути протестировали его и он работает как шарм. Надеюсь это поможет!

Смежные вопросы