This bit of code should do it. Check the blue for usage.
Note- It won't recreate OLE data.
Sub CreateTableFromRS(strName As String, rs As Recordset)
Dim intFields As Integer
Dim strSQL As String
Dim strValues As String
Dim tblTable As TableDef
If DCount("*", "msysobjects", "name='" & strName & "'"

> 0 Then CurrentDb.TableDefs.Delete strName
Set tblTable = CurrentDb.CreateTableDef(strName)
strSQL = "insert into " & strName & "("
For intFields = 0 To rs.Fields.Count - 1
If rs.Fields(intFields).Type <> dbLongBinary Then
tblTable.Fields.Append tblTable.CreateField(rs.Fields(intFields).Name, rs.Fields(intFields).Type, rs.Fields(intFields).Size)
strSQL = strSQL & "[" & rs.Fields(intFields).Name & "], "
End If
Next intFields
Mid(strSQL, Len(strSQL) - 1, 1) = "

"
strSQL = strSQL & " select "
CurrentDb.TableDefs.Append tblTable
While rs.EOF = False
strValues = ""
For intFields = 0 To rs.Fields.Count - 1
If rs.Fields(intFields).Type <> dbLongBinary Then
If Nz(Len(rs(intFields)), 0) = 0 Then
strValues = strValues & "null, "
Else
If rs.Fields(intFields).Type = dbDate Or rs.Fields(intFields).Type = dbTime Then
strValues = strValues & "#" & rs(intFields) & "#, "
ElseIf rs.Fields(intFields).Type = dbMemo Or rs.Fields(intFields).Type = dbText Then
strValues = strValues & "'" & rs(intFields) & "', "
Else
strValues = strValues & rs(intFields) & ", "
End If
End If
End If
Next intFields
Mid(strValues, Len(strValues) - 1, 1) = " "
Debug.Print strSQL & strValues
CurrentDb.Execute strSQL & strValues
rs.MoveNext
Wend
End Sub
Sub Example()
Dim r As Recordset
Set r = CurrentDb.OpenRecordset("select * from msysobjects"
CreateTableFromRS "NewTable", r
End Sub