abonnement Unibet Coolblue Bitvavo
pi_185602632


Ik heb in Access een formulier als volgt. Rechts klikken op die floppy-icoontjes opent een PDF op een netwerklocatie d.m.v. hyperlinkadres:
="O:\Netwerk\Map\" & [Producent 1] & "\GMP.PDF"

(waarschijnlijk is dit echt een vieze manier van werken, maar vooralsnog werkt het)

Ik wil onderin een knopje maken dat deze negen hyperlinks afgaat en kopieert naar een nieuwe map/zip/e-mail geadresseerde. Maar in de meeste gevallen zal er een PDF hangen achter slechts bijv. drie of vier hyperlinks. Dus alleen áls het pad bestaat moet dit.

Is het uberhaupt mogelijk wat ik wil? Waar moet ik aan denken; nog meer hyperlinks, een query, een macro? ;(

Kan ik beter afstappen van hyperlinks gebruiken? Ik zou eigenlijk willen dat de bestandsnaam niet 1:1 hoeft te kloppen, maar eigenlijk dat ie "\GMP*" pakt zodat het bestand ook "GMP_09092020.pdf" kan heten bijvoorbeeld.

Access is redelijk nieuw voor me :@
  donderdag 14 maart 2019 @ 11:33:59 #2
77676 The_vice
alweer 'n idee?
pi_185604203
zie, voorbeeld is excel macro, moet nog omgezet worden naar een functie:
1
2
3
4
5
6
7
8
9
Sub test()
thesentence = InputBox("Type the filename with full extension", "Raw Data File")
Range("A1").Value = thesentence
If Dir(thesentence) <> "" Then
    MsgBox "File exists."
Else
    MsgBox "File doesn't exist."
End If
End Sub
Je kan middels VBA testen of het bestand bestaat, op basis daarvan laten kopiëren.

Als je op wildcard dingen wilt doen, dan is het handig om het aantal files te tellen dat ergens aan voldoet (>0) zie voorbeeld.

Qua bestand namen zou ik inderdaad iets met de datum (en producent ) in de naam doen. Dat is veel makkelijker terugzoeken in de file explorer. Dan kan je bijvoorbeeld in één keer alles van producent X terugvinden

Maar dan: "Certificaat"-"Jaar maand dag"_"producent", dat sorteert beter.
Hendrik de Heette heette Hendrik de Heette omdat zijn vader ook Hendrik heette.
-vandaag was 't ook mooi-
Excel; zet het eens in een pivot table
pi_185605083
quote:
0s.gif Op donderdag 14 maart 2019 11:33 schreef The_vice het volgende:
zie, voorbeeld is excel macro, moet nog omgezet worden naar een functie:
Je kan middels VBA testen of het bestand bestaat, op basis daarvan laten kopiëren.

Als je op wildcard dingen wilt doen, dan is het handig om het aantal files te tellen dat ergens aan voldoet (>0) zie voorbeeld.
Ik ga hier mee spelen. Moet nog wat meer wegwijs worden in VBA voordat ik dit ga snappen maar komt goed.

quote:
0s.gif Op donderdag 14 maart 2019 11:33 schreef The_vice het volgende:
Qua bestand namen zou ik inderdaad iets met de datum (en producent ) in de naam doen. Dat is veel makkelijker terugzoeken in de file explorer. Dan kan je bijvoorbeeld in één keer alles van producent X terugvinden

Maar dan: "Certificaat"-"Jaar maand dag"_"producent", dat sorteert beter.
Ja dat wil ik inderdaad. Weliswaar staat alles al in submappen (naam producent), maar ik wil niet dat het GMP.pdf heet maar inderdaad GMP Producent 20042019.pdf".

Als ik dat wil en met wildcard GMP* wil gaan zoeken, dan kan dat niet zoals ik het nu simpel met hyperlinks heb? Dan moet ik ook VBA gaan gebruiken om überhaupt naar dat netwerkpad te gaan en het bestand te openen?

Dank voor je input tot nu toe.
  zaterdag 16 maart 2019 @ 23:05:25 #4
77676 The_vice
alweer 'n idee?
pi_185659925
quote:
10s.gif Op donderdag 14 maart 2019 12:21 schreef racerdkb het volgende:
[..]
Ik ga hier mee spelen. Moet nog wat meer wegwijs worden in VBA voordat ik dit ga snappen maar komt goed.
[quote]
Goede investering is Microsoft Access 2016 Programming By Example: . Access is nogal steile leercurve, maar met een goed boek op het bureau kom je snel een heel eind. Staan vaak veel voorbeelden waarop je weer kan voortborduren.
[..]
Ja dat wil ik inderdaad. Weliswaar staat alles al in submappen (naam producent), maar ik wil niet dat het GMP.pdf heet maar inderdaad GMP Producent 20042019.pdf".
Als ik dat wil en met wildcard GMP* wil gaan zoeken, dan kan dat niet zoals ik het nu simpel met hyperlinks heb?
quote:
Vanuit waar wil je gaan zoeken, via explorer of vanuit Access?
Dan moet ik ook VBA gaan gebruiken om überhaupt naar dat netwerkpad te gaan en het bestand te openen?
quote:
Beide moet kunnen, maar zelf gebruik ik het liefst VBA, dat is vaak wel zo overzichtelijk.
Dank voor je input tot nu toe.
[/quote]
Hendrik de Heette heette Hendrik de Heette omdat zijn vader ook Hendrik heette.
-vandaag was 't ook mooi-
Excel; zet het eens in een pivot table
pi_185687934
quote:
0s.gif Op zaterdag 16 maart 2019 23:05 schreef The_vice het volgende:
Vanuit waar wil je gaan zoeken, via explorer of vanuit Access?
Ik wil simpelweg dat als je op een knopje klikt op het formulier in Access, je een PDF van dat certificaat op je scherm krijgt.

Nu doe ik dat met een hyperlink met deels een voorgedefinieerd pad en deels een variabele uit het formulier.

Maar op deze manier moet elke bestandsnaam van die achterliggende PDFs hetzelfde zijn, en liever doe ik dat met een wildcard zodat het alleen hoeft te beginnen met een bepaalde reeks karakters.

Hoe ik dat in VBA moet doen, zoeken naar een bestand op een netwerkschijf met een wildcard, weet ik niet :P En dus je vraag of het via explorer of vanuit Access moet begrijp ik niet zo goed.
pi_185739721
Ben nu van dat hyperlinkgedoe afgestapt.

Heb nu een module met de volgende code:
1
2
3
4
Public Sub OpenDocument(DocPath As String)
Dim A As Long
A = Shell("RUNDLL32.EXE URL.DLL,FileProtocolHandler " & DocPath, vbMaximizedFocus)
End Sub

Hiermee kan ik in principe elk bestandsformaat openen aangezien ie gewoon het default programma er achter pakt.

En dan achter m'n knopje heb ik:
1
2
3
Private Sub GMP1_Click()
Call OpenDocument("O:\Netwerk\Fabrikanten\" & [Producent 1] & "\GMP.pdf")
End Sub

Hoe ga ik nu die wildcard er in verwerken?
Ik zat te klooien met o.a.:
1Call OpenDocument("O:\Netwerk\Fabrikanten\" & [Producent 1] & "GMP*")
1Call OpenDocument("O:\Netwerk\Fabrikanten\" & [Producent 1] & "\" & "GMP*")
1Call OpenDocument("O:\Netwerk\Fabrikanten\" & [Producent 1] & "\" & "GMP" & "*" & ".pdf")

Maar zo simpel is het natuurlijk allemaal niet.

Moet ik van de filename een aparte string maken in die module waar ik ook m'n OpenDocument code in heb? @The_vice
  woensdag 20 maart 2019 @ 21:22:37 #7
77676 The_vice
alweer 'n idee?
pi_185749345
quote:
11s.gif Op woensdag 20 maart 2019 15:25 schreef racerdkb het volgende:
Ben nu van dat hyperlinkgedoe afgestapt.
.....
Hoe ga ik nu die wildcard er in verwerken?
Ik zat te klooien met o.a.:
....
Moet ik van de filename een aparte string maken in die module waar ik ook m'n OpenDocument code in heb? @:The_vice
Ja, de rest van de bestandsnaam ook meegeven. Anders moet je iets als onderstaand doen om een array met bestandsnamen te generen die aan het gedeelte van de bestandsnaam "GMP*.pdf" voldoen. En dan de eerste, of laatste laten openen (mits het goed gesorteerd in de array terechtkomt)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
Sub testfile()
Dim list As Variant
Dim FileNamePart As String
Dim FileType As String
Dim strPath As String

strPath = Environ("USERPROFILE") & "\Pictures"
FileNamePart = "CIMG"
FileType = "jpg" 'case sensitive!

 list = ListFiles(strPath, FileNamePart, FileType)
'test if empty (no results from folder)
If Len(Join(list)) > 0 Then Debug.Print list(1), list(UBound(list))
End Sub
' Return an array containing the names of the
Public Function ListFiles(ByVal dir_path As String, _
                          ByVal FileNamePart As String, _
                          ByVal FileType As String, _
                          Optional ByVal exclude_self As Boolean = True, _
                          Optional ByVal exclude_parent As Boolean = True _
                          ) As String()
                          
Dim fso As FileSystemObject
Dim fso_folder As Folder
Dim txt As String
Dim fso_file As File
Dim i As Long
Dim file_names() As String
Dim Counter As Long

    ' Make a new File System object.
    Set fso = New FileSystemObject

    ' Get the FSO Folder (directory) object.
    Set fso_folder = fso.GetFolder(dir_path)
    If fso_folder.Files.Count = 0 Then
        Exit Function
    End If
    
    ' Make the list of names.
    ReDim file_names(1 To fso_folder.Files.Count)
    i = 1
    For Each fso_file In fso_folder.Files
        If Left(fso_file.Name, Len(FileNamePart)) = FileNamePart Then
            If Right(fso_file.Name, Len(FileType)) = FileType Then
                file_names(i) = fso_file.Name
                i = i + 1
                Counter = Counter + 1
            End If
        End If
    Next fso_file
    
ReDim Preserve file_names(1 To Counter)
ListFiles = file_names

End Function

ps, volgens mij kan je
1Call
weglaten uit je code, hij voert die OpenDocument toch wel uit.
Hendrik de Heette heette Hendrik de Heette omdat zijn vader ook Hendrik heette.
-vandaag was 't ook mooi-
Excel; zet het eens in een pivot table
pi_185749410
quote:
0s.gif Op woensdag 20 maart 2019 21:22 schreef The_vice het volgende:
weglaten uit je code, hij voert die OpenDocument toch wel uit.
kan ik jou niet gewoon ff een dagdeel inhuren als extern consultant dat zou me een hoop gedoe schelen.
  woensdag 20 maart 2019 @ 21:34:13 #9
77676 The_vice
alweer 'n idee?
pi_185749847
quote:
9s.gif Op woensdag 20 maart 2019 21:23 schreef racerdkb het volgende:
[..]
kan ik jou niet gewoon ff een dagdeel inhuren als extern consultant dat zou me een hoop gedoe schelen.
Voorlopig zit ik overdag vol,
maar kan wel op afstand 's avonds wat doen.
Hendrik de Heette heette Hendrik de Heette omdat zijn vader ook Hendrik heette.
-vandaag was 't ook mooi-
Excel; zet het eens in een pivot table
abonnement Unibet Coolblue Bitvavo
Forum Opties
Forumhop:
Hop naar:
(afkorting, bv 'KLB')