GetOpenFileName 64 bits

Status
Niet open voor verdere reacties.

sanders1969

Gebruiker
Lid geworden
29 dec 2018
Berichten
243
Open van een bestand werkt in 64 bits niet meer.
Heeft iemand daar een oplossing voor?
Ik heb online al wat gezien en wat uitgeprobeerd maar werkt nog steeds niet.
Misschien heeft iemand iets werkends liggen.

Code:
#If Win64 Then
Public Declare PtrSafe Function GetOpenFileName Lib "comdlg32.dll" Alias "GetOpenFileNameA" (pOpenfilename As OPENFILENAME) As Long
#Else
Private Declare Function GetOpenFileName Lib "comdlg32.dll" Alias "GetOpenFileNameA" (pOpenfilename As OPENFILENAME) As Long
#End If
 
Heb je die code wel in een module gezet?
Wijzig Private in Public.
 
Hoi,

Het staat in een module en de 64 bits staat Public en de 32 bits werkte ook met Private.
Heb je nog andere suggesties?
 
Ik snap niet waarom je de ene Public zet en de andere Private, maar daar heb je ongetwijfeld een goede reden voor. Geef de rest van de code er ook eens bij, want zo kan ik er niet zoveel mee.
 
Ik heb een applicatie gezipt en in de bijlage geplaatst.
 

Bijlagen

  • open_file.rar
    28,5 KB · Weergaven: 17
Vertel er ook bij wat er fout gaat.
En gebruik je dan de 32- of 64-bit editie?
 
Ik zal vanavond even naar je db kijken. Ik gebruik een 64 bits versie van Office 365, dus die kant kan ik testen.
 
Bij mij doet-ie het ook niet. Maar waarom zo ingewikkeld? Je kunt toch heel simpel met FileDialog een bestand openen?
Code:
    sFile = BestandOpzoeken

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 = CreateObject("WScript.Shell").SpecialFolders("MyDocuments") 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
Al dan niet met Late Binding, als je dat liever hebt.
 
Het loopt vast op Dim dlgPicker As FileDialog, zie bijlage
 

Bijlagen

  • open_file2.rar
    29,2 KB · Weergaven: 15
Ik heb de functie met Early Binding, dus dan heb je een extra bibliotheek nodig. Met LateBinding werkt hij uiteraard ook:
Code:
Function BestandOpzoeken(Optional pad As String) As String
Dim dlgPicker As Object
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 = CreateObject("WScript.Shell").SpecialFolders("MyDocuments") Else: sPad = pad
    If Right(sPad, 1) <> "\" Then sPad = sPad & "\"
    Set dlgPicker = Application.FileDialog(3) ' msoFileDialogFolderPicker) JAH 20110422
    With dlgPicker
        .Title = "Selecteer een bestand." 'De titel voor het venster
        .InitialFileName = sPad      'Waar moet het venster beginnen?
        .ButtonName = "Selecteer"
        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 = 1 ' msoFileDialogViewList JAH 20110422
        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
 
Stom, twijfelde om het te veranderen in Object maar ging voor veilig en vragen aan jou ;-)
Maaruhh mijn dank is groot!
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan