Arbejd med mapper i Excel med VBA

I denne artikel vil jeg samle nogle af de mest anvendelige koder, når du skal arbejde med mapper i VBA. 
VBA til Excel er god til at arbejde med mapper. Det vil sige oprette, omdøbe, flytte, kopiere og slette mapper. I denne artikel kan du se nogle eksempler, og hvis du synes nogle mangler skriver du bare en kommentar. Se i øvrigt også denne artikel om at arbejde med filer i VBA.

Indlæs navne på undermapper

I dette lille eksempel vil jeg vise dig hvordan du med VBA i Excel kan indlæses alle navnene på undermapper i en valgt mappe med VBA. Her kan du anvende følgende kode:

Dim mappe As String
mappe = "C:\Users\Bruger\Documents"
Dim fso As Object, folder As Object, subfolder As Object
Set fso = CreateObject("Scripting.FileSystemObject")
Set folder = fso.GetFolder(mappe)
For Each subfolder In folder.subfolders
Cells(i,1).Value = subfolder.Name
i = i + 1
Next

Først defineres der en ny tekststreng der skal indeholde stien til den mappe, hvor undermapperne findes i. Herefter tildeles en værdi til denne tekststreng “mappe”.
Herefter erklæres en række objekter som skal bruges. Først et FileSystemObject der skal bruges hver gang du vil håndtere filer og mapper i VBA. Bemærk at denne kan du ikke bruge i Excel til Mac, da FileSystemObject er en del af Windows Scripting Library og dermed ikke en de af Mac.
Mappen indlæses i dette FileSystemObject og herefter køres der en FOR-NEXT løkke som lister alle undermappers navne i cellerne i kolonne A.

Tæl antallet af undermapper

Denne funktion tæller antallet af undermapper i en mappe.

Dim fso As Object
Set fso = CreateObject("Scripting.FileSystemObject")
Dim folder1 As Object
Dim subfolder As Object
Dim CountSubfolders As Integer
Set folder1 = fso.GetFolder("C:\Users\Bruger\Documents\")
Set subfolders = folder1.subfolders
CountSubfolders = subfolders.count

Kopier en mappe

Sådan kopierer du en mappe fra én lokation til en anden. Koden vil altså kopiere mappen Mappe1 fra mappen Documents til mappen Test.

Dim fso As Object
strFromfolder = "C:\Users\Bruger\Documents\Mappe1\"
strTofolder = "C:\Users\Bruger\Documents\Test\Mappe1\"
Set fso = CreateObject("Scripting.FileSystemObject")
fso.CopyFolder strFromfolder, strTofolder
Set fso = Nothing

Flyt en mappe

Hvis du skal flytte en mappe fra én mappe til en anden, anvender du bare MoveFolder i stedet for CopyFolder.

Dim fso As Object
strFromfolder = "C:\Users\Bruger\Documents\Mappe1\"
strTofolder = "C:\Users\Bruger\Documents\Test\Mappe1\"
Set fso = CreateObject("Scripting.FileSystemObject")
fso.MoveFolder strFromfolder, strTofolder
Set fso = Nothing

Omdøb en mappe

Sådan her kan du omdøbe en mappe:

Dim strNewname As String
Dim strOldname As String
strOldname ="C:\Users\Bruger\Documents\Mappe1"
strNewname ="C:\Users\Bruger\Documents\Mappe2"
Name strOldname As strNewname

Lad brugeren vælge en mappe

Med denne kode kommer der en dialogboks op, hvor brugeren kan vælge en mappe. Det kan du f.eks. bruge, hvis brugeren skal vælge hvilken mappe der skal gemmes i.

Dim fldr As FileDialog
Dim sItem As String
Set fldr = Application.FileDialog(msoFileDialogFolderPicker)
With fldr
.Title = "Vælg en mappe"
.AllowMultiSelect = False
.InitialFileName = "C:\Users\Bruger\Documents\"
If .Show <> -1 Then GoTo NextCode
sItem = .SelectedItems(1)
End With
NextCode:
Set fldr = Nothing

Her vil stien til mappen brugeren har valgt efterfølgende være i den streng der hedder sItem. Bemærk at ved at ændre fldr.AllowMultiSelect til True kan du lade brugeren vælge flere mapper. Og i fldr.InitialFileName kan du vælge hvilken startmappe dialogboksen skal kigge i, når brugeren skal vælge en mappe.
Det var lidt om hvordan du arbejder med mapper i VBA. Hvis du synes noget mangler, så skriv endelig en kommentar.

0 0 votes
Article Rating

Andreas Andersen

Forfatter og grundlægger af IT-blogger.dk, der har blogget om IT-emner siden 2012. Findes på Mastodon på @aphandersen@ansico.dk

You may also like...

Abonner
Giv besked ved
guest

0 Comments
mest stemt på
nyeste ældste
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x