如何创建循环,例如,。文本框'名称放在Excel的工作表中?

时间:2015-05-30 06:33:58

标签: excel vba excel-vba

我在UserForm和Excel文件中有TextBoxes(不幸的是)。 我可以对UserForm中的那些进行循环,它完美地运行:

Dim txt(1 To 20) As String
txt(3)=("txtCompany")
txt(4)=("txtDataSource")
....
For i = 1 To 20
If frmInfo.Controls(txt(i)).Value <>
Worksheets(SheetNameDataBaze).Cells(ERow, i).Value Then ....

但是,工作表上的控件存在很大问题。 我试过了:

Worksheets(SheetNameDataBaze).Controls(txt(i)).Value
Worksheets(SheetNameDataBaze).TextBox(txt(i)).Value
Worksheets(SheetNameDataBaze).OLEObjects(txt(i)).Value
Worksheets(SheetNameDataBaze).Shapes(txt(i)).Value
Worksheets(SheetNameDataBaze).txt(i).Value
没什么用的。

我该如何定义它? 然后为每个TextBox准备if语句要容易得多。

2 个答案:

答案 0 :(得分:1)

我假设工作表上的文本框是ActiveX控件而不是表单控件。如果是这样,那么这对你有用吗?

Sub ReferToTextboxes()


Dim txt As MSForms.TextBox
Dim o As OLEObject

For Each o In Sheet1.OLEObjects

If o.progID = "Forms.TextBox.1" Then

    Set txt = o.Object

    'now you can refer to txt and do what you need
    Debug.Print txt.Text

    End If

Next o

End Sub

答案 1 :(得分:0)

我终于使用了:

Private Sub FunctionalProgramNew()

Dim bLoop As Double
Dim eLoop As Double
    bLoop = 8
    eLoop = 13

Dim txt(8 To 13) As String
    txt(8) = ("txtFuel_1")
    txt(9) = ("txtFuel_2")
    txt(10) = ("txtFuel_3")
    txt(11) = ("txtProduct_1")
    txt(12) = ("txtProduct_2")
    txt(13) = ("txtProduct_3")

Dim txtBox(8 To 13) As MSForms.TextBox
    For i = bLoop To eLoop
        Set txtBox(i) = Worksheets(SheetNameModel).OLEObjects(txt(i)).Object
    Next i


    For i = bLoop To eLoop
        If txtBox(i).Value <> CStr(Cells(ActiveCell.row, ActiveCell.Column + i - 2).Value) Then
            MsgBox ("Error code: " & txt(i))
        End If
    Next i

End Sub