Documenten openen via keuzelijst werkt niet

Status
Niet open voor verdere reacties.

IsR

Gebruiker
Lid geworden
2 jul 2015
Berichten
94
Goedendag allen,

Als nieuweling op dit forum, beproef ik mijn geluk bij jullie.
Na 4 dagen zoeken, googlen enzo, heb ik nog de oplossing niet.

Ik heb een keuzelijst op een formulier die bestandsnamen uit een tabel "documenten" weergeeft.
De bestandsnaam is een "hyperlinkveld".
Nu wil ik dat die documenten door te dubbelklikken op de bestandsnaam in de keuzelijst, geopend worden.
Dit lijkt echter alleen te werken bij bestanden die in dezelfde map staan als de database.

Voorbeeld locatie db: C:\users\IsR\Database\database.accdb (access 2013).
Bestanden in C:\users\IsR\Database\ worden wel geopend door te dubbelklikken
Bestanden in C:\users\IsR\Database\Excel worden niet geopend.

Hoe krijg ik voor elkaar dat ook bestanden uit de submap Excel (of welke andere submap dan ook) ook geopend worden (zonder dat ik persé zelf een pad moet coderen per lijstitem)?
Ben nog niet zo thuis in VBA, dus graag zo simpel mogelijk :)


De simpele code die ik heb opgeduikeld en dus deels werkt.

Private Sub Keuzelijst281_DblClick(Cancel As Integer)
Application.FollowHyperlink Keuzelijst281.Column(1, Keuzelijst281.ListIndex)
End Sub


Wie o wie wil/kan me uit de brand helpen.
 
Laatst bewerkt:
Allereerst welkom bij HelpMij :). 4 dagen wachten met op HelpMij klikken betekent ofwel dat je de toegangsdrempel eigenlijk te hoog vindt, ofwel dat je heel veel doorzettingsvermogen hebt gebruikt om de oplossing zelf te vinden :). Ik zou een kleine wijziging willen voorstellen:
De bestandsnaam is een "hyperlinkveld".
Maak er een gewoon tekstveld van, dat werkt veel beter met FollowHyperlink. Al was het maar omdat je in je keuzelijst toch al geen hyperlinks hebt, maar tekst. Daarnaast is een simpele klik op een keuzelijst een stuk vriendelijker voor de gebruiker en beter voor de spiertjes. Verder is de gebruikte techniek wat ingewikkeld als het toch maar om één bestand gaat. Dan kun je gewoon de waarde uit de keuzelijst gebruiken.
 
Hoi Octafish,

Bedankt voor je welkom. Heb inderdaad al vele malen Helpmij voorbij zien komen, aangeklikt en gelezen, maar vond nu eindelijk de tijd daar om er zelf deel ervan uit te gaan maken.

Ontopic: In feite is de bestandsnaam in de keuzelijst, het hyperlink veld uit de tabel documenten.
Rijbron van de keuzelijst is: SELECT [tDocumenten].[Doc_ID], [tDocumenten].[dochyperlink], [tDocumenten].[doctype] FROM tDocumenten; waar dus alleen het veld tdochyperlink in de keuzelijst getoond wordt. Maakt dat nog wat uit?
 
Je keuzelijst bevat ook het sleutelveld van je tabel en normaal gesproken heb je dat niet nodig, je ziet toch alleen de (unieke) bestandsnamen. Dus ik zou zelf de bron versimpelen want nu heb je inderdaad de ingewikkelde variant nodig.
De tabel zou ik dus instellen op tekst, niet op hyperlink. In alle jaren dat ik databases bouw heb ik nog nooit een hyperlink veld gebruikt. Om maar even aan te geven dat het makkelijk (en in mijn ogen veel beter) kan zonder.
 
Oké, dat ga ik proberen. Maar hoe krijg ik dan de "hyperlink-tekst" makkelijk in de tabel ingevoerd, zonder handmatig het hele pad in te voeren (bij elke bestand weer opnieuw, de database draait nl. ongeveer om documenten) in de tabel EN zonder in de VBA code van het "dubbelklik-event" elk bestand apart te benoemen.
Dat is voor mijn database nl. onwerkbaar.

Mijn bedoeling is toch op de een of andere manier bij het invoeren van een bestand, het bestand te kunnen selecteren (zoals bij de Verkenner) waarna het pad (hyperlink in tekstvorm) in de tabel wordt opgeslagen.
 
Laatst bewerkt:
Mijn bedoeling is toch op de een of andere manier bij het invoeren van een bestand, het bestand te kunnen selecteren (zoals bij de Verkenner) waarna het pad (hyperlink in tekstvorm) in de tabel wordt opgeslagen.
Wat bedoel je met dat laatste? Zoals ik al uitlegde gebruik ik geen hyperlinks, maar alleen tekstvelden. Het selecteren en invoeren van een bestandsnaam(+pad) doe je met een dialoogvenster, het openen van een bestand met een (dubbel)klik op het betreffende veld (of een aparte knop, wat je makkelijker vindt) Waar de actie FollowHyperlink achter hangt. Werkt perfect.
 
Inderdaad bedoel ik dat ik niet iedere keer het pad hoef in te tikken/kopiëren vanuit de adresbalk in de verkenner.
Een dialoogvenster kan een optie zijn. Kun je me een zet in de goede richting geven qua code hoe ik dat kan realiseren?

Voor wat betreft de actie FollowHyperlink heb ik nu deze code:

Private Sub Keuzelijst296_DblClick(Cancel As Integer)
Application.FollowHyperlink Address:="file:C:\Users\*username*\Documents\*Subfolder*\Database\Excel\TestLanden.xls"
End Sub


Wat zou er moeten staan (of welke richting moet ik denken) om dus niet iedere keer van elk bestand apart het pad te programmeren? (gedeelte tussen sterretjes is aangepast i.v.m. vertrouwelijkheid gegevens).?
Bedankt overigens voor je snelle reacties iedere keer.
 
Ik snap niet precies wat je met die keuzelijst probeert, maar als daar de bestanden in staan, met liefst ook de paden (al zou je die ook apart kunnen zetten in een aparte kolom die je niet ziet) dan moet het zo:
Code:
Private Sub cboBestand_DblClick(Cancel As Integer)
     Application.FollowHyperlink Address:=Me.cboBestand.Value
End Sub

Ik heb de naam van de keuzelijst ook logisch gemaakt; ik heb namelijk een gruwelijke hekel aan de standaardnamen van objecten, zodat je later nooit meer weet welke keuzelijst ook al weer wat doet. En ik raad jou dat dus ook aan :).
 
En een functie waarmee je een bestand kunt selecteren is dan iets als:
Code:
Function BestandOpzoeken() As String
Dim dlgPicker As FileDialog
Dim vrtSelectedItem As Variant
Dim strFileName As String
Dim i As Integer

    ''Set dlgpicker = Application.FileDialog(msoFileDialogFolderPicker)
    Set dlgPicker = Application.FileDialog(msoFileDialogFilePicker)
    With dlgPicker
        .Title = "Selecteer een bestand." 'De titel voor het venster
        '**************************************************************************
        'Pas dit aan voor map met bestanden
        '**************************************************************************
        .InitialFileName = CurrentProject.Path      'Waar moet het venster beginnen? Begin nu bij de db.
        .Filters.Clear
        'Filters toevoegen voor mogelijke bestandselecties.
        dlgPicker.Filters.Add "Microsoft Word", "*.doc; *.docx; *.docm; *.dotx", i + 1       'Beperk de bestandstypes tot .doc
        dlgPicker.Filters.Add "Microsoft Excel", "*.xls; *.xlsx; *.xlt; *.xltx", i + 1      'Beperk de bestandstypes tot .xls
        dlgPicker.Filters.Add "Microsoft PowerPoint", "*.ppt; *.pot; *.pptx", i + 1 'Beperk de bestandstypes tot .pdfppt
        dlgPicker.Filters.Add "Microsoft Access", "*.mdb; *.accdb; *.mdb; *.mde", i + 1     'Beperk de bestandstypes tot .mdb
        dlgPicker.Filters.Add "Adobe Reader", "*.pdf", i + 1                'Beperk de bestandstypes tot .pdf"
        dlgPicker.Filters.Add "Afbeeldingen", "*.png; *.jpg; *.jpeg; *.gif", i + 1 'Beperk de bestandstypes tot .jpg"
        dlgPicker.Filters.Add "Geluid", "*.mp3; *.wav", i + 1                'Beperk de bestandstypes tot .mp3 en wav"
        dlgPicker.Filters.Add "Alles", "*.*", i + 1                         'Geen Beperkingen op bestandstype"
        .FilterIndex = 1
        .AllowMultiSelect = True                    'Meerdere bestanden selecteren.
        .InitialView = msoFileDialogViewList        'Bepaal weergave
        If .Show = -1 Then                          'Bepaal of gebruiker op OK-knop heeft geklikt.
            For Each vrtSelectedItem In .SelectedItems
                If Not strFileName = "" Then strFileName = strFileName & ";"
                strFileName = strFileName & vrtSelectedItem
            Next
        Else
            MsgBox "Er is op <Annuleren> gedrukt..."
        End If
    End With
    
    BestandOpzoeken = strFileName
    Set dlgPicker = Nothing

