Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!

Mobiles Hauptmenü

Access x64 hat Problem mit VBA Code

Begonnen von asiat, März 03, 2011, 13:18:44

⏪ vorheriges - nächstes ⏩

asiat

Hallo,

ich habe mir Access 2010 x64 installiert und nun habe ich ein problem mit einem Code schnipsel.

Type OPENFILENAME
   lStructSize As Long
   hwndOwner As Long
   hInstance As Long
   lpstrFilter As String
   lpstrCustomFilter As String
   nMaxCustFilter As Long
   nFilterIndex As Long
   lpstrFile As String
   nMaxFile As Long
   lpstrFileTitle As String
   nMaxFileTitle As Long
   lpstrInitialDir As String
   lpstrTitle As String
   Flags As Long
   nFileOffset As Integer
   nFileExtension As Integer
   lpstrDefExt As String
   lCustData As Long
   lpfnHook As Long
   lpTemplateName As Long
End Type

Declare Function GetOpenFileName Lib "comdlg32.dll" Alias "GetOpenFileNameA" (pOpenfilename As OPENFILENAME) As Long

Public Const OFN_FILEMUSTEXIST = &H1000
Public Const OFN_READONLY = &H1
Public Const OFN_HIDEREADONLY = &H4

Public Function DateiOeffnen(Optional Titel, Optional filter, Optional DefExtension, Optional AktDir) As String
   Dim strDateiname As String
   Dim strDlgTitel As String
   Dim strFilter As String
   Dim strDefExtension As String
   Dim strAktDir As String
   Dim strNull As String
   Dim OpenDlg As OPENFILENAME
   strNull = Chr$(0)
   strDateiname = String$(512, 0)
   If IsMissing(Titel) Then
       strDlgTitel = "Datei öffnen" & strNull
   Else
       strDlgTitel = Titel & strNull
   End If
   If IsMissing(filter) Then
       strFilter = "Alle Dateien" & strNull & "*.*" & strNull & strNull
   Else
       strFilter = filter & strNull
   End If
   If IsMissing(DefExtension) Then
       strDefExtension = strNull
   Else
       strDefExtension = DefExtension & strNull
   End If
   If IsMissing(AktDir) Then
       strAktDir = CurDir$ & strNull
   Else
       strAktDir = AktDir & strNull
   End If
   With OpenDlg
       .lStructSize = Len(OpenDlg)
       .hwndOwner = Screen.ActiveForm.Hwnd
       .lpstrFilter = strFilter
       .nFilterIndex = 1
       .lpstrFile = strDateiname
       .nMaxFile = Len(strDateiname)
       .lpstrInitialDir = strAktDir
       .lpstrTitle = strDlgTitel
       .Flags = OFN_FILEMUSTEXIST Or OFN_READONLY
       .lpstrDefExt = strDefExtension
       If GetOpenFileName(OpenDlg) <> 0 Then
           DateiOeffnen = Left$(.lpstrFile, InStr(.lpstrFile, strNull) - 1)
       Else
           DateiOeffnen = ""
       End If
   End With
End Function


diesen Code habe ich aus einer alten DB genommen. ich weis nur das er mir Filedialog öffnet wo ich eine Datei auswählen kann und den Pfad ausgibt und sonst nix.

nun..ja ..seit dem ich Access 2010 x64 installiert habe funzt das nicht mehr.

Die Fehlermeldung




kann mir bei der sache irgendwie helfen`? vielleicht kennt einer eine besser Lösung zu FileDialog aufruf



asiat

jetzt mal ganz blöde Frage,
was wird im Thread mit "Downloadbereich" gemeint, ich meine, wie finde ich den ?

bahasu

#3
Guckst Du links {unterhalb vom Hauptmenü}: http://www.access-o-mania.de/downloads/entry_view/165/
Servus

asiat

beim öffnen sagt er mir ungefähr die Selbe meldung wie Oben ^.

mit Access 2010 x86 hat der Obere code gut Funktioniert. nur mit x64 bit version will er nicht.

Josef P.

#5
Hallo!

Bei 64-bit-Access musst du API-Funktionen mit PtrSafe deklarieren. ... Du musst also genau das machen, was in der Fehlerbeschreibung steht.

Statt
Declare Function GetOpenFileName Lib "comdlg32.dll" Alias "GetOpenFileNameA" (pOpenfilename As OPENFILENAME) As Long
ist folgendes erforderlich:
Declare PtrSafe Function GetOpenFileName Lib "comdlg32.dll" Alias "GetOpenFileNameA" (pOpenfilename As OPENFILENAME) As Long

Anm.: Es gibt dazu auch einen KB-Artikel, dessen Link ich allerdings nicht auswendig kenne. ;)


Zitatseit dem ich Access 2010 x64 installiert habe funzt das nicht mehr.
Da wirst du bestimmt noch mehr entdecken, was nicht mehr funktionieren wird.
Beispielsweise: alle ActiveX-Controls, COM-Add-ins usw., die es nicht in 64-bit-Ausführung gibt.

mfg
Josef

asiat

ow.. :-\
dann werde ich wieder die x86 version nutzen müssen. aber ich denke das ist nicht so Tragisch.