You asked for the difference between "For Each x" vs. "For counter = start To ..."
Office VBA reference topic
docs.microsoft.com
Office VBA reference topic
docs.microsoft.com
The "For Each x in x-group" construct steps through the elements in the group, which must have some uniformity of data type. The X that follows the word "Each" can be a variant or it can be the data type that is common to the members of the group, including the possibility of it being an object. Case in point for a group of objects would be "For Each
TableDef-object In AllTables..." or "For Each
FieldDef-object in MyTable.Fields" for two examples. You would of course supply variables of the appropriate type for the Each object. Groups have indexes (or for arrays, subscripts). The "For Each" construct determines the highest and lowest indexes in the group and steps automatically from lowest to highest with no gaps
The "FOR counter = start TO stop STEP stepsize" construct just counts out numbers in the sequence specified. You can use the "counter" variable as an index or a subscript as appropriate to whatever you are examining, but in fact it would be possible to use it both ways in the same loop if you had both an array AND a collection ... or you might use it in neither of those ways, if all you wanted was to generate a sequence of numbers.
Therefore, the biggest difference in the "For Each" syntax is that it is bound to a collection, whereas the "For counter=start TO stop..." syntax is not necessarily bound to anything at all - except the counter variable.