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.