我正在尝试查找一个VBA代码,该代码将遍历表的特定列中的行,并为每个迭代行创建一个TextBox,并将其设置为等于该单元格的值。
此处的代码Insert a TextBox and set the formula确实可以创建一个文本框,但我需要对其进行修改,以便迭代整个列。
我试着像这样制作一个循环:
Sub addTextBox()
Dim newshp As Shape
Dim newtb As TextBox
Dim i As Long
For i = 1 To Range("F" & Rows.Count).End(xlUp).Row
Set newshp = ActiveSheet.Shapes.addTextBox _
(msoTextOrientationHorizontal, 100, 100, 200, 80)
Set newtb = newshp.OLEFormat.Object
newtb.Formula = "Cells.Item(i, 6)"
Next i
End Sub
所以,newtb.Formula = "Cells.Item(i, 6)"
- 这就是我遇到问题的地方;显然.Formula
只能引用静态单元格。
我真的很感激如何使这种循环正确的提示。
答案 0 :(得分:0)
Formula
应该是Excel公式。因此,您需要将"Cells.Item(i, 6)"
更改为"=F" & i
。
Sub addTextBox()
Dim newshp As Shape
Dim newtb As TextBox
Dim i As Long
For i = 1 To Range("F" & Rows.Count).End(xlUp).Row
Set newshp = ActiveSheet.Shapes.addTextBox _
(msoTextOrientationHorizontal, 100, 100, 200, 80)
Set newtb = newshp.OLEFormat.Object
newtb.Formula = "=F" & i
Next i
End Sub
这将解决您当前的问题,但是您需要确定要放置TextBox的位置 - 此时您将它们全部放在彼此的顶部。
答案 1 :(得分:0)
如果你想将它们放在G列中并完全适合单元格,你可以试试这样的......
Sub addTextBox()
Dim newshp As Shape
Dim newtb As TextBox
Dim i As Long
Dim cell As Range
Dim vLeft, vTop, vWidth, vHeight
For i = 1 To Range("F" & Rows.Count).End(xlUp).Row
Set cell = Range("G" & i)
With cell
vLeft = .Left
vTop = .Top
vWidth = .Width
vHeight = .Height
End With
Set newshp = ActiveSheet.Shapes.addTextBox _
(msoTextOrientationHorizontal, vLeft, vTop, vWidth, vHeight)
Set newtb = newshp.OLEFormat.Object
newtb.Formula = "=F" & i
Next i
End Sub