2013-02-28 21 views
5

Zbudowałem ciąg znaków za pomocą formuły w programie excel. jako przykładFormatowanie podzbioru tekstu w komórce programu Excel przy użyciu formuły

C3 komórka zawiera tekst "Języki"
komórka C4 = "angielski, hiszpański, niemiecki, francuski"
Moja forumla = C3 & ":" & Char (10) & C4

żądany tekst będzie:

Języki:
angielski, hiszpański, niemiecki, francuski

(gdzie pogrubiony tekst byłby rzeczywiście trochę jak kolor czerwony)

Czy istnieje sposób, aby to zrobić w Excelu (zmienić formatowanie tekstu częściowe).

Próbowałem formułę ... (Nie działa)

Function formatText(InText As Range) 

'Set font color 
    InText.Characters(1.5).Font.Color = Red 
    'InText.Characters((InStr(1, ":", InText) + 1), (Len(InText) - InStr(1, ":", InText))).Font.ColorIndex = 3 
End Function 
+1

+1 ciekawy problem/niedobór aplikacji – whytheq

Odpowiedz

4

Twoja funkcja wysłana z pracą wtedy i tylko wtedy

  • Nazywa z Sub (czyli jako drugi już wspomniano, nie jako UDF)

I

  • wartości zawarte w zakresie InText są stałymi łańcuchowymi. (To jest głównym punktem mojej odpowiedzi)

To nie zadziała dla jakichkolwiek komórek w zakresie InText zawierającej formułę. AFAIK nie można sformatować część ciągu zwracanego przez formułę.

BTW Chciałbym być udowodniony źle w tym!

+0

+1! Chciałbym udowodnić, że się mylisz, ale zadziała to tylko wtedy, gdy wcześniej zmienisz formułę na wartość. w przeciwnym razie zastosuje kolor do wszystkich komórek. :-( –

+0

Tak ... Rozumiem, co mówisz ... tak, jak byś rzucił wynik formuły na ciąg znaków, abyś mógł zastosować formatowanie tekstu? – Hightower

0

Nie można wywołać bezpośrednio poniżej UDF w interfejsie programu Excel. Do tego będziesz używał zdarzenia, ponieważ UDF nie może zmienić fizycznej charakterystyki komórki. Aby uzyskać więcej informacji, możesz przeczytać ten link. http://support.microsoft.com/kb/170787

Function formatText(InText As Range) 

'Set font color 
    InText.Interior.Color = vbRed 
    'InText.Characters((InStr(1, ":", InText) + 1), (Len(InText) - InStr(1, ":", InText))).Font.ColorIndex = 3 
End Function 
0

Musisz użyć tego kodu:

InText.Characters(1,5).Font.Color = RGB(255, 0, 0) 

Jeśli chcesz, aby to elastyczny, tak, że tylko (w pełni), druga linia jest czerwona, użyj tego kodu:

InText.Characters(Instr(InText, vbCr)+1, Len(InText)-Instr(InText, vbCr)).Font.Color = RGB(255, 0, 0) 

Pamiętaj, że twoja funkcja musi być wywołana z VBA, tzn. Nie możesz jej używać jako funkcji zdefiniowanej przez użytkownika! UDF mogą zwracać tylko wynik, ale nigdy nie modyfikować komórki!

1

Jeśli chodzi o pytanie Hightower, "w jaki sposób można wypisać wyjście formuły na łańcuch, aby można było zastosować formatowanie tekstu?"

Aby "rzutować" wyjście formuły, aby można było zastosować formatowanie tekstu, należy zapisać wartość zwróconą przez formułę do arkusza kalkulacyjnego, a następnie zastosować formatowanie do zapisanej wartości. Możesz zapisać wartość w komórce zawierającej formułę (która usunie formułę) lub możesz zapisać wartość w innym miejscu w arkuszu kalkulacyjnym (która zachowa formułę, ale wtedy zobaczysz podwójnie).

Sub Cell_Format(InText as Range) 
    InText.formula = cstr(InText.value) ' converts result of formula into a string literal 
    'or: InText.offset(0,1).formula = cstr(InText.value) -- writes the value in the cell next to InText 
    InText.characters(1, 5).font.color = vbRed 
End Sub 

Następnie Cell_Format range("$A$1") zastąpi formułę w komórce $ 1 $ z ciągiem stałym i zmienić kolor pierwszych pięciu znaków na czerwony.

Jeśli chcesz zrobić to dla wielu większych niż jednej komórki, dodaj ten kod do powyższego:

Sub Range_Format(InText as Range) 
    For each c in InText 
    Cell_Format(c) 
    Next 
End Sub 
Powiązane problemy