高级文本编辑VBA(excel)文本框

前言

最近我一直在努力处理大量的Excel电子表格,这些电子表格有很多文本和评论(多个人在单个文档上工作)。 一次又一次地编辑(考虑新的笔记)是非常困难的,因为文档导航在某些时候变得相当复杂。 所以,我决定我需要一些工具来获取/设置我实际需要的数据(单个单元格内容,相应的评论内容,单元格的行按需附加数据)。

到目前为止做了什么

幸运的是,开始非常简单。 我用4个文本框(2个只读,2个用于编辑)填充UserForm,填充所选评论的数据(按索引),以及一些允许接受/放弃更改并在注释单元之间导航的button。

问题本身

首先,当我从单元格中取出文本时,我需要保持文本格式。 目前我没有采取任何格式,只是文字。 我所发现的所有search结果都是我可以按字符设置字符格式,类似于下面的伪代码:

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,颜色,单元格中每个字母的大小)与文本,从单元格到文本框和反向?

其次我实际上需要用户窗体中的一些格式化工具来做我的forms上述的文本格式,所以问题二是:

有没有办法添加格式工具(位于首页 – >字体菜单,或者当您在单元格中select一些文本时popup菜单)到用户窗体编辑TextBox对象中的文本?

PS使用Excel 2013

有一点补充:我以某种方式假设,如果没有直接的方式去做我在问题中描述的东西 – 必须有一些由以前的人创build的定制的工具箱对象(某种EvenRicherTextBox)。 我不能相信这个问题从来没有出现,但我不知道我需要使用什么关键字来find这个对象。

你可以尝试为此创build一个自定义的类,下面是一个例子:

类模块代码(将模块命名为“FormattedString”)

 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