Как вы форматируете текст / строки в VBA? - PullRequest
2 голосов
/ 10 сентября 2009

В приведенном ниже коде я беру некоторые входные параметры, либо текст, либо ячейку, и объединяю их в одну строку, используя нужное мне форматирование. Мне нужно сделать Task_Name жирным шрифтом, а также текст, как «Lead:». Я знаю, что вы не можете сделать текст в переменной жирным шрифтом, но как мне это сделать? Эта ячейка, в которой я сохраняю значение, в конечном итоге используется при слиянии Word.

Мне нужно отформатировать часть строки. В приведенном ниже коде мне нужно сделать Task_Name, "Lead:" и т. Д. Жирным шрифтом.

Function GENERATE_STAFFING_SECTION(Task_Name, Lead_By, Members, Instructions)
    Dim tmpSection As String

    If Len(Task_Name > 0) And Len(Lead_By) > 0 And Len(Members) > 0 And Len(Instructions) > 0 Then
        tmpSection = vbLf _
                    & Task_Name _
                    & vbLf & "Lead : " & Lead_By _
                    & vbLf & "Ambassadors : " & Members _
                    & vbLf & "Instructions : " & Instructions _
                    & vbLf
    Else
        tmpSection = ""
    End If

    GENERATE_STAFFING_SECTION = tmpSection
End Function

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

Спасибо!

1 Ответ

5 голосов
/ 10 сентября 2009

Вы не можете ничего добавить в строку, чтобы в ячейке были жирные символы.

После того, как вы записали строку в ячейку, вам нужно вернуться и повторно обработать ячейку. Например:

With ActiveCell.Characters(Start:=11, Length:=6).Font 
    .Name = "Arial" 
    .FontStyle = "Bold" 
    .Size = 10 
    .Strikethrough = False 
    .Superscript = False 
    .Subscript = False 
    .OutlineFont = False 
    .Shadow = False 
    .Underline = xlUnderlineStyleNone 
    .ColorIndex = xlAutomatic 
End With 

Этот фрагмент выделит жирным только часть ячейки.

EDIT:

Этот код может быть использован для реализации вышеуказанного и даст вам то, что вы хотите. Это может быть написано лучше, но должно дать вам представление о том, что вы должны написать:

Public Sub FormatOuput()

    Dim i As Integer

    'Format Task_name
    i = InStr(1, ActiveCell.Text, vbLf)
    MakeBold 1, i

    'Format 'Lead'
    MakeBold i + 1, 4

    'Format 'Ambassadors'
    i = InStr(i + 1, ActiveCell.Text, vbLf)
    MakeBold i+1, 11

    'Format 'Instructions'
    i = InStr(i + 1, ActiveCell.Text, vbLf)
    MakeBold i+1, 10

End Sub

Public Sub MakeBold(startPos As Integer, charCount As Integer)
    With ActiveCell.Characters(start:=startPos, length:=charCount).Font
        .Name = "Arial"
        .FontStyle = "Bold"
        .Size = 10
        .Strikethrough = False
        .Superscript = False
        .Subscript = False
        .OutlineFont = False
        .Shadow = False
        .Underline = xlUnderlineStyleNone
        .ColorIndex = xlAutomatic
    End With
End Sub
...