|
||||
Disse websidene oppdateres ikke lengre og er kun tilgjengelig for historikken sin skyld.Klikk her for å gå til den oppdaterte informasjonen. Importerer data fra en tegn-separert tekstfilDenne makroen importerer data til et regnearkområde fra en tegn-separert tekstfil med valgfritt skilletegn (CSV/SDV-format): Sub ImportRangeFromDelimitedText(SourceFile As String, SepChar As String, _
TargetWB As String, TargetWS As String, TargetAddress As String)
' Imports the data separated by SepChar in SourceFile to
' Workbooks(TargetWB).Worksheets(TargetWS).Range(TargetAddress)
' Replaces existing data in Workbooks(TargetWB).Worksheets(TargetWS)
' without prompting for confirmation
' Example: ImportRangeFromDelimitedText _
"C:\FolderName\DelimitedText.txt", ";", _
ThisWorkbook.Name, "ImportSheet", "A3"
Dim SC As String * 1, TargetCell As Range, TargetValues As Variant
Dim r As Long, fLen As Long
Dim fn As Integer, LineString As String
' validate the input data if necessary
If Dir(SourceFile) = "" Then Exit Sub
' SourceFile doesn't exist
If UCase(SepChar) = "TAB" Or UCase(SepChar) = "T" Then
SC = Chr(9)
Else
SC = Left(SepChar, 1)
End If
' perform import
Workbooks(TargetWB).Activate
Worksheets(TargetWS).Activate
Set TargetCell = Range(TargetAddress).Cells(1, 1)
On Error GoTo NotAbleToImport
fn = FreeFile
Open SourceFile For Input As #fn
On Error GoTo 0
fLen = LOF(fn)
r = 0
While Not EOF(fn)
Line Input #fn, LineString
If r Mod 100 = 0 Then
Application.StatusBar = "Reading data from " & _
SourceFile & " " & _
Format(Seek(fn) / fLen, "0 %") & "..."
End If
TargetValues = ParseDelimitedString(LineString, SC) ' Excel 97 eller eldre
'TargetValues = Split(LineString, SC, -1, vbBinaryCompare) ' Excel 2000 eller nyere
UpdateCells TargetCell.Offset(r, 0), TargetValues
r = r + 1
Wend
Close #fn
Application.Calculation = xlCalculationAutomatic
NotAbleToImport:
' clean up
Set TargetCell = Nothing
Application.StatusBar = False
End Sub
Function ParseDelimitedString(InputString As String, SC As String) As Variant
' returnerer en matrisevariabel med alle elementene i InputString adskilt med SC
' bruk den innebygde Split-funksjonen i Excel 2000 eller nyere
Dim i As Integer, tString As String, tChar As String * 1, sCount As Integer
Dim ResultArray() As Variant
tString = ""
sCount = 0
For i = 1 To Len(InputString)
tChar = Mid$(InputString, i, 1)
If tChar = SC Then
sCount = sCount + 1
ReDim Preserve ResultArray(1 To sCount)
ResultArray(sCount) = tString
tString = ""
Else
tString = tString & tChar
End If
Next i
sCount = sCount + 1
ReDim Preserve ResultArray(1 To sCount)
ResultArray(sCount) = tString
ParseDelimitedString = ResultArray
End Function
Sub UpdateCells(TargetRange As Range, TargetValues As Variant)
' Writes the content of the variable TargetValues to
' the active worksheet range starting at TargetRange
' Replaces existing data in TargetRange without prompting for confirmation
Dim r As Long, c As Long, i As Long
If TypeName(ActiveSheet) <> "Worksheet" Then Exit Sub
r = 1
c = 1
On Error Resume Next
c = UBound(TargetValues, 2) - LBound(TargetValues, 2) + 1
r = UBound(TargetValues, 1) - LBound(TargetValues, 1) + 1
Range(TargetRange.Cells(1, 1), _
TargetRange.Cells(1, 1).Offset(r - 1, c - 1)).Formula = TargetValues
On Error GoTo 0
End Sub
Dokumentet er sist oppdatert 2006-08-28 16:00:21
|
||||
| ||||