Vba 为列中的每一行创建文本框
我试图找到一个VBA代码,它将遍历表中特定列中的行,并为每个迭代行创建一个文本框,并将其设置为该单元格的值 这里的代码确实可以创建一个文本框,但我需要修改它,使其遍历整个列 我试着做一个这样的循环:Vba 为列中的每一行创建文本框,vba,excel,Vba,Excel,我试图找到一个VBA代码,它将遍历表中特定列中的行,并为每个迭代行创建一个文本框,并将其设置为该单元格的值 这里的代码确实可以创建一个文本框,但我需要修改它,使其遍历整个列 我试着做一个这样的循环: 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 = Activ
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
只能引用静态单元格
如果您能给我一些提示,告诉我如何纠正这种循环,我将不胜感激。这个
公式应该是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
这将解决您眼前的问题,但您需要确定文本框的放置位置-此时您要将它们全部放置在彼此的顶部。公式应为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
这将解决您眼前的问题,但您需要确定文本框的放置位置-此时您要将它们全部放置在彼此的顶部。如果您希望将它们放置在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
如果你想把它们放在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
感谢您对.Formula如何运行的解释,非常有意义:)是的,我知道文本框彼此重叠,我只想一次解决一件事。再次感谢!感谢您对.Formula如何运行的解释,非常有意义:)是的,我知道文本框彼此重叠,我只想一次解决一件事。再次感谢!非常感谢。事实上,我没有指定文本框的显示位置,因为我还需要先做研究:)谢谢!事实上,我没有指定文本框的显示位置,因为我仍然需要首先进行研究:)