消息框不允許在不更改系統默認值的情況下進行形成操作,這不是明智的前向方法。如果你想在提示中顯示格式化文本,那麼你可能最容易創建一個用戶表單並適當地設置標籤的格式。
例如,你可以決定細胞是否具有使用大膽fomatting:
Dim isBold As Boolean
isBold = v1(i, j).Font.Bold
而且使用申請這一個窗體標籤字體:
label.Font.Bold = isBold
如果要輸出到一個文本(即.txt)文件,那麼這不能存儲任何格式信息。你可能希望達到最好的是創建一個標記樣式輸出,其中:
If isBold Then
txt = "<b >mytext< /b>" 'Ignore the spaces
Else
txt = "mytext"
End If
的range.Font.Bold
屬性有三種回報選擇:
v1(i, j).Font.Bold = True 'if the entire cell IS bold
v1(i, j).Font.Bold = False 'if the entire cell IS NOT bold
v1(i, j).Font.Bold = Null 'if the cell is PARTIALLY bold
調用IsNull(v1(i, j).Font.Bold)
會告訴你,你是否有在部分fomatting細胞。不幸的是,您必須逐個評估字符串中的每個字符以確定粗體字符。這個功能應該確定其中粗體格式中包含傳遞的Range
對象的字符串開啓或關閉,並添加適當的標記標籤:
Function markup(rng As Range) As String
Dim chr As Integer
Dim isCharBold As Boolean
Dim str As String
Dim tempChar As Characters
isCharBold = False
str = ""
If IsNull(rng.Font.Bold) Then
For chr = 1 To rng.Characters.Count
Set tempChar = rng.Characters(chr, 1)
If isCharBold Then
If tempChar.Font.Bold Then
str = str + tempChar.Text
Else
isCharBold = False
str = str & "</b>" & tempChar.Text
End If
Else
If tempChar.Font.Bold Then
isCharBold = True
str = str + "<b>" & tempChar.Text
Else
str = str & tempChar.Text
End If
End If
Next chr
Else
str = rng.Value
End If
markup = str
End Function
注意,Else
情況下,只需返回默認字符串值。您可以修改此方法以適用於.Font
屬性的任何屬性,例如刪除線,下劃線,斜體....
OP中的框架建議您將一系列單元格的內容分配到Variant
類型的數組中。這基本上讓你在每個數組索引中都有一個未格式化的字符串。在這種情況下,您將無法從數組字符串中提取任何格式。要訪問Characters().Font.Bold
屬性,您必須在Range
對象上運行,因此最好直接遍歷Range("A2:C15")
中的每個單元格。這可以通過修改初始代碼等來實現,所以現在調用標記功能:
Sub OutputText()
Dim i As Integer, j As Integer
Dim rng As Range
Dim Txt As String
Set rng = Range("A2:C15")
For i = 1 To rng.Rows.Count
For j = 1 To rng.Columns.Count
Txt = Txt & markup(rng(i, j)) & " "
Next j
Txt = Txt & vbCrLf
Next i
Debug.Print Txt
End Sub
是沒有錯的代碼。它使用'Range(「A2:C15」)''的數據獲取一個數組而不進行格式化。如果您需要格式化,則必須運行範圍內的所有單元格並獲取值和格式。如果你真的想獲得最初的富文本內容,也許你甚至可以運行單元格文本值中的所有字符。但是'MsgBox'不能輸出RichText。所以主要的問題是:你會在哪裏輸出連接文本? –
我試過'Debug.Print txt'。但結果相同。我需要格式化結果在需要格式化的其他系統中使用 –