VBA按换行词拆分数据



我正在尝试在word中使用VBA拆分数据。

我使用以下方法获取了数据

d = ActiveDocument.Tables(1).Cell(1, 1).Range.Text

这有效并获得正确的数据。此示例的数据为

This
is
a
test

但是,当我需要使用分隔符将字符串拆分为字符串列表时

以下是所需输出的示例

This,is,a,test

我目前正在使用

Dim dataTesting() As String
dataTesting() = Split(d, vbLf)
Debug.Print dataTesting(0)

但是,这将返回所有数据,而不仅仅是第一行。

这是我在拆分函数中尝试过的内容

  • \
  • n\r
  • \r
  • vb新线
  • vbLf
  • vbCr
  • vbCrLf

Word使用 vbCr (ANSI 13) 编写一个"新"段落(按 Enter 时创建) - 如果激活了非打印字符的显示,则在 Word UI 中用 ¶ 表示。

在这种情况下,您显示的表格单元格内容将如下所示

This¶
is¶
a¶
test¶

在 Word 中拆分由 pilcro 分隔的数组的正确方法是:

Dim d as String
d = ActiveDocument.Tables(1).Cell(1, 1).Range.Text
Dim dataTesting() As String
dataTesting() = Split(d, vbCr)
Debug.Print dataTesting(0)  'result is "This"

你可以试试这个(这个线程的正则表达式拆分器)

Sub fff()
Dim d As String
Dim dataTesting() As String
d = ActiveDocument.Tables(1).Cell(1, 1).Range.Text
dataTesting() = SplitRe(d, "s+")
Debug.Print "1:" & dataTesting(0)
Debug.Print "2:" & dataTesting(1)
Debug.Print "3:" & dataTesting(2)
Debug.Print "4:" & dataTesting(3)
End Sub
Public Function SplitRe(Text As String, Pattern As String, Optional IgnoreCase As Boolean) As String()
Static re As Object
If re Is Nothing Then
Set re = CreateObject("VBScript.RegExp")
re.Global = True
re.MultiLine = True
End If
re.IgnoreCase = IgnoreCase
re.Pattern = Pattern
SplitRe = Strings.Split(re.Replace(Text, ChrW(-1)), ChrW(-1))
End Function

如果这不起作用,则Word文档中可能存在奇怪的Unicode/Wprd字符。例如,它可能是软休息。您可以尝试不要用"\W+"代替"\s+"拆分。没有您的文件,我无法对此进行测试。

Dim dataTesting() As String
dataTesting() = Split(d, vbLf)
Debug.Print dataTesting(0)

工作正常,非常感谢您的示例, 为什么它返回了一个完整的数组是因为您使用了 0 作为索引,在许多编程语言中 0 是整个数组,所以第一个元素是 , 所以在我的情况下,从 1 开始计算,这完美地分割了我遇到麻烦的字符串。

更准确地说,这就是在我的情况下使用它的方式

Dim dataTesting() As String
dataTesting() = Split(Document.LatheMachineSetup.Heads.Item(1).Comment, vbCrLf)
MsgBox (dataTesting(1))

该注释是一个多行字符串。

图像

所以这个味精框准确地返回了第一行。

最新更新