You will not be able to split the values out and create new records during
the transfer. I am not the worlds expert with SQL, but I think it would also
be difficult to do it using SQL. If someone else has an idea, please chime
in. I can, however, offer a solution using Recordset processing and some VBA.
For example purposes, I will assume the spreadsheeet and the destination
Access table have the same record layout and that the fifth field is the
field containing multiple values.
Dim rstXLAs Recordset
Dim rstAC As Recordset
Dim varSplitter As Variant
Dim lngCtr As Long
Dim lngFld as Long
Const conScode As String = "|~*~|"
'Link to the spreadsheet
Docmd.TranferSpreadsheet acLink, , "_Trans", "F:\SomeDir\SomeSheet.xls", _
True
'Establish the Recordsets
Set rstAC = CurrentDb.OpenRecordset("SomeTable", dbOpenDynaset)
Set rstXl = CurrentDb.OpenRecordset("_Trans", dbOpenDynaset)
If rst.Recordcount > 0 Then
rst.MoveLast
rst.MoveFirst
Else
MsgBox "No Records to Process"
rstXl.Close
rstAc.Close
Set rstXl = Nothing
Set rstAc = Nothing
Exit Sub
End If
With rstXl
Do While Not .EOF
'Put the values from the multi value field in an arrray
varSplitter = Split(!MultiField, conScode)
'Create a record for each row in the array
For lngCtr = UBound(varSplitter) to 0 Step -1
.AddNew
For lngFld = 0 to .Fields.Count -1
If lngFld = 4 Then
rstAc.Fields(4) = varSplitter(lngCtr)
Else
rstAc.Fields(lngFld) = .Fields(lngFld)
End If
Next lngFld
.Update
Next lngCtr
Loop
End With 'rstXl
rstXl.Close
rstAc.Close
Set rstXl = Nothing
Set rstAc = Nothing
Be aware this is untested air code and may need some debugging.