如何存储文本的原始格式预运行VBA?

时间:2016-10-31 15:42:46

标签: vba powerpoint powerpoint-vba

我有一些代码可以通过预定的颜色(黑色>红色>绿色>黑色等)切换选定文本的字体颜色。但是,我真正想要做的是让我的演示文稿已经存在的格式更具动态性。

例如,如果我在格式化为蓝色的幻灯片标题的一部分上运行宏,我没有一个好的方法回到原来的蓝色。我曾想过将格式化“复制”到某种变量,但我不确定如何准确地清除变量或将其存储起来以供日后使用。

更可能的是建立某种“上下文”搜索。如果我可以查看所选文本的左侧和右侧,可能会有一些颜色文本的输入(因为它很少需要在文本块中有所不同)。但这很快就超出了我的专业知识。

请参阅下面的代码了解当前设置。

Sub TextColorSwap()

On Error Resume Next

With ActiveWindow.Selection
    If .TextRange.Font.Color = RGB(0, 0, 0) Then
        .TextRange.Font.Color = vbRed
    ElseIf .TextRange.Font.Color = vbRed Then
        .TextRange.Font.Color = RGB(0, 153, 0)
    Else
        .TextRange.Font.Color = RGB(0, 0, 0)
    End If
End With

End Sub

专业人士的任何想法?

-R

1 个答案:

答案 0 :(得分:0)

这样的某些东西可以让你开始:

Option Explicit

Public bFirstColour As Boolean

Sub TextColorSwap()

  ' This will mask all errors, and if you don't have your own error handler,
  ' is bad practice as you'll never know if something's gone wrong.
  On Error Resume Next

  Dim lColour As Long
  Dim lCursor As Long

  With ActiveWindow.Selection

    If .Type = ppSelectionText Then
      ' Get the start position of the selected text
      lCursor = .TextRange.Start
      ' If there are characters to the left of the selected text, save the colour and set a flag
      If lCursor > 1 And Not bFirstColour Then
        lColour = .TextRange.Characters(1).Font.Color
        bFirstColour = True
      End If
      ' Toggle the colour
      With .TextRange.Font
        If .Color = lColour Then
          .Color = vbRed
        ElseIf .Color = vbRed Then
          .Color = RGB(0, 153, 0)
        Else
          ' Reset the colour to the colour fond to the left of the text
          .Color = lColour
          bFirstColour = False
        End If
      End With
    End If
  End With
End Sub