我正在尝试在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))
该注释是一个多行字符串。
图像
所以这个味精框准确地返回了第一行。