I used this recently and it works fine for me.
Sub AlterFieldType(TblName As String, FieldName As String, NewDataType As String)
'The AlterFieldType sub procedure requires three string parameters. The first
'string specifies the name of the table containing the field to be changed. The
'second string specifies the name of the field to be changed. The third string
'specifies the new data type for the field
Dim db As Database
Dim qdf As QueryDef
Set db = DBEngine.OpenDatabase("C:\NComm\NSubscriber_be.mdb"
'create querydef object
Set qdf = db.CreateQueryDef("", "SELECT * FROM [Batch Entry Pot]"
'add a temporary field to the table
qdf.SQL = "ALTER TABLE [" & TblName & "] ADD COLUMN AlterTempField " & NewDataType
qdf.Execute
'copy the data from old field into the new field
qdf.SQL = "UPDATE DISTINCTROW [" & TblName & "] SET AlterTempField = [" & FieldName & "]"
qdf.Execute
'delete the old field
qdf.SQL = "ALTER TABLE [" & TblName & "] DROP COLUMN [" & FieldName & "]"
qdf.Execute
'rename the temporary field to the old field's name
db.TableDefs("[" & TblName & "]"

.Fields("AlterTempField"

.Name = FieldName
End Sub
then in run following where appropriate
'*****************************************************************
'**Change field properties in existing database table** '*****************************************************************
'set SubscriberName field to txt(20) Batch Entry Pot
'call sub
AlterFieldType "Batch Entry Pot", "SubscriberName", "TEXT(20)"