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

问题描述

我有一个 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

欢迎任何想法查看哪些功能。特别是如果可以选择单个(活动)页面的第一个和第二个文本框。

标签: vbams-wordtextbox

解决方案


可能有更好的方法来做到这一点,但我发现 word 中的文本框真的很痛苦。

在这里,我们设置了框的名称,您如何确定我不确定的顺序,可能是使用标题或锚点的检查。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

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


推荐阅读