Bijlage veld en vba

Status
Niet open voor verdere reacties.

annetiti

Gebruiker
Lid geworden
6 aug 2007
Berichten
195
Hallo

Even een vraagje:
- in een tabel gebruik ik een bijlageveld.

-Is het mogelijk om aan deze bijlageveld een mapnaam te linken?

voorbeeld: bij openen van het formulier heb ik de primary key = leerlingid --> klik ik op bijlage en voeg of maak ik nieuwe bestanden kan je verwijzen naar de mapnaam "leerling_leerlingid"?
nu neemt access het laatst gebruikt bestand bij aanklikken in bijlageveld toevoegen?

Weet hier iemand raad mee?

Groeten Anne
 
Loop met een grote boog om bijlagevelden heen; ze richten meer ellende aan dan dat je er plezier van hebt. Bovendien wint het helemaal niks aan functionaliteit t.o.v. bestanden opslaan buiten de database en daar met tekstvelden naar verwijzen. Ben je ook gelijk van je probleem af. Ik gebruik ze dus nooit, en ik weet dan ook niet of het mogelijk is. Ik vermoed eigenlijk van niet, omdat je de bijlage binnen de db opslaat en dus helemaal niks aan een pad hebt.
 
bijlagevelden

Dag Octfish

Gebruik ik dan beter volgende methode?

- er zou per record (in een subformulier) een worddocument aangemaakt worden of reeds bestaan --> veld:txtbijlage
- kan met in een tekstveld txtbijlage het volledig pad opslaan vb c:\leerlingnr\bijlagen\docx1 --> bij dubbelklik op de inhoud van het tekstveld het respectievelijk document document openen?

Ben op zoek hoe ik dit best in orde breng.

groeten Anne
 
Hoi Anne,

Dat zie je zo helemaal goed! Ik gebruik dan de actie FollowHyperlink op dat tekstveld in het formulier om het document te openen. Je kunt nog combineren met een FileDialog voor het geval het tekstveld leeg is; je zoekt (en koppelt) het document dan automatisch.
 
Dag Octafish

'k ga eerst goed googlen op filedialog. Want de eerste keer zal het tekstveld leeg zijn.
Amai veel mogelijkheden maar je moet er kunnen mee werken!
groeten Anne
 
Ik kan je de code wel geven anders hoor :). Het heet hier niet voor niks HelpMij :D.
 
bijlage veld en vba

Dag Octafish

Dat zou echt leuk zijn.
Hartelijk dank!
groeten Annetiti
 
Nou, kijk maar eens of je hier wat aan hebt :). Ik heb een tekstvak als voorbeeld (kopie_cv) met een knopje er achter (cmdCV). Dat tekstvak is leeg, of is gevuld. Logisch :). Ik heb op dat tekstvak een dubbelklik actie gezet. Als het tekstvak leeg is, moet een bestand worden toegevoegd. De Dubbelklik start dan de knop op. Staat er een document, dan wordt met FollowHyperlink het document geopend. Het leuke daarvan is, dat je elk document type kunt openen; je start het document in de gekoppelde applicatie. Dus voor een pdf start je in Acrobat Reader (of wat je zelf als standaard gebruikt natuurlijk), docx start in Word etc.

Code:
Private Sub kopie_cv_DblClick(Cancel As Integer)
    If Me.kopie_cv & "" = "" Then
        cmdCV_Click
    Else
        Application.FollowHyperlink Me.P_DossierPad & Me.kopie_cv
    End If
End Sub

Code:
Private Sub cmdCV_Click()
Dim sFile As String, sDoc As Variant
    sFile = BestandOpzoeken
    If sFile = "Annuleren" Then Exit Sub
    If Not Dir(sFile) = "" Then
        If InStr(1, sFile, "") = 0 Then Exit Sub
        sDoc = Split(sFile, "")
        Me.kopie_cv = sDoc(UBound(sDoc))
        FileCopy sFile, Me.P_DossierPad & "" & sDoc(UBound(sDoc))
    End If
End Sub

De knop heeft weer een eigen procedure:
Code:
Private Sub cmdCV_Click()
Dim sFile As String, sDoc As Variant
    sFile = BestandOpzoeken
    If sFile = "Annuleren" Then Exit Sub
    If Not Dir(sFile) = "" Then
        If InStr(1, sFile, "\") = 0 Then Exit Sub
        sDoc = Split(sFile, "\")
        Me.kopie_cv = sDoc(UBound(sDoc))
        FileCopy sFile, Me.P_DossierPad & "\" & sDoc(UBound(sDoc))
    End If
End Sub

Waarbij de regel sFile = BestandOpzoeken een functie opstart.

Code:
Function BestandOpzoeken(Optional Pad As String) As String
Dim dlgPicker As FileDialog
Dim sType() As String, sFile As String, tmp As String, sPad As String
Dim bCheck As Boolean
Dim vrtSelectedItem As Variant

    On Error GoTo Hell
    If Pad = "" Then sPad = CurrentProject.PATH Else: sPad = Pad
    If Right(sPad, 1) <> "\" Then sPad = sPad & "\"
    Set dlgPicker = Application.FileDialog(msoFileDialogFilePicker)
    With dlgPicker
        .Title = "Selecteer een bestand." 'De titel voor het venster
        .InitialFileName = sPad      'Waar moet het venster beginnen?
        With .Filters
            .Clear
            .Add "Microsoft Word", "*.doc; *.docx; *.docm", 1       'Beperk de bestandstypes tot .doc
            .Add "Microsoft Excel", "*.xls; *.xlsx; *.xlsm", 2      'Beperk de bestandstypes tot .xls
            .Add "Adobe Reader", "*.pdf", 3                         'Beperk de bestandstypes tot .pdf"
            .Add "Afbeeldingen", "*.jpg; *.jpeg; *.png", 4          'Beperk de bestandstypes tot afbeeldingen
            .Add "Alles", "*.*", 5                                  'Geen Beperkingen op bestandstype"
        End With
        .FilterIndex = 1
        .AllowMultiSelect = False                   'Slechts één bestand kiezen toegestaan
        .InitialView = msoFileDialogViewList        'Bepaal weergave
        If .Show = -1 Then                          'Bepaal of gebruiker op OK-knop heeft geklikt.
            sFile = .SelectedItems(1)           'String wordt gevuld met geselecteerde bestand
        Else
            MsgBox "Er is op <Annuleren> gedrukt..."
            BestandOpzoeken = "Annuleren"
            GoTo Hell
        End If
    End With
    BestandOpzoeken = sFile
    
Hell:
    Set dlgPicker = Nothing

End Function

En dat is het wel zo'n beetje. Volgens mij moet je hier een eind mee kunnen komen.
 
Laatst bewerkt:
Dag Ocatfish

Ik maak er zeker werk van.
Dikke merci. Dit helpt me goed vooruit!
Laat zeker iets weten.
gr Anne:thumb:
 
Dag Octafisch
Heb de module geïmplementeerd maar :
-hyperlink werkt heel goed
-Application.FileDialog(msoFileDialogFilePicker geeft geen knoppen Annuleren en Ok

Weet je soms raad met dit? Werk wel met access2010 in windows 10 omgeving!
groeten Anne
 
Ik werk ook met A2010 en Windows 10 dus daar ligt het niet aan. Kun je je eigen voorbeeld posten?
 
Dag Ocfafish

Bekijk bijlage document.zip

Een testje in bijlage. Heb wel de code click en dubbelclick omgewisseld.

Er zijn 2 tekstvelden aangemaakt op verschilende manieren.

Hartelijk dank voor de moeite.


Opmerking: het is windows8 ipv windows10
Anne
 
Je maakt het jezelf heel erg ingewikkeld door in één tekstveld een Click event en een DoubleClick event te zetten. Ga maar na: waar bestaat een dubbelklik uit? In de meeste gevallen is dat: twee keer kort achter elkaar klikken. En wat denk je dat een tekstvak doet als je daar een Click gebeurtenis op maakt? :D. Kortom: de Doubleclick kan nooit worden uitgevoerd, omdat de <Bij klikken> dan al lang en breed draait. Ergo: Access zal jouw zorgvuldig uitgevoerde dubbelklik altijd vertalen naar 2 enkele klikken.
Ik heb wat foutjes uit je code gehaald en de velden correct gekoppeld, en er een extra functie aan toegevoegd die de bestandsnaam opsplitst in naam en pad. Kijk maar of je er mee uit de voeten kunt :).
 

Bijlagen

Dag Octafish

Hartelijk dank voor het bestand. En ja.... Het werkt PRIMA! Ook de knop Annuleren en OK!


Je bent een CRACK!

Zoals je zegt heb ik de click en dubbelklik in één geheel verwerkt! oei oei zie nu mijn fout in!

Ga het implementeren in de database.

Je hebt me een goede stap vooruit geholpen!

groeten Anne
 
Hallo

Bijna alles ok .
Het path wordt niet correct geopende met .InitialFileName = sPad.

Dacht dat het in orde was! te vroeg geroepen.

groeten Anne
 
Laatst bewerkt:
Ik had je laatste berichtje niet gezien; excuses daarvoor. Krijg je eerst een complimentje, ga je daarna met je hoofd in de wolken ins blaue hinein lopen turen. Foei :).
Wat was het probleem?
 
Dag Octafish
Probleempje was als het padnaam ingevoerd is (ixidossierpad) en het document niet dan wordt wordt niet de juiste map geopend.
dus bij click
- txtdocument-click() --> bestandsplitsen met de argumenten txtdocument en txtdossierpad ( waarde uit formulier)
-bestandsplitsen wordt opgeroepen (bestandsnaam as control, pad as control) --> pad heeft een waarde (ok)
- functiebestandopzoeken --> en daar is pad leeg --> optional pad as string --> waarom heeft pad zijn waarde niet meer

Het currentproject.path krijgt niet de juiste waarde! --> spijtig --> begrijp niet goed wat er verkeerd loopt

googlen op internet en produre gevonden
Code:
Private Sub cmdFile_Click()
    Dim strPath As String

    With Me
       'strPath = Left(.lblFile.Caption, InStrRev(.lblFile.Caption, "\"))
       strPath = "C:\test\fotofilm"
        strPath = FSBrowse(strStart:=strPath, _
                           lngType:=msoFileDialogFilePicker, _
                           strPattern:="All Files,*.*")
        If strPath > "" Then .lblFile.Caption = strPath
    End With
End Sub
-
Code:
'FSBrowse (File System Browse) allows the operator to browse for a file/folder.
'  strStart specifies where the process should start the browser.
'  lngType specifies the MsoFileDialogType to use.
'  strPattern specifies which FileType(s) should be included.
Public Function FSBrowse(Optional strStart As String = "", _
                         Optional lngType As MsoFileDialogType = _
                             msoFileDialogFolderPicker, _
                         Optional strPattern As String = "All Files,*.*" _
                         ) As String
    Dim varEntry As Variant
    Dim fdf As FileDialogFilter

    FSBrowse = ""
    With Application.FileDialog(dialogType:=lngType)
        'Set the title to match the type used from the list
        .Title = "Browse for "
        Select Case lngType
        Case msoFileDialogOpen
            .Title = .Title & "File to open"
        Case msoFileDialogSaveAs
            .Title = .Title & "File to SaveAs"
        Case msoFileDialogFilePicker
            .Title = .Title & "File"
        Case msoFileDialogFolderPicker
            .Title = .Title & "Folder"
        End Select
        'Reset then add filter patterns separated by tildes (~) where multiple
        '  extensions are separated by semi-colons (;) and the description is
        '  separated from them by a comma (,).
        '  Example strPattern "MS Access,*.MDB; *.ACCDB~MS Excel,*.XLS; *.XLSX"
        Call .Filters.Clear
       ' For Each varEntry In Split(strPattern, "~")
        '    Call .Filters.Add(Description:=Split(varEntry, ",")(0), Extensions:=Split(varEntry, ",")(1))
       ' Next varEntry
        'Set some default settings
        .InitialFileName = strStart
        .AllowMultiSelect = False
        .InitialView = msoFileDialogViewDetails
        'Only return a value from the FileDialog if not cancelled.
        If .Show Then FSBrowse = .SelectedItems(1)
    End With
End Function

Begrijp beter jouw methode maar zie echt niet hoe ik die moet aanpassen om de huidige map te veranderen!
groeten Anne
 
Had je het probleem in mijn versie? Dan kijk ik morgen nog even of ik die fout kan reproduceren. En uiteraard oplossen.
 
Status
Niet open voor verdere reacties.

Nieuwste berichten

Terug
Bovenaan Onderaan