Listbox vullen met bestanden uit een folder werkt niet meer.

Status
Niet open voor verdere reacties.

samabert

Gebruiker
Lid geworden
27 mrt 2010
Berichten
301
Hallo forumleden,

Ik gebruik volgende code om een Excel Listbox te vullen met PDF files uit een folder:

Code:
 Private Declare PtrSafe Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" _
        (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, _
         ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long

Private Sub UserForm_Initialize()

    Me.StartUpPosition = 0
    Me.Top = Application.Top + 410
    Me.Left = Application.Left + Application.Width - Me.Width - 110
    ListBox1.List = Filter(Split(CreateObject("wscript.shell").exec("cmd /c Dir ""C:\Zaak\PDF\Test\*.pdf""* /b /a-d /o-d /tc").stdout.readall, vbCrLf), ".")
    ListBox1.ListIndex = 0  ' select first Item in listbox

End Sub

Dit heeft altijd gewerkt tot het bedrijf zijn veiligheidspolicy heeft gewijzigd en nu wordt er niet meer toegelaten dat deze macro uitgevoerd wordt.
Alle andere macro’s die binnen het werkblad zelf werken worden wel toegelaten en werken zonder problemen.

Wij werken met Windows 10 en Office 365 64 bit.
Is er een andere manier om deze ListBox te vullen of een andere idee om dit probleem aan te pakken?


Alvast bedankt.
Marc
 
Zo:
Code:
Private Sub UserForm_Initialize()
    Dim StrFile As String
    StrFile = Dir("C:\Zaak\PDF\Test\*.pdf")
    Do While Len(StrFile) > 0
        ListBox1.AddItem StrFile
        StrFile = Dir
    Loop
End Sub
 
Wellicht dat het declareren van die DLL in de weg zit.
In de UserForm_Initialize wordt die niet gebruikt, dus haal die eens weg.
 
AHulpje & edmoor

Ik ga morgen aan de slag met beide tips.
Hou jullie verder op de hoogte.

Bedankt.
 
Omdat het toch de bedoeling lijkt in die Listbox iets te selecteren kan datzelfde ook met:

Code:
Sub M_snb()
  with Application.filedialog(3)
     .initialfilename ="C:\Zaak\PDF\Test\*.pdf"
     if .show then  msgbox .selecteditems(1)
  end with
End Sub
 
Sorry voor de late reactie.

@ AHulpje, de code die je voorstelde doet niets en geeft ook geen fout weer.
@ edmoor, de DDL blijkt het toch niet te zijn waarom het niet werkt, deze uitgeschakeld geeft hetzelfde resultaat.

@ snb, de code met FileDialog werkt. Ik krijg de juiste folder te zien met alle PDF bestanden in. Het bestand staat wel op SharePoint, de link naar het bestand ziet er als volgt uit:
https://mb.sharepoint.com/sites/BRU_HRS_Int_Team/Freigegebene Dokumente/DISPATCH HRS/LOGBOEKEN/Scan/
Wij werken met Office 365 64 bit.
Tot zover al heel blij!

De volgende stap is een hyperlink creëren van een PDF bestand dat geselecteerd is in de folder.
De volgende code is hoe het hiervoor werkte vanuit een ListBox:

Code:
Private Sub CommandButton1_Click()

    ActiveSheet.Unprotect Password:="123"

    C00 = ("https://mb.sharepoint.com/sites/BRU_HRS_Int_Team/Freigegebene%20Dokumente/DISPATCH%20HRS/LOGBOEKEN/Scan/")
    For i = 0 To ListBox1.ListCount - 1
        If ListBox1.Selected(i) Then
            ActiveCell.Hyperlinks.Add ActiveCell, C00 & ListBox1.Value, , , ListBox1.Value

            Unload Me
            Exit Sub
        End If
    Next i

    ActiveSheet.Protect Password:="123"
End Sub



Ik heb enkele dagen proberen uit te vissen hoe die hyperlink zou kunnen gecreëerd worden via FileDialog , maar het lukt mij niet. Graag jullie hulp hiervoor.

Alvast bedankt.
Marc
 
Voor wie er interesse in heeft, hoe mijn probleem uiteindelijk opgelost is geraakt met de tip van AHulpje.

Om de ListBox te openen en te vullen met de files uit de folder Scan dien je het OneDrive adres in te geven in het pad.
Om de personen die vanop een andere PC de ListBoxbox ook willen vullen met de files uit de folder Scan, heb ik telkens een nieuwe knop aangemaakt met in de code hun username in verwerkt.
Dit werkt en de veiligheidspolicy blokkeert dit niet meer.

Om daarna een hyperlink aan te maken kan ik gewoon de code blijven gebruiken zoals voorheen, dit is met het rechtstreekse pad naar de SharePoint folder Scan en voor iedereen toegankelijk.
PHP:
 C00 = ("https://mb.sharepoint.com/sites/BRU_HRS_Int_Team/Freigegebene%20Dokumente/DISPATCH%20HRS/LOGBOEKEN/Scan/")

Waarschijnlijk zijn er nog andere en betere manieren om tot dit resultaat te komen, maar nu werkt het.

Code:
Private Sub UserForm_Initialize()

    Dim Filename As String

    Filename = Dir("C:\Users\LucBr\Sk\BRU_HRS_Int_Team - DISPATCH HRS\LOGBOEKEN\Scan\*.pdf")
    Do While Len(Filename) > 0
        Me.ListBox3.AddItem Filename
        ListBox3.ListIndex = 0
        Filename = Dir()
    Loop

End Sub


Ik heb nog wel een vraag over het sorteren van de ListBox, maar daar maak ik een nieuwe vraag over aan.

Bedankt voor de gegeven tips.
 
Je kunt inderdaad alles in 1 klap inladen. Probeer namen van variabelen te kiezen welke niet voor conflicten kunnen zorgen binnen VBA. "Filename" zou ik bvb niet gebruiken als naam voor een variabele.

Dit is een optie waarmee je in ene wegschrijft en waarmee je sorteert

Code:
Private Sub UserForm_Initialize()
 Dim objList, it, xp
 xp = "C:\Users\LucBr\Sk\BRU_HRS_Int_Team - DISPATCH HRS\LOGBOEKEN\Scan\"
 Set objList = CreateObject("system.collections.arraylist")
 
 For Each it In CreateObject("scripting.filesystemobject").getfolder(xp).Files
    If it.Name Like "*.pdf" Then objList.Add it.Name
 Next
 
 objList.Sort
 ListBox3.List = Application.Transpose(objList.toarray)
End Sub
 
Laatst bewerkt:
Je maakt mij nieuwsgierig, hoe zou jij het dan laten verlopen?
Waarom juist Filename niet gebruiken als variabele? Ik vind daar zo direct niets over terug.
 
Bedankt voor de code, ik kan het morgen pas testen op het werk in de juiste omgeving.
Ik hou je op de hoogte.
 
Prima! Laat maar weten
 
@JEC

Wat biedt jou ?
Code:
ListBox3.List = objList.toarray
 
Beter inderdaad, met 1-dimensionale arrays wil ik wel eens direct uit gewoonte naar transpose grijpen.
 
JEC,

ik heb jouw code getest met volgende fout:
214232576 (80131700) tijdens uitvoering. Automatiseringsfout.

Code stopt bij Userform.show
Ondertussen gaan nakijken wat die fout wil zeggen en heb een post hierover terug gevonden:
https://www.helpmij.nl/forum/showthread.php/953957-foutmelding-automatiseringsfout

Blijkbaar zou het iets te maken hebben met .Net Framework 3.5 dat niet is ingesteld, klopt dit?
Het enige wat ik op onze PC kan terugvinden is:
Framework64 V40.30.319
Framework V4.030319

Wij werken met Windows 10 en Office versie 64 bit.

Het inschakelen via Windows Features, daar heb ik de rechten niet voor en dit moet ik bij de Admin aanvragen.
Of is er nog een andere manier om dit op te lossen?

Alvast bedankt.
 
Heb je deze verwijzing wel aangevinkt?
 

Bijlagen

  • Verwijzingen.jpg
    Verwijzingen.jpg
    34,5 KB · Weergaven: 30
Nee, deze verwijzing heb ik niet aangevinkt. Ga dit morgenvroeg op het werk direct instellen en terug testen.
 
Het aanvinken van de verwijzing brengt geen verandering in de situatie. Ik blijf dezelfde fout ontvangen bij het openen van de Userform.
214232576 (80131700)
Zou het probleem dan toch .Net Framework 3.5 kunnen zijn dat niet is geïnstalleerd?
 
Dat is niet onmogelijk natuurlijk en kan je in Windows gewoon aan zetten:
 

Bijlagen

  • DotNet.png
    DotNet.png
    86 KB · Weergaven: 16
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan