Option Explicit
'Working directory.
Const WorkPath = "Data"
'ADO constants.
Const adOpenForwardOnly = 0
Const adOpenStatic = 3
Const adLockReadOnly = 1
Const adLockOptimistic = 3
Const adCmdText = 1
Dim FSO, NewTS, JetConn, OrigRS, NewRS, F, LastF
Function DeBlank(ByVal TextField)
Dim Blank
TextField = Trim(TextField)
Blank = 1
Do While Blank <> 0
Blank = InStr(Blank, TextField, " ")
If Blank <> 0 Then
Do While Mid(TextField, Blank + 1, 1) = " "
TextField = _
Left(TextField, Blank) _
& Mid(TextField, Blank + 2)
Loop
Blank = Blank + 1
End If
Loop
DeBlank = TextField
End Function
'Create empty new file via FSO.
Set FSO = CreateObject("Scripting.FileSystemObject")
Set NewTS = FSO.CreateTextFile(WorkPath & "\new.csv", True)
NewTS.Close
Set NewTS = Nothing
Set FSO = Nothing
'Connect to Jet.
Set JetConn = CreateObject("ADODB.Connection")
JetConn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" _
& "Extended Properties='Text';" _
& "Data Source='" & WorkPath & "';"
'Open original CSV file.
Set OrigRS = CreateObject("ADODB.Recordset")
OrigRS.Open "SELECT * FROM orig.csv", _
JetConn, _
adOpenForwardOnly, _
adLockReadOnly, _
adCmdText
'Open new CSV file.
Set NewRS = CreateObject("ADODB.Recordset")
NewRS.Open "SELECT * FROM new.csv", _
JetConn, _
adOpenStatic, _
adLockOptimistic, _
adCmdText
'Process data.
LastF = OrigRS.Fields.Count - 1
OrigRS.MoveFirst
Do Until OrigRS.EOF
NewRS.AddNew
For F = 0 To LastF
NewRS(F).Value = Deblank(OrigRS(F).Value)
Next
NewRS.Update
OrigRS.MoveNext
Loop
'Clean up.
NewRS.Close
Set NewRS = Nothing
OrigRS.Close
Set OrigRS = Nothing
JetConn.Close
Set JetConn = Nothing
MsgBox "Done"