VBA/PowerPoint:将日期-时间字段拆分为行



我有一个PowerPoint演示文稿,在其中我将一个自动更新的日期-时间字段添加到文本框中(通过插入->文本->日期和时间,选中"自动更新"(。调整文本框的大小,使文本(2021年3月31日,星期三(分为两行,例如:

Wednesday,
March 31, 2021

我想逐行处理信息,尝试以下VBA:

Sub TryLines()
For Each Line In ActiveWindow.Selection.TextRange2.Lines
Debug.Print Line
Next Line
End Sub

如果我在选择了整个日期-时间字段(分布在两行(的情况下调用此函数,我会得到以下输出:

Wednesday, March 31, 2021
Wednesday, March 31, 2021

即PowerPoint认识到实际上有两行,但显然不能"分手";日期-时间字段划分为实际的单独行,而将日期-时间域视为一个整体。类似的事情似乎也发生在Characters上。

实际问题:是否有方法逐行检索字段中的文本?我希望独立于日期格式和实际包装。

如果有帮助的话,还有一些背景:最后,我想计算一下文本选择highlighting形成的多边形。由于我在TextRange2中找不到这样做的方法,所以我考虑将其拆分为多条线并计算每条线的矩形:

Sub TryToComputeLineBounds() ' call this while the date-time field is selected
For Each Line In ActiveWindow.Selection.TextRange2.Lines
Dim x(4) As Single, y(4) As Single
Line.RotatedBounds x(1), y(1), x(2), y(2), x(3), y(3), x(4), y(4)
Debug.Print Line
For i = 1 To 4
Debug.Print x(i) & " | "; y(i)
Next i
Next Line
End Sub

我意识到每条(我假设的(线的测量点是相同的,然后发现Lines实际上并没有给我日期-时间字段内的线。

我认为您将行和字符作为一个整体,因为插入日期和字符有一些特殊之处;时间意味着它永远不会";分手";。我用一个文本框尝试了你的代码,其中有我键入的一些字符,它很有效——我能够一次读取一行和一个字符。

因此,可以临时复制文本框,但不插入自动日期,即与日期相等的文本值,然后使用副本计算多边形。

正如Morboss推测的那样,无论日期字段如何显示,它都会被读取为一行。在用户界面中,如果单击多行文字,则插入点将显示在单击的位置。日期并非如此:第一次单击它时,整个字段都会被选中,并且不会显示插入点。

作为一种变通方法,通过字符串解析获得日期和日期:

Sub GetDayName()
Dim SpacePos As Long
Dim FieldText As String, DayName As String, DateValue As String

FieldText = ActiveWindow.Selection.TextRange2.Text
SpacePos = InStr(FieldText, " ")
DayName = Left(FieldText, SpacePos)
DateValue = Right(FieldText, (Len(FieldText) - SpacePos))
MsgBox DayName
MsgBox DateValue
End Sub

最新更新