PNG32 PNG32 PNG32 PNG32
PNG32
Forum Excel, VBA, VSTO, Exceltips, Excelhj�lp PNG32 drivs av Excelspecialisten    Logga in     English
PNG32
PNG32 PNG32
PNG32

Logga in

PNG32

Du är inte inloggad. Logga in eller registrera dig för att skriva inlägg eller svara på inlägg.

För frågor om forumet, kontakta oss på webmaster@excelforum.se

PNG32 PNG32
PNG32 PNG32
PNG32

Excelforum

PNG32

 
ForumForumDiskussionerDiskussionerVBAVBAKombinera makron + hämta från undermapparKombinera makron + hämta från undermappar
Föregående Föregående
 
Nästa Nästa
Nytt inlägg
 2021-04-12 07:58
 

Hej! Jag är ny här och även ny på VBA och makron. Med hjälp av google och lite justeringar så har jag idag ett gäng makron som hämtar viss information från excelfiler i en mapp och samlar det i en viss kolumn i aktuell arbetsbok. Excelfilerna som informationen hämtas ifrån öppnas och stängs med varje makro. Då det handlar om samma filer (över 100 st) som informationen ska hämtas ifrån hade det varit bra om en enda makro kunde hämta all information på en gång när filen ändå är öppen, men jag behöver hjälp med hur jag kan slå ihop det? (jag vill alltså att den ska hämta all information från en fil i taget och stänga den innan den hämtar från nästa)

Dessutom kommer filerna när jag kör skarpt att ligga i undermappar, hur kommer jag åt det utan att köra flera makron?

Aktuell kod (och motsvarande för kolumn B-F); 

Public Sub Copy_Values_From_WorkbooksA()

    Dim folderPath As String

    Dim fileName As String

    Dim destCell As Range, r As Long

    Dim fromWorkbook As Workbook 

    'Folder containing the workbooks

        folderPath = "I:\Tidrapporter\2021\Mars\Tester\"

    If Right(folderPath, 1) <> "\" Then folderPath = folderPath & "\"

        With ThisWorkbook.ActiveSheet

        Set destCell = .Cells(.Rows.Count, "A").End(xlUp)

        If Not IsEmpty(destCell.Value) Then Set destCell = destCell.Offset(1)

    End With

        'Open file names matching *.xlsx

        fileName = Dir(folderPath & "*.xlsx")

    r = 0

    Do While fileName <> vbNullString

        Set fromWorkbook = Workbooks.Open(folderPath & fileName)

        destCell.Offset(r).Resize(1, 1).Value = fromWorkbook.Worksheets("Tidrapport").Range("C2").Value

        r = r + 1

        fromWorkbook.Close savechanges:=False

        DoEvents

               'Get next file name

                fileName = Dir

    Loop

        MsgBox "Finished"

    End Sub

Nytt inlägg
 2021-04-12 09:17
 

 Hej hej

Ditt makro ser återanvändbart ut. Det som behöver brytas ut är själva folderpathen, samt ditt klarmeddeleande. Detta bryter du ut till en ny subrutin, samt ändrar ditt gamla makro till en function så den kan ta emot en eller flera variabler, samt eventuellt returnera något om detta skulle behövas senare. Hur ska du exempelvis hantera fel som uppstår pga att filer du försöker öppna, redan är öppna av en annan användare?

Nedan kod låter dig peka ut flera mappar, som du därefter hanterar med samma metod. Koden dumpar allt i samma arbetsblad, detta går att justera så att varje mapp får sitt eget blad, genom att även skicka med ett arbetsblad. Det går även att loopa igenom en kapp och alla dess undermappar om du har en mappstruktur som tillåter detta. 

Sub EttFintNamnSomDuSjälvFårHittaPå()

         call Copy_Values_From_WorkbooksA("I:\Tidrapporter\2021\Mars\Tester\")

         call Copy_Values_From_WorkbooksA("Ytterliggare en sökväg ")

         call Copy_Values_From_WorkbooksA("Ytterliggare en sökväg ")

         msgbox "klart"

End Sub

Därefter ändrar du i din befintliga, från sub till function, samt att kunna ta emot strängen fp.

Du behöver även ta bort msgbox "finished" i slutet, så du inte behöver klicka i den popupen efter varje genomgången mapp

Public Function Copy_Values_From_WorkbooksA(fp as string)

         byt ut: folderPath = "I:\Tidrapporter\2021\Mars\Tester\"

         mot folderPath = fp

End function

 

Nytt inlägg
 2021-04-12 16:12
 

Tusen tack! 

Med dina förslag plus lite andra justeringar (testade mig fram) så verkar det nu fungera tillfredsställande :D. 

Föregående Föregående
 
Nästa Nästa
ForumForumDiskussionerDiskussionerVBAVBAKombinera makron + hämta från undermapparKombinera makron + hämta från undermappar

PNG32 PNG32
Excelforum drivs av Excelspecialisten som bedriver utbildning i Excel och VBA, tillhandahåller support och hjälp med Excel, utvecklar program i Excel. Är ni i behov av en konsult inom Excel, VBA eller VSTO, eller söker en excelkurs, kontakta oss.
Copyright 2013 ExcelSpecialisten XLS AB   Användarvillkor  Personliga uppgifter