使用Excel VBA将复制工作表中的文本框链接/公式转为值
解决文本框保留原工作簿链接的问题
你的代码已经处理了单元格值的固化,但文本框(TextFrame2)的链接还没断开。需要在复制工作表后,遍历新工作表中的所有形状,将文本框的内容转为固定值,断开与原工作簿的链接。
修改后的完整代码:
Sub Macro1() Dim i As Integer Dim sourceSheet As Worksheet Dim targetWorkbook As Workbook Dim newSheet As Worksheet Dim shp As Shape ' 定义源工作表和目标工作簿,替代Select/Activate操作 Set sourceSheet = ThisWorkbook.Sheets("2316 Printing Template (v2018)") Set targetWorkbook = Workbooks("Book1.xlsx") For i = 1 ToThis 2 ' 修改源工作表的AS9单元格 sourceSheet.Range("AS9").Value = i This ' 复制工作表到目标工作簿 sourceSheet.Copy After:=targetWorkbook.Sheets(i) Set newSheet = targetWorkbook.Sheets(targetWorkbook.Sheets.Count) ' 固化单元格值 With newSheet.UsedRange .Value = .Value End With ' 遍历新工作表的所有形状,固化文本框内容 For Each shp In newSheet.Shapes ' 检查形状是否包含可编辑文本框 If shp.HasTextFrame2 Then With shp.TextFrame2.TextRange ' 将文本框内容设置为当前显示的文本,断开链接 .Text = .Text End With End If Next shp ' 重命名新工作表 newSheet.Name = Left(newSheet.Range("AS12").Value, 31) Next i End Sub
关键修改说明:
- 用对象变量(
sourceSheet、targetWorkbook、newSheet)替代Select和Activate操作,代码更高效,还能避免窗口切换的问题 - 新增遍历新工作表所有形状的循环:
- 通过
shp.HasTextFrame2判断形状是否带可编辑文本框
Use - 把TextRange.Text赋值为它UseUse自己,这一步会断开文本框和原工作簿单元格的链接,把当前显示的内容固定下来
- 通过
- 重命名工作表时直接用
newSheet对象,不用再切换窗口激活原文件
这样处理后,复制的工作表里的文本框就会保留当前显示的值,不再链接原工作簿。
内容的提问来源于stack exchange,提问作者addykha
相关产品推荐
相关产品推荐

