Importer en tekstfil med Excel VBA
Med Excel VBA kan man både skrive og importere tekstfiler. Dette eksempel viser, hvordan man kan importere en semikolon-separeret tekstfil til et regneark i Excel. Semikolon bruges til at opdele tekst og tal i regnearkets celler. Linieskift signalerer en ny række.
Det meste af koden har jeg sakset på nettet engang. Det kan sikkert gøres smartere, men dette virker fint for mig. Den styrende procedure er Sub ImportDelimitedText(), mens funktionen ParseDelimitedString og proceduren UpdateCells "læser" teksten og fordeler den i regnearkets celler. Se også hvordan man skriver en tekstfil med VBA.
Sub ImportDelimitedText()
Dim sDel As String * 1
Dim LineString As String
Dim sSourceFile As String
Dim sSepChar As String
Dim sTargetAddress As String
Dim rTargetCell As Range
Dim vTargetValues As Variant
Dim r As Long
Dim fLen As Long
Dim fn As Integer
On Error GoTo ErrorHandle
sSourceFile = "C:\filtest.txt"
sSepChar = ";"
sTargetAddress = "A1"
If Len(Dir(sSourceFile)) = 0 Then Exit Sub
If UCase(sSepChar) = "TAB" Or UCase(sSepChar) = "T" Then
sDel = Chr(9)
Else
sDel = Left(sSepChar, 1)
End If
Worksheets(1).Activate
Set rTargetCell = Range(sTargetAddress).Cells(1, 1)
rTargetCell.CurrentRegion.Clear
On Error GoTo BeforeExit
fn = FreeFile
Open sSourceFile For Input As #fn
On Error GoTo 0
fLen = LOF(fn)
r = 0
While Not EOF(fn)
Line Input #fn, LineString
vTargetValues = ParseDelimitedString(LineString, sSepChar)
UpdateCells rTargetCell.Offset(r, 0), vTargetValues
r = r + 1
Wend
Close #fn
BeforeExit:
Set rTargetCell = Nothing
Exit Sub
ErrorHandle:
MsgBox Err.Description & " Fejl i ImportDelimitedText."
Resume BeforeExit
End Sub
Den følgende funktion "læser" teksten.
Function ParseDelimitedString(InputString As String, _
sDel As String) As Variant
Dim i As Integer, iCount As Integer
Dim sString As String, sChar As String * 1
Dim ResultArray() As Variant
On Error GoTo ErrorHandle
sString = ""
iCount = 0
For i = 1 To Len(InputString)
sChar = Mid$(InputString, i, 1)
If sChar = sDel Then
iCount = iCount + 1
ReDim Preserve ResultArray(1 To iCount)
ResultArray(iCount) = sString
sString = ""
Else
sString = sString & sChar
End If
Next i
iCount = iCount + 1
ReDim Preserve ResultArray(1 To iCount)
ResultArray(iCount) = sString
ParseDelimitedString = ResultArray
Exit Function
ErrorHandle:
MsgBox Err.Description & " Fejl i funktionen ParseDelimitedString."
End Function
Den følgende procedure skriver teksten i regnearkets celler.
Sub UpdateCells(rTargetRange As Range, vTargetValues As Variant)
Dim r As Long, c As Integer
On Error GoTo ErrorHandle
If TypeName(ActiveSheet) <> "Worksheet" Then Exit Sub
r = 1
c = 1
On Error Resume Next
c = UBound(vTargetValues, 1)
r = UBound(vTargetValues, 2)
Range(rTargetRange.Cells(1, 1), rTargetRange.Cells(1, 1). _
Offset(r - 1, c - 1)).Formula = vTargetValues
Exit Sub
ErrorHandle:
MsgBox Err.Description & " Fejl i UpdateCells."
End Sub
Relateret
|