Office 2010 Word宏修改:将文本框内容替换为文件名
解决Word宏中替换文本框内容为文件名的问题
很简单,我们只需要修改宏里设置文本内容的那一行,用VBA获取当前文档的文件名(优先不带扩展名)就行。下面是修改后的完整代码,我还加了对未保存文档的兼容处理:
Sub AddATextBox() Dim Box As Shape Dim docFileName As String ' 获取不带扩展名的文件名,兼容未保存的文档 If InStrRev(ActiveDocument.Name, ".") > 0 Then docFileName = Left(ActiveDocument.Name, InStrRev(ActiveDocument.Name, ".") - 1) Else docFileName = ActiveDocument.Name End If Set Box = ActiveDocument.Shapes.AddTextbox( _ Orientation:=msoTextOrientationHorizontal, _ Left:=20, Top:=780, Width:=100, Height:=100) With Box .TextFrame.TextRange.Text = docFileName ' 替换原来的"ABC" .Line.Visible = msoFalse .TextFrame.TextRange.Font.Name = "Arial" ' 简化了原代码里的Box.前缀,因为在With块内已指向当前Shape .TextFrame.TextRange.Font.Size = 6 End With End Sub
关键说明:
- 文件名获取逻辑:
ActiveDocument.Name返回当前文档名称:如果文档已保存,就是带扩展名的完整文件名(比如Project.docx);如果未保存,就是类似文档1的无扩展名默认名称。InStrRev(ActiveDocument.Name, ".")定位文件名中最后一个.的位置,以此截取扩展名之前的部分,实现“优先不带扩展名”的需求。- 用If判断处理无扩展名的情况,避免代码因索引错误报错。
- 代码小优化:原代码里的
Box.TextFrame.TextRange.Font.Name可以简化为.TextFrame.TextRange.Font.Name,因为With Box块已经把操作对象锁定在当前文本框Shape上,代码更简洁。
这样修改后,运行宏就能自动把文本框内容替换成当前文档的文件名,完全适配Office 2010版本。
内容的提问来源于stack exchange,提问作者mpa
相关产品推荐
相关产品推荐

