【发布时间】:2019-10-22 08:14:33
【问题描述】:
在 powerpoint 中通过 VBA 生成幻灯片的过程中,我需要在生成的文本中插入一个“Wingdings 符号”,这是两个值的比较。我做了这个方法,它完全符合我的要求
Sub formatDifference(header As String, old As Integer, now As Integer, txt As TextRange)
Dim diff As Integer
diff = old - now
With txt
If (diff > 0) Then
.InsertSymbol "Wingdings", getArrowCharCode("down")
' getArrowCharCode is a custom function to get the
' char code as an Integer
ElseIf (diff = 0) Then
.InsertSymbol "Wingdings", getArrowCharCode("right")
Else
.InsertSymbol "Wingdings", getArrowCharCode("up")
End If
.InsertBefore header & now & " (" ' <-- note this line
.InsertAfter " " & Abs(diff) & ")"
End With
End Sub
formatDifference Sub 基本上只是在文本中添加一个项目符号行(在下面的示例中,在我添加非项目符号文本之前,该程序被调用了 4 次)。
我不明白的是,当我用一些文本启动文本然后使用 InsertSymbol 方法时,文本似乎实际上被替换了,而不是在末尾附加了符号。这是不同代码的示例:
Sub formatDifference(header As String, old As Integer, now As Integer, txt As TextRange)
Dim diff As Integer
diff = old - now
With txt
.InsertAfter header & now & " (" ' <-- line moved here
' it doesn't matter if I use
' .Text = "initial text"',
' it will do the same thing
If (diff > 0) Then
.InsertSymbol "Wingdings", getArrowCharCode("down")
ElseIf (diff = 0) Then
.InsertSymbol "Wingdings", getArrowCharCode("right")
Else
.InsertSymbol "Wingdings", getArrowCharCode("up")
End If
.InsertAfter " " & Abs(diff) & ")"
End With
End Sub
这是我从上面的代码中得到的两个结果的比较(以相同的顺序):
我对@987654329@方法的理解是,它会在最后一段的末尾插入符号,但看起来不像……我的第二个例子是错误的还是我误解了description of the method?
附注注意:header 参数包含回车和换行字符,这就是为什么第二次捕获的所有点都在同一行上,因为第一部分似乎被替换了。
【问题讨论】:
-
似乎
InsertSymbolfor PowerPoint 的工作方式类似于Word 的实现,如果您不想替换它,则必须在其中折叠范围。在txt.InsertSymbol()之前使用Set txt = txt.Characters(txt.Characters.Count + 1)将 TextRange 折叠到其末尾。 -
@asger 如果你能从你的评论中得到答案,我很乐意给你答案
-
@asger 仍然,我的只是一种解决方法,你的解释实际上正是我想要的哈哈
标签: vba powerpoint powerpoint-2010