可能的情况,假设我们创建了一个包含以下行的Range Object
:
投机性买入,FV:19.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
注意:可能还有其他方法可以产生相同的结果。 您可以自由地建议我另一个简单的代码。
可以使用 WdCharacterCase 枚举将大小写分配给范围。对于标题大小写:
R.Case = wdTitleWord
放入示例代码的上下文中,如下所示。我做了一些调整:
- 我的版本假设您想使用当前选择所在的段落,这就是为什么我注释掉了您的前两行
- 在 VBA 中,您需要声明每个变量的数据类型,否则它是变体。所以:
Dim R As Word.Range
- VBA 提供了根据分隔符划分字符串的
Split
函数。我用它来获取要搜索的术语,以便您可以直接获取范围 - 我发现在具有全部大写的文本上设置标题大小写时,它不会将大写字母减少为小写。但是首先应用小写,然后应用标题大小写,确实有效。
示例代码
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