更改范围文本的大小写并键入它

时间:2018-03-21 11:33:27

标签: vba object split range word-vba

可能的情况,假设我们创建了一个包含以下行的Range Object

投机买入,FV:EGP19.59

现在我想将Range Object分成两部分“,”作为delimiter,以便给定的Range将变为两个包含“投机购买”和“,FV”的范围:EGP19.59“(两个单独的范围)。

现在我需要使用以下方法将仅包含“投机购买”的第一个范围的情况更改为“投机购买”:

.Case = wdTitleWord

以前我使用.Find更改以下代码中的范围(这不是完整的代码,因为它只更改范围R,而不是将其拆分为两个):

Sub Range_into_Ranges()

selection.EndKey Unit:=wdLine
selection.MoveUp Unit:=wdParagraph, COUNT:=1, Extend:=wdExtend
Dim R, F As Word.Range
Set R = selection.Range
Set F = R.Duplicate
    With F.Find
    .Text = ", "
    .Forward = True
    .Wrap = wdFindStop
    .Execute
    End With
    If F.Find.Found Then
    R.SetRange Start:=R.Start, _
    End:=F.Start
    R.Case = wdTitleWord
    Else
    End If
End Sub

注意:可能有其他方法可以产生相同的结果。你可以自由地给我一个简单的代码。

1 个答案:

答案 0 :(得分:1)

您可以使用WdCharacterCase枚举将案例分配给Range。对于标题案例:

R.Case = wdTitleWord 

加入示例代码的上下文,如下所示。我做了一些调整:

  • 我的版本假设你想要使用当前选择的段落,这就是为什么我注释了你的前两行
  • 在VBA中,您需要声明每个变量的数据类型,否则它是Variant。所以:Dim R As Word.Range
  • VBA提供Split函数来根据分隔符划分字符串。我使用它来搜索术语,以便您可以直接获得范围
  • 我在为具有ALL CAPS的文本设置Title Case时发现它不会将大写字母缩小为小写。但首先应用小写,然后是标题案例,确实有效。

示例代码

Sub Range_into_Ranges()

'    Selection.EndKey Unit:=wdLine
'    Selection.MoveUp Unit:=wdParagraph, Count:=1, Extend:=wdExtend
    Dim R As word.Range, F As word.Range
    Dim sTerm As String, bFound As Boolean

    Set R = Selection.Paragraphs(1).Range
    R.MoveEnd wdCharacter, -1 'Trim off the paragraph mark
    sTerm = R.Text
    sTerm = Split(sTerm, ",")(0)
    Set F = R.Duplicate
    With F.Find
        .Text = sTerm
        .Forward = True
        .wrap = wdFindStop
        bFound = .Execute
    End With
    If bFound Then
        F.Case = wdLowerCase
        F.Case = wdTitleWord
    Else
    End If
End Sub