VBA Läs textfil (läs, analysera och importera)

Denna handledning visar hur du läser innehåll från textfiler och klistrar in det i kalkylblad med VBA.

Läs textfilinnehåll i kalkylblad

Det enklaste sättet att läsa en textfils innehåll är att kopiera den till ett kalkylbladets cell.

123456789101112 Sub FSOPasteTextFileContent ()Dim FSO som nytt filsystemsystemAnge FSO = CreateObject ("Scripting.FileSystemObject")Ställ in FileToRead = FSO.OpenTextFile ("C: \ Test \ TestFile.txt", ForReading) 'lägg till sökvägen till din textfil härTextString = FileToRead.ReadAllFileToRead.CloseThisWorkbook.Sheets (1) .Range ("A1"). Value = TextString 'du kan ange kalkylbladet och cellen där textfilens innehåll ska klistras inAvsluta Sub

Ovanstående kod använder FileSystemObject. För att kunna använda det måste du ange en referens till VB-skriptets körtidsbibliotek. Se här för mer information.

Utan att använda FileSystemObject kan du klistra in textfilens innehåll med koden nedan. Om din textfil innehåller radavskiljare klistras den in rad för rad.

123456789101112 Sub PasteTextFileContent ()Dim wbExcel As Workbook, wbText As WorkbookDim wsExcel som arbetsbladSet wbExcel = ThisWorkbook 'ange här vilken Excel -fil textfilens innehåll ska klistras in iAnge wsExcel = wbExcel.Sheets (1) 'ange här vilket kalkylblad som ska användasStäll in wbText = Workbooks.Open ("C: \ Test \ TestFile.txt") "lägg till sökvägen till din textfil härwbText.Sheets (1) .Celler.Kopiera wsExcel.CellswbText.Close SaveChanges: = FalsktAvsluta Sub

Läs textfilinnehåll rad för rad, kolumn för kolumn

Din textfil kan ha flera rader och flera element listade i raderna separerade med kommatecken, semikolon, flik, mellanslag osv … För att läsa och klistra in textfilens innehåll korrekt kan du behöva den här koden nedan:

1234567891011121314151617181920212223242526 Sub PasteTextFileContentWithSeparators ()Dim StrLine som strängDim FSO som nytt filsystemsystemDim TSO som objektDim StrLineElements som variantDim Index så längeDim i As LongDim Avgränsare som strängAnge FSO = CreateObject ("Scripting.FileSystemObject")Ange TSO = FSO.OpenTextFile ("C: \ Test \ TestFile.txt")Delimiter = "," 'avgränsaren som används i din textfilIndex = 1Gör medan TSO.AtEndOfStream = FalsktStrLine = TSO.ReadLineStrLineElements = Dela (StrLine, avgränsare)För i = LBound (StrLineElements) Till UBound (StrLineElements)Celler (Index, i + 1) .Value = StrLineElements (i) 'den här koden börjar klistra in textfilens innehåll från det aktiva kalkylbladets A1 (cell (1,1)) cellNästa iIndex = Index + 1SlingaTSO. StängAvsluta Sub

Avgränsaren som används i din textfil kan vara komma (","), komma med mellanslag (","), semikolon (";"), semikolon med mellanslag (";"), mellanslag (""), flik) (ändra sedan Avgränsare = vbTab) eller i sällsynta fall någon annan karaktär.

Läs textfiler i matriser

Om du behöver läsa textfilens innehåll i en matris och klistra in rad för rad, kolumn för kolumn i ditt kalkylblad, behöver du den här koden nedan:

12345678910111213141516171819202122232425262728293031323334 Sub ReadDelimitedTextFileIntoArray ()Dim Avgränsare som strängDim TextFile som heltalDim FilePath som strängDim FileContent som strängDim LineArray () som strängDim DataArray () som strängDim TempArray () som strängDim rw As Long, col As LongDelimiter = vbTab 'avgränsaren som används i din textfilFilePath = "C: \ Test \ TestFileTab.txt"rw = 1TextFile = FreeFileÖppna FilePath för inmatning som textfilFileContent = Inmatning (LOF (TextFile), TextFile)Stäng TextFileLineArray () = Dela (FileContent, vbNewLine) 'ändra vbNewLine till vbCrLf eller vbLf beroende på radavgränsaren som används i din textfilFör x = LBound (LineArray) Till UBound (LineArray)If Len (Trim (LineArray (x))) 0 DåTempArray = Dela (LineArray (x), avgränsare)col = UBound (TempArray)ReDim Preserve DataArray (col, rw)För y = LBound (TempArray) Till UBound (TempArray)DataArray (y, rw) = TempArray (y)Celler (x + 1, y + 1) .Value = DataArray (y, rw) 'den här koden börjar klistra in textfilens innehåll från det aktiva kalkylbladets A1 (cell (1,1)) cellNästa yAvsluta omrw = rw + 1Nästa xAvsluta Sub

Radavgränsare i din textfil kan vara vagnretur och linjefoderkombination (Chr (13)+Chr (10)) eller linefeed (Chr (10)). Använd vbCrLf eller vbLf. Om du inte är säker, använd vbNewLine för att ange linjeseparatorn.

wave wave wave wave wave