Caption is part of the field's property collection. When looping through the fields, you'd use something like:
MyCaption = fld.properties("Caption"

Debug.print MyCaption
The problem that arises is, when there is no specified caption, it generates a 3270 error. Here's some code you can experiment with. From the debug window, call it using ? GetCaptions("MyTable"
Function GetCaptions(tName as string)
Dim db As Database, td As TableDef
Dim FieldName As String, fld As Field
Dim FieldCaption As String
Set db = CurrentDb
Set td = db.TableDefs(tName)
For Each fld In td.Fields
FieldName = fld.Name
On Error Resume Next
FieldCaption = fld.Properties("Caption"

If Err = 3270 Or FieldCaption = " " Then '3270 = object not found
FieldCaption = "No caption provided."
End If
Debug.Print FieldName & ": " & FieldCaption
Next fld
Set td = Nothing
Set db = Nothing
End Sub