Вероятно, есть лучший способ сделать это, но текстовые поля в слове я нахожу настоящей болью.
Здесь мы устанавливаем названия коробок, как вы определяете порядок, в котором я не уверен, может быть проверка с использованием заголовков или точка привязки. Свойство ID не является индексом, поэтому мы не можем его использовать.
Sub Rename()
Dim textbox As Object
Dim iter As Long
iter = 1
For Each textbox In ActiveDocument.Shapes 'I'm not sure how to set names manually
textbox.Name = "TextBox " & iter
iter = iter + 1
Next
End Sub
При условии, что у вас есть поля, названные в порядке их появления:
Sub TextSwap()
Dim targetbox As Long
Dim val1 As String
Dim val2 As String
targetbox = InputBox("Enter an Integer relating to the position of the textbox")
val1 = ActiveDocument.Shapes("TextBox " & targetbox).TextFrame.TextRange.Text
val2 = ActiveDocument.Shapes("TextBox " & (targetbox + 1)).TextFrame.TextRange.Text
ActiveDocument.Shapes("TextBox " & targetbox).TextFrame.TextRange.Text = val2
ActiveDocument.Shapes("TextBox " & (targetbox + 1)).TextFrame.TextRange.Text = val1
End Sub
Вам понадобится проверьте ввод, чтобы убедиться, что вы не получите ошибок. Я также не уверен, что названия текстовых полей надежны, но это должно работать, если вы не делаете ничего сумасшедшего.