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

我试图找到一个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 = 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如何运行的解释,非常有意义:)是的,我知道文本框彼此重叠,我只想一次解决一件事。再次感谢!非常感谢。事实上,我没有指定文本框的显示位置,因为我还需要先做研究:)谢谢!事实上,我没有指定文本框的显示位置,因为我仍然需要首先进行研究:)