Как изменить слова только выбранных ячеек таблицы с помощью макроса в Ms Word

У меня есть код, который работает с выделенным текущим текстом, но не работает с выбранными ячейками таблицы.

Dim i As Integer
Dim oWords As Words
Dim oWord As Range
Set oWords = Selection.Range.Words
For i = 1 To oWords.Count Step 1

    Set oWord = oWords(i)

    ''Make sure the word range doesn't include a space
    Do While oWord.Characters.Last.text = " "
        Call oWord.MoveEnd(WdUnits.wdCharacter, -1)
    Loop

    Debug.Print "'" & oWord.text & "'"
    oWord.text = StrReverse(oWord.text)

Next i

У меня также есть код для извлечения значения каждой ячейки, но как изменить его для запуска в выбранных ячейках таблицы. Первый код:

Sub Demo()
Dim x As String
Dim i As Integer
Dim j As Integer
Dim Tbl As Table
Set Tbl = ActiveDocument.Tables(1)
  For i = 1 To Tbl.Rows.Count
        For j = 1 To Tbl.Columns.Count
        x = Tbl.Cell(i, j).Range.Text
Next j
  Next i
End Sub

Второй код:

Sub testTable()
Dim arr As Variant
Dim intcols As Integer
Dim lngRows As Long
Dim lngCounter As Long

lngRows = ActiveDocument.Tables(1).Rows.Count
intcols = ActiveDocument.Tables(1).Columns.Count
arr = Split(Replace(ActiveDocument.Tables(1).Range.Text, Chr(7), ""), Chr(13))
For rw = 1 To lngRows
    For col = 1 To intcols
        Debug.Print "Table 1, Row " & rw & ", column " & col; " data is " & arr(lngCounter)
        lngCounter = lngCounter + 1
    Next
    lngCounter = lngCounter + 1
Next
End Sub

person M Ahad    schedule 06.12.2018    source источник
comment
Посмотрите, поможет ли ответ на этот вопрос: «чтение даты из таблицы в слове без дополнительных символов»> stackoverflow.com/questions/49532952/. Вы можете использовать функцию TrimCellText со своим кодом...   -  person Cindy Meister    schedule 06.12.2018


Ответы (1)


Вот код, который вы сможете адаптировать к своей цели.

Sub FindWordsInTableCells()
    Dim doc As Word.Document, rng As Word.Range
    Dim tbl As Word.Table, rw As Word.Row, cl As Word.Cell
    Dim i As Integer, iRng As Word.Range
    Set doc = ActiveDocument
    For Each tbl In doc.Tables
        For Each rw In tbl.rows
            For Each cl In rw.Cells
                Set rng = cl.Range
                rng.MoveEnd Word.WdUnits.wdCharacter, Count:=-1
                For i = 1 To rng.words.Count
                    Set iRng = rng.words(i)
                    Debug.Print iRng.Text
                Next i
            Next cl
        Next rw
    Next tbl
End Sub

Если вы хотите использовать только те ячейки, которые выбраны в данный момент, используйте эту адаптацию вышеуказанной процедуры.

Sub FindWordsInSelectedTableCells()
    Dim rng As Word.Range
    Dim cl As Word.Cell
    Dim i As Integer, iRng As Word.Range
    If Selection.Information(wdWithInTable) = True Then
        For Each cl In Selection.Cells
            Set rng = cl.Range
            rng.MoveEnd Word.WdUnits.wdCharacter, Count:=-1
            For i = 1 To rng.words.Count
                Set iRng = rng.words(i)
                rng.Select
                'insert your word manipulation code here
                Debug.Print Selection.Text
            Next i
        Next cl
    End If
End Sub
person Rich Michaels    schedule 06.12.2018
comment
Спасибо за решение, но это решает мою одну проблему, есть ли какое-либо решение, которое я могу запустить только для выбранных столбцов. - person M Ahad; 07.12.2018
comment
Если я запущу это только для выбранного столбца, тогда время выполнения уменьшится, и секунда мне придется объединить это с приведенным выше обратным кодом слова, поэтому я думаю, что если я пойду с каждой ячейкой, то каждое слово будет перевернуто. Есть ли у вас какое-либо решение, как я могу интегрировать эти два кода. - person M Ahad; 07.12.2018
comment
@MAhad, я добавил еще один пример того, как код будет выглядеть при просмотре только выбранных ячеек в таблице. - person Rich Michaels; 07.12.2018
comment
помогите мне с этим вопросом: stackoverflow.com/questions/53820982/ - person M Ahad; 19.12.2018
comment
@ Rich Michaels У меня есть еще одна проблема с макросом выбора выше. Если я хочу запустить один и тот же макрос дважды, я потерял выбранные ячейки ... но мне нужно, чтобы выбранная часть была выбрана после выбора. - person M Ahad; 19.12.2018