为列中的每一行创建TextBox

时间:2017-04-30 08:42:20

标签: excel vba excel-vba

我正在尝试查找一个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只能引用静态单元格。

我真的很感激如何使这种循环正确的提示。

2 个答案:

答案 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