Avatar billede M_M Mester
13. september 2018 - 22:56 Der er 7 kommentarer og
1 løsning

Loop gennem drop-down liste og gemme hver valgmulighed som ny Excel-fil

Hej. Jeg har googlet rundt og prøvet at kopiere og tilrette diverse kode fra nettet - men uanset hvad jeg prøvede kan jeg ikke løse denne opgave - som jeg ville have troet var enkel. Så derfor håber jeg på hjælp.

Casen:
Se gerne fil på: https://www.dropbox.com/s/4sa9cyikw1dbdyz/Eksempel%20-%20makro1.xlsx?dl=0

I filens første fane ("OversigtX") i celle D5 er der en drop-down liste (pt kun med 3 muligheder - men normalt med 50-100). Det jeg ønsker er at gemme én fil (.xlsx) pr. valgmulighed for alle valgmuligheder i drop-down listen (dvs. loop), med følgende specs overholdt:

a) Kun 1. fane (OversigtX) skal gemmes

b) Formatet skal være som værdier, men med beholdt formatering.

Her mener jeg at have løsningen med:
    Worksheets("OversigtX").Copy
    With ActiveSheet.UsedRange
        .Value = .Value
    End With

c) Jeg vil gerne have en prompt/messagebox, hvor jeg kan pege på den mappe som filerne skal gemmes i. Her mener jeg at være nær løsningen med...
Dim oDialog As FileDialog
Dim sDPath as String
Set oDialog = Application.FileDialog(msoFileDialogFolderPicker)
With oDialog
.Title = "Vælg sti"
.InitialFileName = "C:\"
.AllowMultiSelect = False
If.Show<>1-1 Then Exit Sub
sDPath = SelectedItems(1)
Test (sDPath)

d) Filnavn skal være samme som den valgte mulighed i drop-downlisten (celle D5) samt dato, sidstnævnte i formatet Format(Now, "dd-mm-yyyy")

e) Når filen er gemt skal den lukkes (så jeg ikke ender med 50-100 åbne filer)

f) Den oprindelige fil skal forblive åben efter makroen er færdig med at loope gennem og gemme hver valgmulighed.

På forhånd tak:-)
Avatar billede M_M Mester
13. september 2018 - 23:22 #1
Avatar billede kim1a Ekspert
14. september 2018 - 09:03 #2
Lidt inspiration:
Vippe igennem dropdown:
https://www.ozgrid.com/forum/forum/help-forums/excel-general/140567-loop-through-excel-drop-down-list-run-macro-and-save-the-file-into-a-folder

Filnavn:
Format(Application.WorksheetFunction.Today(Now), "DD-MM-YYYY")

Lukke den gemte fil:
Application.ActiveWorkbook.Close False

Jeg gør det normalt lidt anderledes end dig, idet jeg har valgt bibliotek der skal gemmes i (typisk samme sted som oprindelig/makrofilen), noget a la dette:

strPath = Application.ActiveWorkbook.Path
strTime = Format(Application.WorksheetFunction.EoMonth(Now, -1), "MM-YYYY")

Application.DisplayAlerts = False
Application.ActiveWorkbook.SaveAs Filename:=strPath & "\" & strTime & "Revenuesplit " & ".xlsb"
MsgBox ("Bilag er nu skabt og gemt i samme mappe som Kundesplitfilen - du mangler kun at bogføre")
Application.DisplayAlerts = True
Application.ActiveWorkbook.Close False
Avatar billede M_M Mester
15. september 2018 - 11:21 #3
Tak for respons og link.
Jeg er kommet en del tættere på, bl.a. lavet en fin løsning til valg af mappe, hvor filerne skal gemmes. Mit store problem er, at jeg stadig ikke kan få loop til at fungere - simpelthen fordi jeg på trods af heftig googlen ikke kan forstå syntaksen omkring inputRange, og derfor har prøvet alt jeg kunne forstille mig uden succes.

I arket "Opslag" har jeg et named range benævnt "Butiksvalg_Dropdown_Range" som er dropdown-valgmulighederne.
I arket "OversigtX" har jeg et named range benævnt "Butiksvalg_Dropdown_Celle" som er selv dropdown-vælgeren (på baggrund af ovenstående valgmuligheder).

På baggrund heraf har jeg sidst lavet følgende - men uanset hvad jeg prøver får jeg fejl I linjen omkring inputrange, ofte den sædvanlige 1004:

    Dim dvCell As Range
    Dim inputRange As Range
    'Definer celler med datavalidering
    Set dvCell = Worksheets("OversigtX").Range("Butiksvalg_Dropdown_Celle")
    'Definer hvor datavalideringen kommer fra
    Set inputRange = Evaluate(dvCell.Worksheet("Opslag").Range("Butiksvalg_Dropdown_Range").Validation.Formula1)

Min fil er her: https://www.dropbox.com/s/3kjojqbdhd1g6jm/Eksempel%20-%20Makro2.xlsm?dl=0

Tak:-)
Avatar billede kim1a Ekspert
15. september 2018 - 12:36 #4
Du var der næsten. DU mangler lige at skifte værdien i dvcellen:

'Start loop
    Application.ScreenUpdating = False
   
    For Each c In inputRange
    dvCell = c.Value <--- denne linje er vigtig.
        'Makroen, der skal udføres for hver loop
Avatar billede M_M Mester
15. september 2018 - 20:39 #5
Tak - det har jeg nu prøvet. Fejl 1004 er nu væk, men bliver erstattet af en fejl 438 på samme linje:
Set inputRange = Evaluate(dvCell.Worksheet("Opslag").Range("Butiksvalg_Dropdown_Range").Validation.Formula1)

Og jeg HAR triple-tjekket, at det anvendte navn på ark  og named range er korrekt:-) Så der må være en fejl i min måde at angive arket ? Tak for hjælpen:-)
Avatar billede kim1a Ekspert
16. september 2018 - 09:01 #6
Du skal ikke fylde alt det der ind. Den linje skal forblive hvad den var i eksemplet:
Evaluate(dvCell.Validation.Formula1)
dvCell har du netop angivet til alt det andet.
Avatar billede M_M Mester
17. september 2018 - 18:00 #7
Super, nu kører det. Tak for hjælpen:-)👍
Avatar billede kim1a Ekspert
17. september 2018 - 18:14 #8
Du lavede selv det meste af arbejdet. Vi kan godt lide at komme med forslag og så ellers se spørger selv finde frem til det hele :-)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester