Como estilizar programaticamente parte de uma string em uma célula calculada

2

Eu tenho uma célula que contém algo assim:

="String of text that's moderately long" & YEAR(NOW()) & "."

Eu quero saber se existe alguma maneira que, via macro, eu possa colorir / estilizar PART da string resultante . Como:

String of text [that's] {moderately} <long/2013.>

com a parte entre colchetes em vermelho, a parte em chaves em azul e a parte em < > sublinhado.

Eu já tentei isso:

Private Sub Workbook_Open()
    With Sheet1
        With .Cells(8, 1).Characters(25, 9).Font
            .Color = vbRed
        End With

        With .Cells(8, 1).Characters(34, 3).Font
            .Color = vbBlack
        End With

        With .Cells(8, 1).Characters(37, 9).Font
            .Color = vbBlue
        End With

        With .Cells(8, 1).Characters(47).Font
            .Color = vbBlack
            .Underline = True
        End With
    End With
End Sub

e enquanto funciona, parece funcionar apenas em células de conteúdo fixo, não em células com uma fórmula como a que tenho. Então sim, alguma idéia?

Eu não sou totalmente avesso a preencher a célula inteiramente do VBA, caso isso seja o que acontece.

    
por fbordas 02.02.2013 / 17:06

1 resposta

2

Existem duas maneiras de descrever o conteúdo da célula:

  1. O conteúdo real e
  2. o conteúdo visual aparente após a planilha ser avaliada após um cálculo.

Para uma string ou conteúdo fixo, estes são os mesmos. Mas para uma fórmula eles são completamente diferentes. Seu código do VBA está lidando com o conteúdo da célula (1), não com o resultado (2). Então, sim, você terá que recuperar o conteúdo de suas fórmulas e movê-las para células de conteúdo fixas, onde sua formatação de vba funcionará.

As opções são para usar uma linha oculta para as fórmulas e uma linha visível para a exibição real. Se a omissão de um número de linha usando uma referência de linha oculta for muito estranha / visível para o usuário pretendido, usar uma folha separada pode ser uma alternativa.

    
por 02.02.2013 / 17:49