VBA: Låt användaren öppna fil
Det är vanligt att man skriver makron som importerar data från andra filer, och kanske framför allt från olika typer av textfiler som t ex csv– och ascii-filer.
När man programmerar i Excel VBA så är det viktigt att man redan från början försöker anpassa koden så att den blir mer dynamisk, dvs. anpassningsbar till nya situationer. Ett exempel på detta är en funktion som låter användaren välja vilken fil som skall öppnas. På det sättet undviker man att de filer som importeras dag efter dag måste ha samma namn.
Körningen av makrot öppnar dialogrutan “Open file” där användaren på sedvanligt sätt väljer vilken fil på datorn/nätverket som skall öppnas.
Exempel som öppnar dialogrutan “Open File”
Nedanstående kod gör precis detta. Dessutom tilldelar vi den öppnade filen ett variabelnamn, vilket möjliggör att senare hoppa mellan flera öppnade filer liksom att kunna automatisera stängningen av vissa filer när importen är klar.
I detta exemplet öppnas filen utan kolumnuppdelning.
Sub OppnaFil() 'deklarera variabler Dim strFil_1 As String Dim strFil_2 As String 'hämtar in vilken fil som skall öppnas strFil_1 = Application.GetOpenFilename On Error GoTo 99 'öppnar filen Workbooks.OpenText Filename:=strFil_1, _ Origin:=xlWindows, StartRow:=1, _ DataType:=xlDelimited, _ TextQualifier:=xlDoubleQuote, _ ConsecutiveDelimiter:=False, _ Tab:=False, Comma:=False, Space:=False, Other:=False, _ FieldInfo:=Array(1, 1) 'tilldelar den öppnade filen ett variabelnamn strFil_1 = ActiveWindow.Caption 99: End Sub |
På det här enkla sättet kan vi öppna en eller flera filer som vi sedan låter makrot importera för vidare behandling.
On Error GoTo 99 betyder att makrot hoppar till 99: om ett fel uppstår. Och det fel det kan handla om är att användaren trycker på “Cancel” i dialogrutan för “Open File”. En snygg detalj som gör att användaren slipper ett mindre snyggt felmeddelande om att VBA-koden har kraschat.
Hoppa mellan flera öppna filer
Om du via makrot har öppnat flera filer så kan du enkelt hoppa mellan dem på följande sätt (under förutsättning att du har tilldelat dem variabelnamn, se exemplet ovan).
'för att hoppa mellan öppna filer
Windows(strFil_1).Activate
|