End Function
 
Oké bedankt.! De code voor de keuzelijst werkt. Super!

De code voor het dialoogvenster ga ik verder mee. Kan even duren voordat ik daar op terugkom (indien nodig ;) ).

Over de standaardbenamingen; dat heb ik zelf ook al bedacht, maar aangezien mijn database zich nog in een "testvariant" bevindt, is dat nu nog niet zo belangrijk.
Desalniettemin, bedankt voor de tip, de noodzaak/handigheid ervan begrijp ik zeker en zal ik in de definitieve versie zeker aanpassen/gebruiken.
 
Je kunt de functie bijvoorbeeld aan het <Bij klikken> hangen van het tekstvak.
 
OctaFish,
Hoe krijg ik nu alleen de bestandsnaam van het bestand waarvan ik het pad in de tabel documenten als tekst heb ingevoerd, zichtbaar?
 
Alleen zichtbaar, of wil je alleen de bestandsnaam opslaan? En waar laat je dan het pad?
 
Laatst bewerkt:
De tabel Documenten bestaat nu uit: DocID, Docpad (dus in het voorbeeld:C:\Users\*username*\Documents\*Subfolder*\Database\Excel\TestLanden.xls). Nu wil ik in de tabellayout daar DocNaam aan toevoegen. Daar moet dus alleen Testlanden.xls komen te staan.
Het doel hiervan is dat uiteindelijk in de keuzelijst van mijn formulier niet het pad van het bestand zichtbaar is, maar de alleen bestandsnaam waarop ik kan dubbelklikken.
De rijbron van mijn keuzelijst bestaat dus dan uit: SELECT tDocumenten.Docpad, tDocumenten.DocNaam FROM tDocumenten; , Afhankelijke kolom = kolom 2, Kolombreedten = 0;2.54cm.

Zowel het pad als de bestandsnaam wil ik in de tabel tDocumenten opslaan.
 
En waarom zou je daar een extra veld voor toevoegen aan je db? Kijk eens in de handleiding Access in de handleidingen sectie naar het hoofdstuk over Normaliseren :). Hint: je zult daar lezen dat je geen waarden opslaat die te herleiden zijn uit andere waarden. En daar is dit typisch een voorbeeld van :). Pas eerder je query aan:
Code:
SELECT Docpad, Right([Docpad ];Len([Docpad ])-InStrRev([Docpad ];"\")) FROM tDocumenten
 
Yes!, Gelukt!.
Bedankt weer. Ik zal ook mijn licht opsteken in de handleidingen.
Ik ga vandaag verder met de functie voor het dialoogvenster.
Zal het resultaat laten weten.:thumb:
 
Zo, wat testen verder, lijkt ook de code voor het dialoogvenster goed te werken.
Ik zal t.z.t. de code wel moeten aanpassen naar een andere mappenstructuur en hoopt dat dat ook lukt.
Zo niet, meld ik me wel weer op dit forum.
Voor nu zal ik dit onderwerp op "opgelost" zetten.
Bedankt voor het meedenken.
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan