• Privacywetgeving
    Het is bij Helpmij.nl niet toegestaan om persoonsgegevens in een voorbeeld te plaatsen. Alle voorbeelden die persoonsgegevens bevatten zullen zonder opgaaf van reden verwijderd worden. In de vraag zal specifiek vermeld moeten worden dat het om fictieve namen gaat.

Mappenstructuur maken van OneDrive in Excel

Status
Niet open voor verdere reacties.

Buysal

Gebruiker
Lid geworden
24 aug 2020
Berichten
21
Hoi,

ik ben bezig met het maken van mappenstructuur op een Excel blad. Wij maken gebruik van OneDrive voor onze documenten. De mappenstructuur op onze C schijf is best heel lang. Totdat ik naar een gewenste document kom, moet ik soms 10 keer of meer doorklikken. Het handmatig bouwen van een mappenstructuur duurt heel lang en wellicht moet deze dan ook vaker bijgewerkt worden. Daarom wil ik de mappenstructuur automatiseren, dus linken naar een Excel Sheet. Ik wil de hoofd en de submappen wel op de sheet zetten maar niet linken naar de map, maar ik wil wel de losse Excel, PDF, Word, Foto bestanden op de Excel Sheet zetten met een geautomatiseerde link (niet handmatig met toevoegen link.

1e vraag is; kunnen de bestanden van OneDrive (schijf voor gezamenlijk gebruik) gelinkt worden via een macro opdracht? Zo ja, hoe doe ik dat? en andere vraag is kan ik alleen de losse bestanden vanuit OneDrive linken met een macro in Excel? Zo ja, hoe?


Alvast bedankt,

Groetjes!
 

Bijlagen

  • Voorbeeld mappenstructuur.xlsx
    11,1 KB · Weergaven: 96
Geen idee, maar probeer dit eens:

Code:
Sub M_snb()
   c00 = "//client/C$/OneDriveHoofdmap/"
   
   MsgBox CreateObject("wscript.shell").exec("cmd /c dir " & c00 & "*.* /b/s").stdout.readall
End Sub
 
Bedankt snb,

Maar ik krijg hem niet aan het praat :(

groetjes!
 
Vervang de slashes eens door backslashes.
 
Afgezien van de vraag betreffende een macro en Excel, begrijp ik niet dat je 10 keer moet doorklikken om naar het gewenste document te gaan. Met een zoekmachine zoek je bestanden toch binnen 1 seconde?
 
De mappenstructuur op onze C schijf is best heel lang.

Begrijp ik het dan niet goed? Praten we hier niet over dezelfde mappenstructuur als in Windows Verkenner? Dan kun je met de zoekmachine Everything van Voidtools heel snel mappen en bestanden opzoeken.
 
Laatst bewerkt:
Best snb,

ik heb de slashes vervangen door backslashes. Ik krijg een zwarte venstserte zien met C:\\Windows\System32\cmd.exe links bovenop.

Ik denk dat het opgeef, het werkt niet :(

toch bedankt voor je hulp.
 
Hij voert de opdracht dan niet uit. cmd opent maar dir *.* /b/s wordt niet uitgevoerd. Overigens met Everything kun je de gevonden data exporteren/importeren naar Excel. Maar goed, ik krijg geen antwoord op de vraag of het hier gaat om een normale bestandsstructuur ook in OneDrive.
Succes dan verder.
 
Code:
Sub M_snb()
   'c00 = "//client/C$/OneDriveHoofdmap/"
   c00 = "c:\"
   t = Timer
   c01 = Split(CreateObject("wscript.shell").exec("cmd /c dir " & c00 & " /a:d/b/s").stdout.readall, vbCr)
   Range("A1").Resize(UBound(c01) + 1).Value = Application.Transpose(c01)
   MsgBox Timer - t
End Sub
lichte variant op die macro van SNB, die kijkt nu wel naar de C: en enkel naar de (sub)directories.
Bij het wegschrijven (door die transpose) gaat het ook maar goed tot +12.000.

@Senso, die opdracht wordt wel degelijk uitgevoerd, kan je toch zelf testen, desnoods via je prompt.
Als ik de opdracht van SNB op mijn C: en enkel voor de directories, dus nog niet voor de files, uitvoer dan is die voor dik 6 minuten vertrokken, zonder dat je iets ziet gebeuren op het scherm.
Ik kan me voorstellen dat voor een drive op afstand zoals OneDrive, 1 en ander nog langzamer werkt.
Dus een beetje een voorbarige conclusie van je kant.

Nog een misschien, eens je de boel aan de praat hebt, dan kan je dir eventueel vervangen door tree als ik zo de opgave lees
 
Laatst bewerkt:
Dit is een fijn klusje voor Power Query. Pas in werkblad Setup de locatie aan, rechts-klik in de Bestanden tabel en kies Vernieuwen/Refresh.
Je kunt de voortgang volgen op taskpane Queries en Connections (in tab Gegevens/Data).
 

Bijlagen

  • Bestanden.xlsx
    20,8 KB · Weergaven: 49
Beste Senso,

De code werkt nu wel, ik ben heel end gekomen en ben heel erg dankbaar. Maar de bestanden worden tot de regel 655 ingelezen voor de rest krijg ik #N/A te zien. Dus de rest wordt niet herkend. Weet je toevallig wat daar aan de hand zou zijn? of iemand anders die dat weet?

Alvast bedankt!

groetjes
 
Voor Excel en vba zijn hier specialisten. Ik kan daar niet verder mee helpen. Waar ik wel benieuwd naar ben is een screenshot wat wordt ingelezen, rijen en kolommen van zo'n werkblad.
 
vermoedelijk was de vraag niet voor Senso, dus voorzichtigheidshalve deze oplossing.
Code:
Sub M_BS()
   Dim arr()
   c00 = "//client/C$/OneDriveHoofdmap/"         '---> je directory
   c01 = Split(CreateObject("wscript.shell").exec("cmd /c dir " & c00 & " /a:d/b/s").stdout.readall, vbCr)   '---> je subdirectories eronder
   
   If UBound(c01) <> -1 Then                     'er zijn er gevonden
      ReDim arr(UBound(c01), 0)                  'array dimensioneren
      For i = 0 To UBound(c01): arr(i, 0) = c01(i): Next   'zelf transponeren
      Columns("A").ClearContents
      Range("A1").Resize(UBound(c01) + 1).Value = arr
   Else
      MsgBox "foutje bedankt"
   End If
End Sub
 
Cow18,

Mijn excuses voor de vergissing. Uiteraard ik dank alle helpers van harte. Maar je bent geweldig Cow18, het werkt perfect, heel erg bedankt.

groetjes :)
 
Hoi ik heb nog een vraag :)

Nu het gelukt is met mijn mappenstructuur, wil ik deze verder bewerken om een draaitabel van te maken. Daarvoor wil ik de kolom B (de files die vanuit C:\OneDrive komen) delen, omdat daar meerdere submappen zitten. Dus ieder submap wil ik een aparte kolom van maken. Bijvoorbeeld C:\OneDrieve\documenten\Hans\2020 delen in kolom C " C:" in kolom D " OneDrieve" in kolom E " documenten in kolom F " Hans" enz. Sommige files bevatten meer submappen. Ik heb het via de tool " Text naar kolimmen" gedaan, maar als ik kolom B moet vernieuwen (daar zit de makro die nieuwe bestanden ophaalt) dan moet ik weer de tool "text naar kolommen" gebruiken. En dat wil ik niet, is te veel werk, kan ik met een handeling text naar kolommen verdelen? Zo ja hoe?

Alvast bedankt,

Groetjes
 
Daarvan een draaitabel maken ???
Nou ja, dus :
Die tekst naar kolommen is in principe maar 1 commando, dus vrij gemakkelijk toe te voegen.
Probleem is wel dat je niet weet hoe diep de diepste subdirectory is. Is dat 3 niveaus of 10 niveaus dieper dan de opgegeven subdirectory.
Dus heb ik dat eventjes in een parameter gezet, Is het niveau toch dieper, dan is de laatste cel een samenvoeging van alle onderliggende niveaus.
Code:
Sub M_BS()
   Const iKol =[COLOR="#FF0000"][SIZE=4] 6 [/SIZE][/COLOR]                               'aantal kolommen die je hiervoor gereserveerd hebt !!!! [COLOR="#FF0000"]dit getal desnoods aanpassen[/COLOR]
   Dim arr()

   c00 = "//client/C$/OneDriveHoofdmap/"         '---> je directory
   'c00 = "c:\users\eigenaar\"
   c01 = Split(CreateObject("wscript.shell").exec("cmd /c dir " & c00 & " /a:d/b/s").stdout.readall, vbCrLf)   '---> je subdirectories eronder

   If UBound(c01) <> -1 Then                     'er zijn er gevonden
      ReDim arr(UBound(c01), iKol - 1)           'array dimensioneren

      For i = 0 To UBound(c01)                   '1 per 1 aflopen
         arr(i, 0) = c01(i)                      'volledige path
         sp = Split(Mid(c01(i), Len(c00) + 1), "\")   'in stukken knippen na c00 op de "\"
         For j = 0 To Application.Min(UBound(arr, 2) - 1, UBound(sp))   'stukken 1 per 1 wegschrijven
            If j < UBound(arr, 2) - 1 Then       'nog niet in de laatste kolom
               arr(i, j + 1) = sp(j)             'stukje wegschrijven
               sp(j) = ""                        'schrappen in de array
            Else
               arr(i, j + 1) = Mid(Join(sp, "\"), j + 1)   'allerlaatste stuk wegschrijven vanaf het zoveelste karakter
            End If
         Next
      Next

      With Range([COLOR="#FF0000"]"A2"[/COLOR])                           'vanaf deze cel alles wegschrijven, [COLOR="#FF0000"]dus dit bereik aanpassen[/COLOR]
         .Resize(10000, iKol).ClearContents      'eerst zoveel rijen en kolommen leegmaken
         .Resize(UBound(c01) + 1, UBound(arr, 2) + 1).Value = arr   'data wegschrijven
      End With

   Else
      MsgBox "foutje bedankt"
   End If
End Sub
 
Hoi ik heb nog een opmerking.
Je gaf aan in jouw eerste bericht:
De mappenstructuur op onze C schijf is best heel lang. Totdat ik naar een gewenste document kom, moet ik soms 10 keer of meer doorklikken. Het handmatig bouwen van een mappenstructuur duurt heel lang en wellicht moet deze dan ook vaker bijgewerkt worden.
Dus ik begreep dat je dan minder werk wilt en minder tijd kwijt wil zijn. Je zit nu eigenlijk het tegendeel te bewijzen. Mijn vraag was en is, kun je met de zoekmachine Everything van Voidtools wel of niet zoeken in OneDrive. Want als het antwoord ja is, ben je volgens mij heel veel werk voor niets aan het doen. Daar kun je namelijk zoekresultaten exporteren in een CSV-bestand, tekst naar kolommen en filters gebruiken etc.
 
Kan Everything iets wegschrijven naar een CSV of TXT-bestand of een ander dergelijke logbestand ?
Ik denk dat TS achteraf nog bepaalde zaken (een draaitabel bv.) wil doen met de resultaat.
 
Laatst bewerkt:
Beste Senso,

goede opmerking, maar het is niet zo simpel als wij over een gebruikersgroep hebben die niet veel van Excel weten. En het gaat inderdaad ook om een resultaat dat men in een blik kan zien wat waar zit en eventueel daarvandaan open klikken. Het is dus niet de bedoeling (maar dat kan) dat men altijd dit overzicht hanteert om bestanden te openen. De documenten/gegevens automatisch moeten wel automatisch bijgewerkt worden zodat dit overzicht up to date is. En misschien eerste instantie veel werk, maar is eenmalig handeling :)

Er zijn heel veel bestanden van verschillende afdelingen op de betreffende schijf, daarom heb een draaitabel moeten toepassen om alleen de files van onze afdeling in zicht te brengen. Het zou fijn zijn natuurlijk alleen eigen files uit OneDrive te halen, maar blijkbaar kan het niet of niet zo simpel toe te passen. Maar zo kan ik ook uitkomen.

Trouwens is het niet mogelijk binnen een draaitabel een link toe te passen?? Zo ja hoe kan ik er voor zorgen dat er ook een hyperlink wordt toegepast op de filenames die geïmporteerd zijn in de kolom "B" (van de eerste makro opdracht). Deze vraag is natuurlijk voor de specialist cow18 :)

alvast bedankt,
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan