消息框不允许在不更改系统默认值的情况下进行形成操作,这不是明智的前向方法。如果你想在提示中显示格式化文本,那么你可能最容易创建一个用户表单并适当地设置标签的格式。
例如,你可以决定细胞是否具有使用大胆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'。但结果相同。我需要格式化结果在需要格式化的其他系统中使用 –