VBA Разделить данные по слову новой строки - PullRequest
0 голосов
/ 17 мая 2018

Я пытаюсь разделить данные, используя VBA внутри слова.

Я получил данные, используя следующий метод

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

Это работает и получает правильные данные. Данные для этого примера

This
is
a
test

Однако, когда мне нужно разбить строку на список строк, используя разделитель как \ n

Вот пример желаемого вывода

This,is,a,test

Я сейчас использую

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

Однако это возвращает все данные, а не только первую строку.

Вот что я пробовал в функции Split

  • \ п
  • \ п \ г
  • \ г
  • vbNewLine
  • vbLf
  • vbCr
  • vbCrLf

Ответы [ 2 ]

0 голосов
/ 17 мая 2018

Word использует vbCr (ANSI 13) для записи «нового» абзаца (созданного при нажатии клавиши ВВОД), представленного в пользовательском интерфейсе Word как ¶, если включено отображение непечатаемых символов.

В этом случае отображаемое содержимое ячейки таблицы будет выглядеть следующим образом

This¶
is¶
a¶
test¶

Правильный способ разделения массива, разделенного символом Pilcro в Word:

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"
0 голосов
/ 17 мая 2018

Вы можете попробовать это (разделитель регулярных выражений из этой темы )

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 могут быть странные символы юникода / Wprd.Это могут быть мягкие перерывы, например.Вы можете попытаться не разделять символом \ W + вместо "\ s +".Я не могу проверить это без вашего документа.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...