13. august 2001 - 16:20Der er
22 kommentarer og 1 løsning
Importer .txt-fil i Excel 97
Hvordan importere jeg (vha VBA) en txt-fil i et eksisterende Excel-ark?
Jeg kan åbne en txt-fil i et nyt dokument, men jeg vil helst have at den automatisk placere den i et eksisterende ark og beholder de formatteringer, som arket nu har.
Denne side indeholder artikler med forskellige perspektiver på Identity & Access Management i private og offentlige organisationer. Artiklerne behandler aktuelle IAM-emner og leveres af producenter, rådgivere og implementeringspartnere.
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, SepChar) 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
Hvad med at bare at åbne den i ny fil, for så derefter at kopiere den med sine formateringer over i det eksisterende ark. Til sidst lukker du det nye dokument. ??
Function ParseDelimitedString(InputString As String, SC As String) As Variant \' returns a variant array containing each single item in InputString separated by SC 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 Integer If TypeName(ActiveSheet) <> \"Worksheet\" Then Exit Sub r = 1 c = 1 On Error Resume Next c = UBound(TargetValues, 1) r = UBound(TargetValues, 2) Range(TargetRange.Cells(1, 1), TargetRange.Cells(1, 1).Offset(r - 1, c - 1)).Formula = TargetValues On Error GoTo 0 End Sub
hmm, det er en gammel concorde/XAL, så jeg jed ikke lige hvilke muligheder der er. Jeg må prøve at se på det....
Tak for det ellers.
Hvis du kommer på en ide, må du meget gerne vende tilbage.
Forøvrigt: Det kode, som du gav mig lige før; virker det også i Excel 97 eller er det kun 2000? Jeg har ikke selv mulighed for at teste det på \'97 lige nu, så hvis du ved det, såå... :o)
Jeg kigger også tit på concorde tekstudtræk. Prøv denne makro. du vælger hvor teksten skal sættes ind ved at stille dig på en celle i det regneark der indeholder makroen.
Sub tryit() D = \",\" \'sæt delimiter filnavn = Application.GetOpenFilename Workbooks.Open filnavn, , , , 6, , , xlMSDOS, D tekstfilnavn = ActiveWorkbook.Name Selection.CurrentRegion.Select Selection.Copy Windows(ThisWorkbook.Name).Activate ActiveSheet.Paste Application.CutCopyMode = False Workbooks(tekstfilnavn).Close SaveChanges:=False End Sub
Ovenstående makro virker i excel 97. I excel 2000 ville jeg nok vælge [data]/[hent eksterne data]/[tekstfiler]. der kan man også sætte ind hvor man ønsker
Jeg må sige, at din metode er en del mere simpel. Men jeg får alle data i samme kolonne! Jeg har husket at sætte den rigtige delimiter (;). hvordan kan det være?
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.