序言
最近,我一直在努力研究那些有大量文本和评论的大型Excel电子表格(多个人在单个文档上工作)。一次又一次地编辑它(考虑新注释)非常困难,因为文档导航在某些时候变得非常复杂。所以,我决定我需要一些工具来获取/设置我实际需要的数据(单个单元格内容,相应的评论内容,单元格的按需行的附加数据)。
到目前为止做了什么
幸运的是,开始很容易。我在UserForm中填充了4个文本框(2个只读,2个用于编辑),其中填充了所选注释的数据(按索引),以及一些允许接受/放弃更改并在注释单元格之间导航的按钮。问题本身
首先,我需要在从单元格中获取文本时保持文本格式。目前我没有采取任何格式,只是文本。我通过Google搜索找到的是我可以逐个字符设置格式,类似于以下伪代码:
For i = 0 to Cells(Row, Col).Text.Length
MyTextBox.Text(i).FormatOption1 = Cells(Row, Col).Text(i).FormatOption1
...
MyTextBox.Text(i).FormatOptionN = Cells(Row, Col).Text(i).FormatOptionN
Next
但这种方法感觉很愚蠢。所以,问题一是:
有没有办法复制文本的全文格式(字体,B / I / U,颜色,单元格中每个字母的大小)以及文本,从单元格到TextBox以及向后复制,只需一行代码?
其次我实际上需要在UserForm中使用一些格式化工具来在我的表单中进行上述文本格式化,所以问题二是:
有没有办法在UserBox中添加格式化工具(位于Home-&gt;字体菜单或弹出菜单中,当您在单元格中选择一些文本时)以编辑TextBox对象中的文本?< / em>的
P.S。使用Excel 2013
有点补充: 我以某种方式假设如果没有直接的方法去做我在问题中描述的内容 - 必须有一些之前由某人创建的定制工具箱对象(有点像EvenRicherTextBox)。我简直无法相信这个问题永远不会出现,但我不知道我需要使用哪些关键字才能找到该对象。
答案 0 :(得分:2)
你可以尝试为此创建一个自定义类,这里有一个示例:
类模块代码(将模块命名为&#34; FormattedString&#34;)
Option Base 1
Private Type FSChar
Letter As Integer
Bold As Boolean
Italic As Boolean
Underline As Boolean
Colour As Long
Size As Integer
End Type
Private strCollection() As FSChar
Private strRange As Excel.Range
Private txt As String
Public Property Let FString(value As Excel.Range)
Set strRange = value
txt = strRange.text
ReDim strCollection(1 To Len(strRange.text)) As FSChar
For i = 1 To Len(strRange.text)
With strCollection(i)
.Letter = Asc(Mid(strRange.text, i, 1))
.Bold = (strRange.Characters(i, 1).Font.Bold = True)
.Italic = (strRange.Characters(i, 1).Font.Italic = True)
.Underline = (strRange.Characters(i, 1).Font.Underline = True)
.Colour = strRange.Characters(i, 1).Font.ColorIndex
.Size = strRange.Characters(i, 1).Font.Size
End With
Next
End Property
Public Property Get FString() As Excel.Range
Set FString = strRange
End Property
Public Sub WriteFStringToCell(ByRef writeCell As Range)
writeCell.value = txt
For i = 1 To UBound(strCollection)
With writeCell.Characters(i, 1).Font
.Bold = strCollection(i).Bold
.Italic = strCollection(i).Italic
.Underline = strCollection(i).Underline
.ColorIndex = strCollection(i).Colour
.Size = strCollection(i).Size
End With
Next i
End Sub
<强> 实施例 强>
(用A1写一些东西,用不同的格式等格式......)
Sub MacroMan()
Dim testClass As FormattedString
Set testClass = New FormattedString
testClass.FString = Range("A1")
testClass.WriteFStringToCell Range("A2")
End Sub