Hantera textfiler direkt från Excel VBA
Textfiler är enkla dokument som man kan redigera via lika enkla program som t.ex. Notepad i Windows. Ibland kallas dessa dokument för Ascii-filer efter en nordamerikansk teckenuppsättning från 1970-talet.
Sitt enkla format till trots så är dessa filer fortfarande oerhört viktiga i datavärlden. Ofta så använder man textfiler som enkla “databaser” för att lagra enkel information. En enkel variant av databas helt enkelt.
Ett annat mycket viktigt område för textfiler är de tillämpningar som kan uppnås om filerna skrivs i så kallat CSV-format. CSV är en förkortning för Comma Separated Values, ett system för att simulera kolumnuppdelning fastän sådan ju inte finns i en vanlig textfil. Men genom att man inkluderar ett speciellt tecken (ibland ett komma men det finns andra bättre varianter) så markerar man var en ny kolumn börjar.
Tänk på att textfiler inte per definition behöver ha filändelsen .txt utan i princip vilket suffix som helst. Det är alltså innehållet som räknas. Kom ihåg att det inte är filändelsen som styr om du kan koppla upp dig mot en fil eller ej.
Hur som helst, CSV-filer är en specialvariant av en vanlig textfil som har en mängd smarta tillämpningar i Excel vilket jag kommer att skriva om i senare artiklar. Men till en början så beskrivs nedan hur du kan koppla upp ditt Excelprogram mot vilken textfil som helst via VBA-kod.
Längst ned på sidan så beskrivs med hjälp av två exempel hur hur man kan skriva resp. läsa in data från en textfil via Excel VBA.
OPEN – öppna textfiler från Excel VBA
Via kommandot OPEN kan vi erhålla åtkomst till textfiler direkt från Excel. Det är denna koppling som senare kommer att ge oss möjligheterna att läsa och skriva till denna fil.
OPEN-kommandot erbjuder tre grundmöjligheter, nämligen Output, Append samt Input. Exempel på dessa tre varianter visas nedan.
OUTPUT
Denna variant öppnar en indikerad fil (eller skapar den om den inte redan finns). I det fallet som filen redan finns så kommer allt eventuellt tidigare innehåll att raderas. Effekten är alltså att en koppling till en tom fil skapas.
strTextFil = "C:mintextfil.txt" f = FreeFile Open strTextFil For Output As #f |
APPEND
Via Append så öppnar vi en indikerad fil alternativt skapar den om den inte redan finns. Till skillnad från OUTPUT så ger APPEND att eventuellt tidigare innehåll i textfilen inte raderas vid öppnandet utan man fortsätter att skriva på den sist använda raden i filen.
strTextFil = "C:mintextfil.txt" f = FreeFile Open strTextFil For Append As #f |
INPUT
Via Input-kommandot så öppnar vi en kanal till filen som gör att vi kan läsa den och ingenting annat. Dvs att Input skall användas när vi skall importera innehåll i en textfil till Excel.
strTextFil = "C:mintextfil.txt" f = FreeFile Open strTextFil For Input As #f |
Angående instruktionen ’#f’
För att kunna arbeta med dessa kommandon/filer så måste filerna tilldelas namn enligt ett nummersystem. Men genom att vi använder oss av tillägget #f (som betyder FREEFILE) så behöver vi inte bry oss om detta.
PRINT – skriva till en textfil via Excel VBA
Kommandot PRINT skriver “rätt upp och ned” i textfilen. Man tar inga hänsyn till kolumnuppdelningar. I exemplet nedan så skrivs texten “Dagens datum:” ut följt av aktuellt systems datumgivning.
Print #f, "Dagens datum: " & Date |
WRITE – skriva till en textfil via VBA och inkludera kolumnuppdelningar
Denna variant av att skicka text till en textfil är riktigt användbar på det sättet att den medger att vi stoppar in ett speciellt tecken där vi vill att en kolumnuppdelning skall markeras. Dvs att vi skapar en CSV-fil.
Write #f, "Dagens datum: " & Date ; Application.UserName |
I exemplet ovan så skrivs dagens datum ut liksom aktuell Excelinstallations användarnamn. Men där finns ytterligare en finnes inbyggt i detta, nämligen ett semikolon som underlättar framtida kolumnuppdelning.
Exempel 1 : Skriva till en fil via OUTPUT
Sub Skapa_Och_Skriva_Till_Textfil() Dim strFilnamn as String Dim strSokVag as String Dim strTextfil As String Dim f As Integer 'namn och sökväg till textfilen strSokVag = "C:" strFilnamn = "min_textfil.txt" strTextfil = strSokVag & strFilnamn 'vi öppnar textfilen för att kunna skriva till den f = FreeFile Open strTextfil For Output As #f 'vi skriver till filen Print #f, "Dagens datum: " & Date Print #f, "Användare: " ; Application.UserName 'slutligen så stänger vi uppkopplingen till textfilen Close f End Sub |
I exemplet ovan så används Output istället för Append. Hade vi använt Append så hade eventuellt tidigare innehåll i textfilen sparats och vi hade börjat skriva på nästa tomma rad i filen.
Exempel 2: Läsa in data från en textfil till Excel via INPUT
Nu skall vi också titta på hur man kan importera data från en Ascii-fil till ditt kalkylblad i Excel. Metoden är lik den som vi använt i ovanstående exempel, fast nu tillämpar vi kommandot Input.
Sub Lasa_In_Asciifil_Till_Excel Dim strFilnamn as String Dim strSokVag as String Dim strTextfil As String Dim strText As String Dim f as Integer Dim i As Integer 'namn och sökväg till textfilen strSokVag = "C:" strFilnamn = "min_textfil.txt" strTextfil = strSokVag & strFilnamn 'vi öppnar textfilen för att kunna läsa från den f = FreeFile Open strTextfil For Input As #f 'vi läser in textfilsdatan till en kolumn i Excels kalkylblad i = 1 While Not EOF(f) Line Input #f, strText Cells(i, 1) = strText i = i + 1 Wend 'importen är klar och vi stänger ned kopplingen till textfilen Close f End Sub |
Slutsats
Med hjälp av ovanstående enkla programmering i Excel VBA kan du alltså koppla upp dig mot vilken textfil som helst och antingen exportera Exceldata till filen eller läsa in uppgifter från den.
Det kan även tilläggas att möjlighet finns att koppla upp sig även mot textfiler som ligger utanför din egen dator, dvs på nätverket eller på annat sätt åtkomlig via internet.