TabIndex has nothing to do with it, BUT....you can use the TabIndex to make a new array and get your message in the user tab order. That is, in the order the user will tab through the userform. Which, I believe, is what you want to happen Cheryl. I am tempted to just give textual descriptions and hints...but, nah.....

Sample (simple) demo file attached. Fire the userform with the "Show My Form" icon on the top toolbar.

Enter something in some of the textboxes. Click "Check It". The userform expands to display three messages in Labels.

The first lists any empty control by control index. This is the order For Each ctl In Me.Controls produces.

The second is the list of empty controls sorted by TabIndex (the order the user moves through the userform). This uses a version of the BubbleSort procedure xld posted in the knowledge base.

The third message is the list of empty controls by name, also in the TabIndex (user movement) order.

If you look in the code, it requires a HARD coding of all the controls you may wish to name. It only needs names of the controls the user actually uses. Labels and command buttons are not required, as they are ignored by the checking logic anyway.

So while true, the original error checking (to get the controls that are empty) has nothing to do with TabIndex, TabIndex values ARE used to determine how the control names are displayed.

There are other possible routes to take to achieve this.

I will repeat something I mentioned earlier. Solid error trapping is BY FAR the hardest work in coding an application. Hopefully you all will be a bit more patient when you come across screwy things in major applications (like Word for example). Catching stuff is HARD.

I will repeat another mention. I did a VBA app that took 500 lines of code to make the whole thing "work"....and 3,000 lines of code to error trap it as tight as possible. Most apps do not require that level of accuracy. This one did. I would not like to repeat the experience. The coding parts was not that difficult, but the THINKING part was a major headache.

If you look at the code in the file attached, it is not very difficult at all. And I freely admit it can likely be made tighter and better. I just put it together this evening as a demo for you whiners. Just kidding Cheryl. I know it is hard. Believe me, I know.

Hope this helps. It is as far as I am going to go with this. It of course can be expanded to cover ANY control on your userform. You just have to think about it.

I would strongly recommend you do NOT, repeat NOT, do a copy and paste of the code. Write your own. Copy and paste if you must, but go through each line, line by line and make it yours.

Oh, BTW....just so you know I can be an idiot - although I suppose that is already quite apparent - here is a laugh.

I had finished this demo, placed the controls, juggled them around so they would deliberately NOT match user Tab movement to control index. Wrote the code for the userform, wriggled xld's BubbleSort (his uses Option Base 1, and that just screws me up), changed some variables (I needed an number sort, not a string sort).

I decided that I wanted to change the textbox names. I had them as "TabMeOne", "TabMeTwo" etc, to show the user movement order. Then thought, what the heck...why not use real world names like FirstName, LastName etc.

So I blithely change the control name to First Name, and quickly went on to the next control.

Note that: First Name.

Control names can NOT have spaces.

The VBE gave an error message. Invalid name.

BUT.....I had clicked so fast to the next control that the control giving the error was no longer the active control. Totally froze. The error message on screen with a lovely cursor like a Do Not Enter (a circle with a line through it). Frozen shut. The VBE was displaying a message from a control it no longer had access to.

Enter did nothing. Clicking OK on the error message did nothing. Completely frozen. I tried everything. I could NOT get back in. I had to kill Word with Task Manager.

I....ummmmm, had not saved anything. I lost EVERYTHING. I had to restart Word and begin right from the beginning with a new document. Make a new userform, write all the code again from scratch. No copy and paste. From scratch, including placing the textboxes, the commandbuttons etc.

Idiot.

My point (besides the usual SAVE IT warning) is that I timed myself. From zero, zip, nada, to the attached file.....21 minutes.

This is not a show off thing. It is - again - a statement that coding is the minor part of things. I had the logic fully worked out. I knew EXACTLY, precisely, how it was to work, and how it was supposed to flow. I did not have to think about it the second time, because I already knew what was supposed to be there.

Although, again, because this is VBA, there are very likely better ways of doing this. I can think of an alternative myself.

Cheryl, and SOS, I really hope this helps you get moving along regarding this. It is likely not a full solution for your precise userform, but the principle should be (I hope!!!) adequately demonstrated.

I'm tired.