Denna handledning visar hur du läser innehåll från textfiler rad för rad med VBA.
Vi kan antingen läsa textfilen som en hel fil eller rad för rad.
Läs textfil rad för rad
Text i en textfil består vanligtvis av flera rader, åtskilda med avgränsare. Dessa kan vara ett komma (","), ett komma med mellanslag (","), ett semikolon (";"), ett semikolon med mellanslag (";"), ett mellanslag (""), en flik (vbTab ) eller i sällsynta fall någon annan karaktär som en tilde (~). Linjerna separeras normalt med en radbrytning (vbCRLF).
Det enklaste sättet att läsa en textfil rad för rad i vårt kalkylblad i VBA är att markera den första cellen där vi vill att texten ska placeras och sedan köra följande kod:
1234567891011 | Sub ReadFile ()Dim strFile As String, strLine As StringstrFile = "C: \ Test \ TestFile.txt"Öppna strFile för inmatning som #1Gör tills EOF (1)Linjeingång #1, strLineActiveCell = strLineActiveCell.Offset (1, 0) .VäljSlingaStäng #1Avsluta Sub |
Detta kommer att placera varje rad i textfilen i en enda cell i Excel.
Vi kan också läsa en textfil i VBA med hjälp av FileSystemObject. I koden nedan har vi använt sen bindning med filsystemobjektet. Du kan också skapa en referens till den i ditt VBA -projekt. Se här för mer information.
123456789101112131415 | Sub ReadTextFile ()Dim strLine som strängDim FSO som objektDim TSO som objektAnge FSO = CreateObject ("Scripting.FileSystemObject")Ange TSO = FSO.OpenTextFile ("C: \ Test \ TestFile.txt")Do While Not TSO.AtEndOfStreamstrLine = TSO.ReadLineActiveCell = strLineActiveCell.Offset (1, 0) .VäljSlingaTSO. StängAnge TSO = ingentingAnge FSO = ingentingAvsluta Sub |
Vi kan skapa en lite mer komplicerad slinga om vi vill separera linjerna i celler av deras avgränsare. Här har vi använt tidig bindning i koden och deklarerat filsystemobjektet.
123456789101112131415161718192021222324 | Sub ReadTextFileWithSeparators ()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")Avgränsare = ","Index = 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)Nästa iIndex = Index + 1SlingaTSO. StängAnge TSO = ingentingAnge FSO = ingentingAvsluta Sub |
Detta leder till att raderna separeras i enskilda celler i Excel enligt grafiken nedan.