gpt4 book ai didi

vba - VBA (excel) 文本框的高级文本编辑

转载 作者:行者123 更新时间:2023-12-04 20:13:42 26 4
gpt4 key购买 nike

序言

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

到目前为止做了什么

幸运的是,开始很容易。我用 4 个文本框(2 个只读,2 个用于编辑)填充了用户窗体,其中填充了所选评论的数据(按索引),以及一些允许接受/放弃更改和在评论单元格之间导航的按钮。

问题本身

首先,当我从单元格中获取文本时,我需要保持文本格式。目前我没有采取任何格式,只是文本。我通过谷歌搜索发现我可以逐个字符设置格式,有点像下面的伪代码:

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 并向后复制?

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

有没有办法将格式化工具(位于 Home->Font 菜单中的工具,或者当您在单元格中选择一些文本时弹出菜单)添加到 UserForm 以编辑 TextBox 对象中的文本?

附言使用 Excel 2013

一点补充:
我以某种方式假设,如果没有直接的方法来做我在问题中描述的事情 - 必须有一些以前由某人创建的定制工具箱对象(类似于 EvenRicherTextBox)。我简直不敢相信这个问题从未出现,但我不知道我需要使用哪些关键字才能找到该对象。

最佳答案

您可以尝试为此创建一个自定义类,这是它的外观示例:

类模块代码(将模块命名为“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

关于vba - VBA (excel) 文本框的高级文本编辑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32713544/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com