logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Makro otwierające losowe pliki z wybranego folderu

Robertlh1 23 Lis 2022 21:35 552 4
REKLAMA
  • #1 20300062
    Robertlh1
    Poziom 7  
    Posty: 6
    Ocena: 1
    Cześć, może ktoś z Was kojarzy taki temat albo ma gotowe makro.

    Powiedzmy, że mam folder "A" w którym mam 50 plików PDF/xls/xlsm o różnych nazwach.
    Chciałbym wskazać jaką ilość plików z wybranego folderu ma mi otworzyć makro, a następnie ma otworzyć losowo wybraną ilość plików.

    Cel: makro ma byc pomocne w wybieraniu próbki plików do kontroli, w sposób losowy, obiektywny.

    Z góry dziękuję za wszelką pomoc.
  • REKLAMA
  • #2 20300547
    kinggustav
    Poziom 27  
    Posty: 797
    Pomógł: 93
    Ocena: 93
    Otworzysz te np. 10 plików i co dalej? Musisz uważać żeby któregoś przypadkowo nie zamknąć przed skontrolowaniem? Mnie by się to zdarzało.
    Dlatego bym zrobił listę plików do kontroli. Można ją zapisać i używać do woli , nawet przez wielu kontrolerów. A samo otwieranie nie jest problemem, można przecież zrobić hiperłącza.
  • REKLAMA
  • #3 20308056
    Robertlh1
    Poziom 7  
    Posty: 6
    Ocena: 1
    kinggustav napisał:
    Otworzysz te np. 10 plików i co dalej? Musisz uważać żeby któregoś przypadkowo nie zamknąć przed skontrolowaniem? Mnie by się to zdarzało.
    Dlatego bym zrobił listę plików do kontroli. Można ją zapisać i używać do woli , nawet przez wielu kontrolerów. A samo otwieranie nie jest problemem, można przecież zrobić hiperłącza.


    Masz rację, takie rozwiązanie z listą z hiperłączem byłoby najsensowniejsze. Czy Ty lub ktoś z czytających może mi podpowiedzieć z jakich funkcji skorzystać, aby z danego folderu macro skopiowało losowo nazwy wybranej przeze mnie liczby np. 5 plików wraz z hiperłaczem i wkleiło je do nowego pliku utworzonego w tym samym folderze. Ten nowy plik miałby dwie kolumny, l.p. oraz nazwę pliku wraz z hiperłączem.
  • REKLAMA
  • #4 20308185
    ex-or
    Poziom 28  
    Posty: 785
    Pomógł: 147
    Ocena: 151
    Tworzysz obiekt FileSystemObject
    Dim fs as object
    Set fs = CreateObject("Scripting.FileSystemObject")
    Z powyższego pobierasz obiekt folder
    Dim f as object
    Set f = fs.GetFolder(folderspec)
    Z powyższego pobierasz kolekcję plików
    Dim files as object
    set files = f.Files
    Z kolekcji pobierasz ilość pozycji (czyli plikow)
    num = files.count
    funkcją Rnd losujesz kolejne liczby z zakresu 1 do ilosc plikow (przed losowaniem trzeba wykonać posiew bieżącą datą i czasem) i wpisujesz do tablicy.
    Sortujesz tablicę rosnąco.
    W pętli, dla indeksu wylosowanego pobierasz object File, z którego pobierasz scieżki metodą Name i wpisujesz do kolejnych komórek wcześniej utworzonego arkusza
  • #5 20309100
    kinggustav
    Poziom 27  
    Posty: 797
    Pomógł: 93
    Ocena: 93
    Właściwie z tych obiektów potrzebujesz tylko Folder i Plik (do pętli) - to warto zadeklarować. Czyli można od razu zrobić:
    Set F = CreateObject("Scripting.FileSystemObject").GetFolder(folderspec).Files
    i dalej jak powyżej.
    I jeszcze jedno: nie chcesz wykorzystać pliku z makrem? Musisz go mieć (no chyba że użyjesz personal) bo uruchamiasz makro VBA, a to jest pełnoprawny Excel tylko rozszerzenie nazwy ma inne. Po co tworzyć kolejny byt?
    Aha hiperłącza. Tworzy się je tak (parametry są moje, w S jest nazwa pliku, musisz sobie zmienić):
    ActiveSheet.Hyperlinks.Add Anchor:=Cells(9, X), Address:=Pth & S, TextToDisplay:=S
REKLAMA