excel - 使用 Charcter().Insert 格式化单元格中的文本片段 (VBA)

标签 excel vba

我正在尝试在现有单元格中插入新的文本行而不丢失格式。

在单个单元格中,我有一个循环来添加基于工作表中的列的连接文本。这很好用,但与全局标准相比,我需要能够将某些行格式化为绿色,如果它是加法的,如果它被删除,我需要能够格式化。

例如:

“唐老鸭 1 - 米妮老鼠 1

唐老鸭 2 - 米妮老鼠 2(绿色)

唐老鸭 3 - 米妮老鼠 3

唐老鸭 4 - 米妮老鼠 4 (红色)

高飞 - 39 - 冥王星 - 39

高飞 - 42 - 冥王星 - 42"

我当前的代码执行循环,但问题是每次我用该单元格中的新数据行覆盖时都会丢失现有格式。

If ActiveCell.Offset(0, ColumnOffset) = 1 Then

     Need = ActiveCell.Offset(NeedNameOffset, ColumnOffset).Value
     DocCode = ActiveCell.Offset(NeedNameOffset + 1, ColumnOffset).Value

         If NeedsType = "Data Needs" Then
            DestDataNeedsCell.Value = DestDataNeedsCell.Value & NeedsCategory & " - " & Need & vbCrLf

         ElseIf NeedsType = "Document Needs" Then
            DestDocNeedsCell.Value = DestDocNeedsCell.Value & NeedsCategory & " - " & Need & " (" & DocCode & ")" & vbCrLf

         End If

我尝试使用最初似乎可以工作的 Character().Insert 函数,但由于某种原因并没有添加所有数据。我也不认为我改变颜色的方法只是正确地改变了事件线。
If ActiveCell.Offset(0, ColumnOffset) = 1 Then

   strValue = ActiveCell.Offset(0, ColumnOffset).Value
   Need = ActiveCell.Offset(NeedNameOffset, ColumnOffset).Value
   DocCode = ActiveCell.Offset(NeedNameOffset + 1, ColumnOffset).Value

     If NeedsType = "Data Needs" Then
        If strValue = "+1" Then
           startChar = Len(DestDataNeedsCell)
           DestDataNeedsCell.Characters(Len(DestDataNeedsCell) + 1, 1).Insert (NeedsCategory & " - " & Need & vbCrLf)
           endChar = Len(DestDataNeedsCell)
           DestDataNeedsCell.Characters(Start:=startChar, Length:=endChar).Font.Color = vbGreen

        ElseIf strValue = "-1" Then
           startChar = Len(DestDataNeedsCell)
           DestDataNeedsCell.Characters(Len(DestDataNeedsCell) + 1, 1).Insert (NeedsCategory & " - " & Need & vbCrLf)
           endChar = Len(DestDataNeedsCell)
           DestDataNeedsCell.Characters(Start:=startChar, Length:=endChar).Font.Color = vbRed
        Else
           DestDataNeedsCell.Characters(Len(DestDataNeedsCell) + 1, 1).Insert (NeedsCategory & " - " & Need & vbCrLf)
     End If

最佳答案

也许这个简单的例子会有所帮助。如果您在 A1 中有示例中的起始文本,然后在 A5 中有“Donald Duck 4 - Minnie Mouse 4”,这会将其添加到末尾并将文本着色为红色。

Sub x()

Dim r As Range, n As Long

n = Len(Range("A5")) 'new text added to end of A1

With Range("A1")
    .Characters(Len(.Value) + 1).Insert (vbCrLf & Range("A5"))
    .Characters(Len(.Value) - n, n + 1).Font.Color = vbRed
End With

End Sub

关于excel - 使用 Charcter().Insert 格式化单元格中的文本片段 (VBA),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46452305/

相关文章:

Excel VBA 范围值有时无法进行比较检查

python - 取消隐藏和隐藏工作簿中的列

excel - 使用VBA根据Excel中的点名称自动将照片添加到圆环图点

vba - 如何更改集合中某个项目的值

excel - 如何在 VBA 中声明 PtrSafe Sub? Windows 7、Excel 2016、64 位

html - VBA 从 span 类中提取值

vba - 将 3 个值中的 1 个传递给 Sub

vba - 如果隐藏工作表,我可以将工作表复制到新工作簿吗

mysql - 寻找将 Excel 单元格数据区域粘贴到 MySQL 的便捷方法

vba - 在vba中将%符号转换为字符串