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

我有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 

没有工作。

我应该如何定义它? 然后准备每个文本框的if语句会容易得多。

我假设您的工作表上的文本框是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 

我终于用了:

 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