如果可能的话:如何编写一个Word宏来交换活动页面上两个文本框的内容?

时间:2020-01-17 14:38:04

标签: vba ms-word textbox

我有一个Word文档,可以通过系列为书籍创建索引卡。在每一页上,有关一本书的信息。有时必须将两个字段交换为特定项目。因此,对于我的同事来说,只需单击一下,便可以节省很多工作。我有编程经验,但没有太多Office,也没有VBA。 是否可以做下面的事情? :

Pseudo code:
dim temp as string
dim temp2 as string
select first textbox on active page
temp = select.Text
select second textbox on active page
temp2 = select.Text
select.Text = temp
select first textbox on active page
select.Text = temp2

任何想法都可以使用。尤其是是否有可能选择单个(活动)页面的第一和第二文本框。

1 个答案:

答案 0 :(得分:-1)

可能有更好的方法来完成此操作,但是我发现文字中的文本框确实很痛苦。

在这里,我们设置框的名称,如何确定不确定的顺序(也许使用标题进行检查)或定位点。 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

您需要检查输入以确保没有错误。我也不相信这些文本框的名称是可靠的,但是只要您没有做任何太疯狂的事情,它就应该起作用。

相关问题