map openen vanuit Access

Status
Niet open voor verdere reacties.

janemmers

Gebruiker
Lid geworden
28 aug 2001
Berichten
224
Ik wil met behulp van een knop een bepaalde map openen die op de computer staat
Wie helpt me op weg met de juiste code

Bedankt
 
Daar kun je een functie voor maken, bijvoorbeeld zoiets:
Code:
Function BestandLezen()
Dim dlgPicker As FileDialog
Dim vrtSelectedItem As Variant
Dim strFile As String

    Set dlgPicker = Application.FileDialog(msoFileDialogFilePicker)
    With dlgPicker
        .Title = "Selecteer een bestand." 'De titel voor het venster
        '**************************************************************************
        'Pas dit aan voor map met afbeeldingen
        '**************************************************************************
        .InitialFileName = CurrentProject.Path      'Waar moet het venster beginnen?
        .Filters.Clear
        'Add a filter that includes GIF and JPEG images and make it the second item in the list.
        With dlgPicker.Filters
            .Add "Microsoft Word", "*.doc; *.docx; *.docm; *.dot; *.dotx; *.dotm", 1    'Beperk de bestandstypes tot Word bestanden
            .Add "Microsoft Excel", "*.xls; *.xlsx; *.xlsm; *.xlt; *.xlsb", 2           'Beperk de bestandstypes tot Excel bestanden
            .Add "Microsoft PowerPoint", "*.ppt; *.pot", i + 1                          'Beperk de bestandstypes tot Powerpoint
            .Add "Microsoft Access", "*.mdb; *.mde; accdb; accde", 3                    'Beperk de bestandstypes tot Access databases
            .Add "Adobe Reader", "*.pdf", 4                                             'Beperk de bestandstypes tot .pdf-jes
            .Add "Afbeeldingen", "*.gif; *.jpg; *.jpeg; png", 5                         'Beperk de bestandstypes tot plaatjes
            .Add "Songs", "*.mp3; *.wav", 6                                             'Beperk de bestandstypes tot .mp3 en wav
            .Add "Alles", "*.*", 7                                                      'Geen Beperkingen op bestandstype"
        End With
        .FilterIndex = 1
        .AllowMultiSelect = True                   'Slechts ??n bestand kiezen toegestaan
        .InitialView = msoFileDialogViewList        'Bepaal weergave
        If .Show = -1 Then                          'Bepaal of gebruiker op OK-knop heeft geklikt.
            For Each vrtSelectedItem In .SelectedItems
                strFile = strFile & vrtSelectedItem & ";"
                ''strFile = .SelectedItems.Item(1)    'String wordt gevuld met geselecteerde bestand
            Next
        Else
            MsgBox "Er is op <Cancel> gedrukt..."
        End If
    End With

End Function
 
Laatst bewerkt:
Ik kom er niet uit met de aanwijzingen die je gestuurd hebt.
Om het wat concreter te maken heb ik een database toegevoegd
Als je op de knop documenten klikt moet de map op de PC openen
Deze map is te vinden op de computer E:\Bestanden\Worddocs\Jan\Emmers Jan
Voor het laatste deel van het path (Emmers Jan) moet deze gebruik maken van de velden achternaam en voornaam op het formulier

Hopelijk kun je mij helpenBekijk bijlage Database2.zip
 
Leg nog even wat beter uit wat je wilt; ik snap dat nu even niet. "Een map openen" is namelijk best vaag. Doorgaans doe je dat omdat je een document wilt opslaan of openen. Opslaan doe je dan op basis van het document dat je kiest, openen doe je vanuit de opgeslagen veldwaarde. Voor het laatste heb je geen verkenner nodig, voor het eerste dus een FileDialog venster.
Alleen de verkenner openen? Dat is weer een andere opdracht, dat kan namelijk met een SHELL commando. Maar dan heb je niks; ja, dan heb je de verkenner geopend.
 
Bedankt voor de moeite

In de map: E:\Bestanden\Worddocs\Jan\Emmers Jan, staan allerlei bestanden (word-documenten, excel-documenten foto's) Deze bestanden wil tijdens het werken in Access inzien. Het leek me handig om een knop in het formulier te zetten zodat ik toegang krijg tot deze map en vervolgens zelf een bestand kan kiezen dat ik wil openen.
Als ik het bestand weer sluit kan ik weer verder in Access.

Ik hoef dus geen bestanden op te slaan in deze map tijdens het werken in Access.
 
Een database is pas écht nuttig als je (gerelateerde) gegevens kunt opslaan en makkelijk terugvinden. In een systeem dat ik nu aan het bouwen ben, zit dus een tabel tDocumenten waarin ik m.b.v. een subformulier documenten(namen) opsla, die je dus gelijk ziet als je een hoofdrecord opent. Met een simpele klik wordt het bijbehorende document geopend. Mijn systeem laat je zoeken naar een document middels een FileDialog, slaat vervolgens dus de bestandsnaam+pad op in de tabel en kopieert het bestand naar de vaste (dossier)locatie.
Zo'n opzet lijkt mij verre te prefereren boven jouw werkwijze. Die dus met een Shell opdracht wel te doen is overigens. Of een combinatie van een FileDialog om het bestand op te zoeken, en een FollowHyperlink om het bestand te openen.
 
Octafish,
Bedankt voor jouw bijdrage. Het heeft mij in ieder geval toch op een ander denkspoor gezet. Ik heb even geëxperimenteerd met een veld met het gegevenstype bijlage. Dit geeft al hele mooie resultaten.
Ik wil dit zeker oppakken om dit verder uit te voeren. Tot die tijd wil ik de map op de PC kunnen openen mbv de Shell function.

Ik heb onderstaande formule gemaakt maar deze werkt niet door de twee veldnamen (achternaam en voornaam) als ik deze vervang door de inhoud van die velden (in mijn geval Emmers Jan) werkt dit goed
Kun je even kijken wat ik over het hoofd zie. let op de spatie tussen Emmers en Jan

Private Sub Knop12_Click()
Shell "explorer.exe E:\bestanden\worddocs\jan\ & Me.Achternaam & & Me.Voornaam & ", 1
End Sub
 
Doe jezelf een lol en gooi dat bijlageveld onmiddellijk weg. Gebruik alleen tekstvelden met padverwijzingen.
 
Een database is pas écht nuttig als je (gerelateerde) gegevens kunt opslaan en makkelijk terugvinden. In een systeem dat ik nu aan het bouwen ben, zit dus een tabel tDocumenten waarin ik m.b.v. een subformulier documenten(namen) opsla, die je dus gelijk ziet als je een hoofdrecord opent. Met een simpele klik wordt het bijbehorende document geopend. Mijn systeem laat je zoeken naar een document middels een FileDialog, slaat vervolgens dus de bestandsnaam+pad op in de tabel en kopieert het bestand naar de vaste (dossier)locatie.
Zo'n opzet lijkt mij verre te prefereren boven jouw werkwijze. Die dus met een Shell opdracht wel te doen is overigens. Of een combinatie van een FileDialog om het bestand op te zoeken, en een FollowHyperlink om het bestand te openen.

Kan je jouw opzet geven? Klinkt erg goed. Ik heb zelf iets opgezet met alleen een verwijzing. Ben erg benieuwd hoe je dit gedaan hebt.
 
Da's een hoop code :).
Laten we beginnen bij de code die aan de knop hangt waarmee je een bestand inleest.
Code:
Private Sub cmdDoc_Click()
Dim sFile As String, sDoc As Variant
    
    With Me
        If IsNull(!DossierPad) And TempVars("varPersoonPad").Value & "" = "" Then
            TempVars("varPersoonPad").Value = fPadMaken(Stam_Pad & "\Personen\" & TempVars("varPersoonID").Value & "\")
            !DossierPad.Value = TempVars("varPersoonPad").Value
            .Dirty = False
        Else
            TempVars("varPersoonPad").Value = !DossierPad.Value
        End If
    End With
    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))
        On Error Resume Next
        FileCopy sFile, TempVars("varPersoonPad").Value & "\" & sDoc(UBound(sDoc))
        Me.Repaint
    End If
End Sub

Daarnaast een knop om het tekstvak leeg te maken. An sich niet lastig, maar wellicht wil je het gekoppelde document ook verwijderen, en dan is er meer nodig.
Code:
Private Sub cmdCV_Leeg_Click()
    If MsgBox("Wil je het bestand '" & LCase(Me.kopie_cv) & "' ook verwijderen van de harde schijf?", vbYesNo) = vbYes Then
        On Error GoTo Hell
        Kill Me.DossierPad & Me.kopie_cv
    End If
    Me.kopie_cv = Null

Hell:
End Sub

En uiteraard wil je het document kunnen openen, en dat kan bijvoorbeeld met een dubbelklik op het tekstveld:
Code:
Private Sub kopie_cv_DblClick(Cancel As Integer)
    On Error GoTo Hell
    If Me.kopie_cv & "" = "" Then
        cmdCV_Click
    Else
        Application.FollowHyperlink Me.DossierPad & Me.kopie_cv
    End If
    Exit Sub

Hell:
    If MsgBox("Het bestand '" & LCase(Me.kopie_cv) & "' ontbreekt in de dossiermap; wil je het verwijderen uit de lijst?", vbYesNo) = vbYes Then
        Me.kopie_cv = Null
    End If

End Sub

In de eerste code staat een functie (fPadMaken) die een pad maakt voor de documenten. Dat zijn de volgende twee:
Code:
Public Function fPadMaken(sFolder As String) As String
On Error GoTo ErrorHandler
Dim sF As String
    sF = GetPathOnly(sFolder)
    If Dir(sF, vbDirectory) = "" Then
      sF = fPadMaken(sF)
      MkDir sF
    End If
    fPadMaken = sFolder
    Exit Function
    
ErrorHandler:
    Exit Function
End Function

Code:
Public Function GetPathOnly(sPath As String) As String
    GetPathOnly = Left(sPath, InStrRev(sPath, "\", Len(sPath)) - 1)
End Function

De code maakt dus gebruik van een functie (BestandZoeken) om het bestand te openen. Dat is deze:
Code:
Function BestandOpzoeken(Optional Pad As String) As String
Dim dlgPicker As FileDialog
Dim sType() As String, sFile As String
Dim 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 "Alles", "*.*", 1                                  'Geen Beperkingen op bestandstype"
            .Add "Microsoft Word", "*.doc; *.docx; *.docm", 2       'Beperk de bestandstypes tot .doc
            .Add "Microsoft Excel", "*.xls; *.xlsx; *.xlsm", 3      'Beperk de bestandstypes tot .xls
            .Add "Adobe Reader", "*.pdf", 4                         'Beperk de bestandstypes tot .pdf"
            .Add "Afbeeldingen", "*.jpg; *.jpeg; *.png", 5          'Beperk de bestandstypes tot afbeeldingen
        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

Dan heb je volgens mij alles wat je nodig hebt :). Ik gebruik nog een constante (Stam_Pad) die naar de backend verwijst; normaal gesproken gebruik ik het pad van de lokale db, en dan gebruik ik CurrentProject.Path & "" als basis voor het pad.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan