I have used tags to do the following:
Pass a value back from a dialog form to the calling form without having to use a global or public variable.
Use the Tag property to hold a code value of the type of data validation I wished the texbox to perform. A for alpha, N for numeric ect... Then call a validation routine passing the code letter which uses a select case to determine the type of keyascii modification to perform.
As to asking questions once...
Load an array with your question and answer string. Have the question and answer delimited with a character like '#'.
This way you can use one array to keep Questions and answers.
It will be just a matter of splitting the string and extracting the question for display.
Load the array from a text file and increment a counter (count) as each question is loaded into the array.
Generate a random number from 0 to count .
Use this random number as an index to extract a question.
Next Shift all records above the currently selected question down one position and decrement the record count by 1
So as you use questions from your stack of questions you are moving the count to a lower position (shrinking the stack of available questions which remain)
To move the data above the selected question down 1 position
just use a FOR/NEXT loop to generate an index value (X) which cycles from the current random number to the last valid index value which is (count-1)
for x = currentRandom to (count-1)
myArray(x) = myArray(x-1)
next
count = count - 1 'decrement the record count