【问题标题】:Selection of non-white characters with VBA用 VBA 选择非白色字符
【发布时间】:2024-01-09 20:49:01
【问题描述】:

在 MS-Word 中,我有这样的文字:hif.imp. ינעימשת od שמע 当我双击希伯来语单词时,该范围被选中,单词后有空格。我想创建宏,这将减少空白字符。

Dim r1 As Range
Dim str1 As String
Set r1 = Selection.Range
r1.SetRange Start:=0, End:=Len(Trim(r1.Text))

但是当我运行它时,没有任何反应,选择仍然包括空间。如何解决这个问题?

【问题讨论】:

  • 尝试使用selection.MoveEnd wdCharacter, -1 - 如果不起作用,请尝试-2等
  • r1.SetRange Start:=0, End:=Len(Trim(r1.Text)) 设置一个指向与Selection 相同的位置但独立于它的范围。它不会改变选择的内容。您需要添加 r1.Select 才能做到这一点。
  • @TimothyRylatt:嗯,但是Start不能为0,必须是选区的起始位置。 r1.SetRange Start:=r1.Start, End:=Len(Trim(r1.Text)) r1.Select 仍然无法正常工作。是的,现在可以选择了,但是起始位置不对。另外,所选字符的计数似乎错误。
  • 试着想想你在做什么。 SetRangeStartEnd 参数是文档中的位置,而不是您的范围,即位置 0 是文档的开头。因此,当您设置结束时,它需要相对于开始进行设置,即开始 + 文本长度。您还需要注意Trim 将删除字符串两端的空格,因此也会影响您的起始位置。
  • 我明白了! r1.SetRange Start:=a, End:=a + b谢谢

标签: vba ms-word selection


【解决方案1】:

Trim 应该可以按预期工作。在其他地方发布。

最少的工作代码

Dim sht As Worksheet

Set sht = Sheets("Sheet1")

Dim value1, value2 As String

value1 = sht.Cells(1, 1)

value2 = RTrim(LTrim(value1))
value3 = Trim(Trim(value1))

MsgBox ("'" + value1 + "'" + vbCrLf + "'" + value2 + "'" + vbCrLf + "'" + value3 + "'")

value2 的结果等于 value3 的结果

【讨论】:

  • 问题在 MS-Word 应用程序上。
  • VBA 是一样的——在 Excel 中的 Word 和 Access 中......好吧。让我用Word检查一下...
【解决方案2】:

单词代码:

双击单词,然后运行宏。这应该只选择文本。

Sub Makro2()
Dim r1 As Range
Dim str1 As String
Dim a As Integer
Dim b As Integer
Set r1 = Selection.Range
str1 = Trim(r1.Text)
a = r1.Start
b = Len(Trim(r1.Text))
r1.SetRange Start:=a, End:=a + b
r1.Select
End Sub

【讨论】:

  • 或者,只需按 Shift+向左箭头将所选内容的末尾移回。
最近更新 更多