It's not immediately obvious from the code what role the .Tag plays in this but the code suggests that it either contains the ordinal of the field that is to be displayed in the drop down box and the value that is to be displayed for (All), perhaps to allow customisation by country separated by a semi-colon, e.g., 1;(Alles). It might be better to use the name of the field and alter the field selection code to something like rst.Fields(strFieldName).Value.
The idiom of splitting something up depending on a character position in this way is so common I have defined two functions to help:
Public Function LeftPart(ofString As String, upToFirstOccurrenceOf As String) As String
'
'Give the left hand 'part' ofString, from the leftmost character upToFirstOccurrence (a character or
' string, e.g., LeftPart("HENSHAW, Fred:SO13/05",":") = "HENSHAW, Fred". If there is no occurrence
' of the delimiter character then return the entire string (including the empty string case)
'
LeftPart = Left(ofString, InStr(ofString & upToFirstOccurrenceOf, upToFirstOccurrenceOf) - 1)
End Function
and
Public Function RightPart(ofString As String, fromFirstOccurrenceOf As String) As String
'
'Give the right hand 'part' ofString, from the leftmost character fromFirstOccurrence (a character or
' string, e.g., RightPart("HENSHAW, Fred:SO13/05",":") = "SO13/05". If there is no occurrence
' of the delimiter character then return a null string (including the empty string case)
'
RightPart = Mid(ofString, InStr(ofString & fromFirstOccurrenceOf, fromFirstOccurrenceOf) + Len(fromFirstOccurrenceOf))
End Function