Difficult VBA Query

B

BOBODD

I have several userforms each with several controls in a frame or 2. I have
spin buttons or checkboxes which adjust a value in a textbox & alter a label
(or the checkbox caption) appropriately. My controls are named with this
convention: Spinbuttons are "SpinXXX", e.g "SpinRelease", labels are
"labXXX", checkboxes are "chkXXX" & textboxes are "txtXXX".

I'm using the following code to transfer the info to a worksheet:

Private Sub UpdateSchedule()
Set MyFrame = Me.Frame1
Call FillForm(3, "B16", 0, 2, 0, 0)
End Sub

Public Sub FillForm(MySheet As Integer, MyRange As String, MyRow As Integer,
MyCol As Integer, ColEnd As Integer, NewCol As Integer)
Dim MyName As String
Dim ctrl As Control
Sheets(MySheet).Select
Range(MyRange).Select
For Each ctrl In MyFrame.Controls
If Right(ctrl.Name, 1) = "1" Then
ColEnd = ColEnd - 1
End If
If ctrl <> 0 Then
Call ChkEmpty(MySheet, MyRange, MyRow, MyCol, ColEnd, NewCol)
If TypeOf ctrl Is MSForms.CheckBox Then
MyName = Mid(ctrl.Name, 4)
ActiveCell = MyFrame.Controls("chk" & MyName).Caption
ActiveCell.Offset(0, 1) = MyFrame.Controls("txt" &
MyName).Text
ActiveCell.Offset(MyRow, MyCol).Select
ElseIf TypeOf ctrl Is MSForms.SpinButton Then
MyName = Mid(ctrl.Name, 5)
ActiveCell = MyFrame.Controls("lab" & MyName).Caption
ActiveCell.Offset(0, 1) = MyFrame.Controls("txt" &
MyName).Text
ActiveCell.Offset(MyRow, MyCol).Select
End If
End If
If Right(ctrl.Name, 1) = "1" Then
ColEnd = ColEnd + 1
End If
Next
End Sub

I've since added several more controls to my frame. I want these to be
processed in a certain order, but VBA seems to automatically process them in
a "First in, first out" order so that my new controls are processed last.

My question is this: How do I affect the order that a For Each loop
processes? It doesn't appear to be affested by the tabindex which is the only
likely property I can find.
 
D

Dave Peterson

If you had named your controls like Txt001, Txt002, Spin001, Spin002, ..., you
could loop through that by varying the counter in numeric order.


dim iCtr as long
dim iCtrF as String

for ictr = 1 to 124 '
ictrF = format(ictr, "000")
msgbox me.controls("Txt" & ictrF).Text
'me.controls("SPIN" & ictrf).....
'me.controls("Lab" & ictrf)....
next ictr

But since you used strings, you'll have to find another way...

Dim mySuffixes as Variant
dim iCtr as long

'put these in order and use your suffixes
mySuffixes = array("Release","Review","Assigned","Completed","Rejected")

for ictr = lbound(mysuffixes) to ubound(mysuffixes)
msgbox me.controls("Txt" & mysuffixes(ictr)).Text
'me.controls("Lab" & mysuffixes(ictr)).caption ....
next ictr
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top