Bijlage veld en vba

Status
Niet open voor verdere reacties.
bijlage veld cba

Dag Octafish

Of het een fout is of niet weet ik niet het probleem ligt in het wijzigen van de hoofddirectory --> function bestandopzoeken --> initialfilename in de dlgpicker.
de dlgPicker kent niet het pad dat op het formulier weergegeven is.

groeten Anne
 
Dit werkt bij mij prima:

Code:
Function BestandOpzoekenAnne(Optional Pad As String) As String
Dim sType() As String, sFile As String, tmp As String, sPad As String
Dim bCheck As Boolean
Dim vrtSelectedItem As Variant
Dim fd As Office.FileDialog

    On Error GoTo Hell
    If Pad = "" Then sPad = CurrentProject.Path Else: sPad = Pad
    If Right(sPad, 1) <> "\" Then sPad = sPad & "\"
    Set fd = Application.FileDialog(msoFileDialogFilePicker)
    With fd
        .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 Word
            .Add "Microsoft Excel", "*.xls; *.xlsx; *.xlsm", 2      'Beperk de bestandstypes tot Excel
            .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..."
            BestandOpzoekenAnne = "Annuleren"
            GoTo Hell
        End If
    End With
    BestandOpzoekenAnne = sFile
    
Hell:
    Set fd = Nothing

End Function

Met deze varianten.
Code:
Private Sub txtdossieerpad_Click()
    BestandOpzoekenAnne 
End Sub

Code:
Private Sub txtdossieerpad_Click()
    BestandOpzoekenAnne Me.txtdossieerpad
End Sub
 
dan gebruik je voor de controle hiervan een msgbox :

Code:
    If Pad = "" Then sPad = CurrentProject.Path Else: sPad = Pad
    If Right(sPad, 1) <> "\" Then sPad = sPad & "\"
    msgbox sPad
 
Dag Octafish
Het probleem ligt
Code:
Private Sub txtdocument_Click()
    On Error GoTo Hell
    If Me.txtdocument.Value & "" = "" Then
      [COLOR="#FF0000"]BestandSplitsen Me.txtdocument, Me.txtdossieerpad[/COLOR]  ' dit is ok  me.txtdossierpad = waarde uit formulier vb c:\anne\dossier
    Else
     '  Application.FollowHyperlink Me.txtdocument
    Application.FollowHyperlink Me.txtdossieerpad & Me.txtdocument
    End If
    Exit Sub

Hell:
    Me.txtdocument.Value = ""
End Sub

Code:
Function BestandSplitsen(Bestandsnaam As Control, Pad As Control)
Dim sFile As String, sDoc As Variant, i As Integer, sPad As String
[COLOR="#FF0000"]MsgBox Pad  'hier is het pad ok[/COLOR]
[COLOR="#00FF00"]    sFile = BestandOpzoeken[/COLOR] --> hier loopt het misde fout -->het al argumenten toegevoeg maar fout
    If sFile = "Annuleren" Then Exit Function
    If Not Dir(sFile) = "" Then
        If InStr(1, sFile, "\") = 0 Then Exit Function
        sDoc = Split(sFile, "\")
        Bestandsnaam.Value = sDoc(UBound(sDoc))
        For i = LBound(sDoc) To UBound(sDoc) - 1
            sPad = sPad & sDoc(i) & "\"
        Next i
        Pad.Value = sPad
    End If
End Function

Code:
Function BestandOpzoeken(Optional Pad As String) As String '--> hier is het pad leeg? probleem met argumenten neemt het pad niet mee
[B][I]ook in de procedure  pad= "c:/anne/dossier"
maar wanneer dlgpicker gaactiveerd wordt neem het systeem de initial pathname over? [/I][/B]
 Set dlgPicker = Application.FileDialog(msoFileDialogFilePicker)
    With dlgPicker

Ik weet niet waarom de waarde pad tussen de twee procedures niet juist loopt.
groeten anne
 
Kleine aanpassing in de code noodzakelijk :).
Code:
Private Sub txtdocument_Click()
    On Error GoTo Hell
    If Me.txtdocument.Value & "" = "" Then
      BestandSplitsen Me.txtdocument, Me.txtdossieerpad
    Else
    Application.FollowHyperlink Me.txtdossieerpad & Me.txtdocument
    End If
    Exit Sub

Hell:
    Me.txtdocument.Value = ""
End Sub

Code:
Function BestandSplitsen(Bestandsnaam As Control, Pad As Control)
Dim sFile As String, sDoc As Variant, i As Integer, sPad As String

    If Pad.Value & "" = vbNullString Then
        sFile = BestandOpzoeken
    Else
        sFile = BestandOpzoeken(Pad.Value)
    End If
    If sFile = "Annuleren" Then Exit Function
    If Not Dir(sFile) = "" Then
        If InStr(1, sFile, "\") = 0 Then Exit Function
        sDoc = Split(sFile, "\")
        Bestandsnaam.Value = sDoc(UBound(sDoc))
        For i = LBound(sDoc) To UBound(sDoc) - 1
            sPad = sPad & sDoc(i) & "\"
        Next i
        Pad.Value = sPad
    End If
End Function
 
Dag Octafish
Wat ben je een crack!

Het werkt prima nu.

Mag ik een beetje uitleg?

.
waarom moet je deze test op nullstring doen?
[CODE]
If Pad.Value & "" = vbNullString Then
sFile = BestandOpzoeken
Else
sFile = BestandOpzoeken(Pad.Value)
[/CODE]


in Function: BestandOpzoeken(Optional Pad As String) As String

Is dit door het woordje optional dat je de if statement doorgeeft? spad geen waarde dan bestandzoeken anders bestandzoeken (pad.value)


hartelijk dank voor je geduld.
Anne
 
Met complimentjes kom je heel ver :). Ik doe een check op de inhoud van de variabele Pad (type control, dus eigenlijk staat Pad voor het tekstvak Me.txtdossieerpad) om te bepalen of het dialoogvenster moet openen met het bestaande pad, of moet beginnen in de map waar de db staat. Het tekstvak kan leeg zijn, of al een bestaand pad bevatten. In het laatste geval lijkt het logisch dat je in dat pad begint met zoeken.
Dat houdt dan in dat de functie waarmee je uiteindelijk het dialoogvenster opent, ofwel niks heeft als startpunt, ofwel een pad meekrijgt. En dat is de reden dat in de functie BestandOpzoeken de parameter Pad optioneel moet zijn. Zou hij dat niet zijn, dan moet Pad altijd een waarde bevatten. Zo niet, einde oefening! Dat ondervang je dus door een parameter de optie Optional mee te geven: mag dus bestaan, maar mag ook ontbreken (is leeg).
Op het moment dat je géén pad meegeeft, moet de functie dus zelf een pad bepalen en dat gebeurt verderop in de functie.
 
bijlage veld en vba

Dag Octafish

Weer bijgeleerd. Optional gebruikt ik niet.

Bedankt voor alles. Heb het geïmplementeerd in mijn access programma.

groeten Anne
 
Code:
Function BestandSplitsen(Bestandsnaam As Control, Pad As Control)
    If Pad.Value & "" = vbNullString Then
        sFile = BestandOpzoeken
    Else
        sFile = BestandOpzoeken(Pad.Value)
    End If
    If sFile = "Annuleren" Then Exit Function

    If Dir(sFile) <> "" Then
        Bestandsnaam= dir(sFile)
        Pad=left(sfile,len(sFile)-len(bestandsnaam))
    End If
End Function
 
Er gaan meer wegen naar Rotterdam :).
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan