vba - 如果可能:如何编写一个 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
欢迎任何想法查看哪些功能。特别是如果可以选择单个(活动)页面的第一个和第二个文本框。
解决方案
可能有更好的方法来做到这一点,但我发现 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
您需要检查输入以确保不会出错。我也不相信文本框的名称是可靠的,但只要你没有做任何太疯狂的事情,这应该可以工作。
推荐阅读
- sql - 运行查询时子查询错误消息
- angular - 在单个 AWS S3 存储桶中托管多个 Angular 7 应用程序
- shell - 无法运行排序节点(Hyperledger 结构)
- r - 如何通过比较其他两个变量来创建新变量
- c++ - 如何在 Windows 7 中使用 D3D11 在标题栏中进行渲染?
- google-apps-script - Google App 脚本项目执行中的未知状态
- vb.net - 每个控件 var 的空异常
- r - Read .txt file into R with tab delimiter and every column starting with non-numeric value
- android - 从 Android 服务内部启动的 Singleton 实例是否会作为服务工作?
- docker - 从第 3 方存储库中检索 Docker 映像标签