Hallo Leute
ich hab wieder ein Problem bei dem ich (wieder einmal) nicht weiter komme.
Nachdem in der Firma einige neue PC´s angeschafft wruden, wurde auch die SW erneuert und auf Office 64 bit "umgestellt". So, und nun hab ich das Problem, dass meine Anwendung die ich gemacht habe und bei der Ihr mir so tatgräftig geholfen habt, (danke noch einmal dafür), genau auf diesen Rechnern nicht läuft. Ich hab nun schon ausgibig im Netz gesucht, aber leider nur Seiten gefunden auf denen was beschrieben wird bei dem ich mich nicht auskennt.
Gibt es eine Möglichkeit eine Anwendung die auf einer 32 bit Version geschrieben wurde für eine 64 bit Version zu konvertieren. Ich hab´s schon mit "Speichern unter" oder mit dem Import aller Abfragen, Formulare.... in eine neue Datenbank versucht, das hat leider nicht funktioniert. Auch einen Menüpunkt konnte ich weder im Access noch VBA-Fenster finden.
Bitte wieder um eure Hilfe
Danke
Hallo,
das ist mitunter auch ein Grund warum von der Verwendung von Office x64 auf PCs - selbst von MS! - abgeraten wird.
Die 64Bit Version bringt auf einem PC, also einem Clientrechner, mehr Nachteile als Vorteile. :o
Dein Problem dürfte aber vorrangig im Bereich VBA zu suchen sein.
Stimmen denn alle Verweise oder gibt es da ev. gebrochene Einträge?
Gibt' s API-Deklarationen in der DB?
Was sagt der Debugger?
ZitatGibt es eine Möglichkeit eine Anwendung die auf einer 32 bit Version geschrieben wurde für eine 64 bit Version zu konvertieren
Ja, manuell ... Problem suchen und beheben - automatisiert geht da nix. :'(
Tja, ich hab mir schon so was in der Art gedacht. Ich hab aber was im Internet gefunden mit dem es angeblich funktionieren soll. Und zwar ist es dieser Code:
#If VBA7 Then
'Wait implementieren
Private Declare PtrSafe Sub apiSleep Lib "kernel32" Alias _
"Sleep" (ByVal dwMilliseconds As Long)
Private Declare PtrSafe Function apiSleepEx Lib "kernel32" Alias _
"SleepEx" (ByVal dwMilliseconds As Long, ByVal bAlertable As Long) As Long
#Else
'Wait implementieren
Private Declare Sub apiSleep Lib "kernel32" Alias _
"Sleep" (ByVal dwMilliseconds As Long)
Private Declare Function apiSleepEx Lib "kernel32" Alias _
"SleepEx" (ByVal dwMilliseconds As Long, ByVal bAlertable As Long) As Long
#End If
Damit sollte es irgendwie funktionieren das Formulare für beide Versionen ok sind.
Ich hab das mal versucht und den Code in Formulare kopiert. Es fällt dann zwar die Fehlermeldung weg, die Schaltflächen funktionieren aber nicht.
gibt´s da einen Lösungsansatz dazu.??
Hallo Johannes
Habe auch mal im Netz gesucht und das gefunden:
http://technet.microsoft.com/de-de/library/ee681792.aspx
Ein weitere Hinweis war auch das in der 32 Bit Datenbank Version keine "Declare" Anweisung vorhanden bzw. eingebaut sein darf, wenn sie unter einer 64 Bit Version zum einsatz kommen soll.
http://www.ms-office-forum.net/forum/showthread.php?t=274784
Hoffe es hilft dir weiter.
Hallo
Ja, das hab ich schon gesehen bzw. gelesen, nur.... inwiefern hilft mir das weiter????
Kann 2013 eine konvertierung durchführen????
Hallo Johannes
@ Database schrieb dir:
ZitatGibt' s API-Deklarationen in der DB?
Was sagt der Debugger?
Diese Frage bezieht sich auch auf meinen Beitrag, die kannst nur du aktuell beantworten.
ZitatKann 2013 eine konvertierung durchführen
Ich denke nein, da ich aber keine 64 Bit Umgebung im Einsatz habe fehlt mir hier die Erfahrung.
Hi
Debugger sagt in der 32 bit Version nicht´s. Ist alles bereinigt. Die konnte ich auch in eine ausführbare Datei umwandeln. In der 64 bit Version hab ich nicht geschaut.
Hallo
Um das Thema gezielt angehen zu können sollte bekannt sein, welche Fehlermeldung (en) in der 64 Bit Version zum tragen kommt
Hi,
ZitatKann 2013 eine konvertierung durchführen
Nein.
ZitatDie konnte ich auch in eine ausführbare Datei umwandeln
Wie bitte? ??? ???
Zitatdie Schaltflächen funktionieren aber nicht
Welche Schaltflächen? Mit welchem Code?
Zitat...keine "Declare" Anweisung vorhanden bzw. eingebaut sein darf...
Stimmt so nicht ganz, man muss diese eben für den 64Bit-Betrieb anpassen bzw. gibt es div. Einschränkungen zu COM und ActiveX ...
Siehe als allgemeine Information zu 64Bit Editionen von Office auch:
http://technet.microsoft.com/de-de/library/ee681792.aspx (http://technet.microsoft.com/de-de/library/ee681792.aspx)
Hallo
- Unter der 64 bit Version kommt immer die gleiche Fehlermeldung bei verschiedenen Codes.... siehe Anhang.
- mit einer ausführbaren Datei habe habe ich eine. accde gemeint
- und mit den Schaltflächen meinte ich z.B, die Schaltflächen die auf dem Startformular sind und verschiedene Formulare öffnen oder die Anwendung schließen soll. 2 oder 3 funktionieren komischerweise aber der Rest nicht. Gibts da nicht irgendwie eine Lösung so oder so ähnlich wie ich es ziemlich weit oben gepostet habe???
Könnte doch auch funktionieren... oder
Danke
[Anhang gelöscht durch Administrator]
Hallo Johannes
Es liegt wie du auch schon richtig erkannt hast an 32 BIT API-Deklarationen, sie muss wenn sie auf beide Systemen laufen soll entsprechend angepast werden. Das wird hier in dem Beitrag beschrieben.
http://msdn.microsoft.com/de-de/library/gg264421.aspx
Heißt du must alle Formular und Module in dem du per VBA Code die API ansprichst entsprechend der Vorgabe, alle Zeilen und Variablen ändern bzw anpassen
Hallo,
die Fehlermeldung sagt es doch schon:
Die Deklation der API-Funktionen muss um PtrSafe erweitert werden.
Dafür gibt es keine automatische Konvertierung (soweit ich weiß) und es ist Handarbeit angesagt...
Wenn es sich bei manchen Deklarationen um OCX-Dateien handelt, dann MÜSSEN diese Dateien gegen die 64 bit Variante ausgetauscht werden, sofern es die überhaupt gibt. Sonst sieht es düster aus.
Hallo Leute
Jetzt wo ich gesehen habe was ich suchen soll, hab ich auch was gefunden das passt:
Mit diesem Code in jedem Formular:
#If Win64 Then
Private Declare PtrSafe Function ShowWindow Lib "user32" _
(ByVal hwnd As LongPtr, ByVal nCmdShow As LongPtr) As Long
#Else
Private Declare Function ShowWindow Lib "user32" _
(ByVal hwnd As Long, ByVal nCmdShow As Long) As Long
#End If
Const SW_HIDE = 0 ' Fenster ausblenden
Const SW_NORMAL = 1 ' Fenster wiederherstellen bzw. einblenden
Private Sub Form_Open(Cancel As Integer)
#If Win64 Then
Dim hWindow As LongPtr
Dim nResult As LongPtr
Dim nCmdShow As LongPtr
#Else
Dim hWindow As Long
Dim nResult As Long
Dim nCmdShow As Long
#End If
hWindow = Application.hWndAccessApp
nCmdShow = SW_HIDE
nResult = ShowWindow(ByVal hWindow, ByVal nCmdShow)
ShowWindow Me.hwnd, SW_NORMAL
End Sub
Funktioniert das meiste.
Aber eben nicht alles. Ich bin ein echt mieser Programmierer und hab keine Ahnung von dem Code den ich da gefunden habe, aber im kopieren in ich ganz gut..... :-)
Damit habe ich das nächste Problem: Siehe Anhang. Was muss ich hier ändern damit das Ding funktioniert. Bitte kann mir da wieder jemand einen Tipp geben.
Vielen Dank
[Anhang gelöscht durch Administrator]
Hallo
Ich schaute mal in die Glaskugel und befrage sie.
ZitatFunktioniert das meiste.
Aber eben nicht alles
Aber ich kann leider nicht sehen, was bei dir alles nicht geht. ;)
Aber die Fehlermeldung die du uns zeigt, sagt nun mal aus das die Variable nicht deklariert wurde von dir. Um sich ein Bild machen zu können solltest du den ganzen Code posten um auch Zusammen hänge sehen zu können.
Hallo
Sorry, ich dachte mit dem Ausschnitt wäre genug sichtbar....
Ich hab jetzt mal den gesamten Code des Formulars rauskopiert und die beiden Codezeilen (mittlerweile habe ich noch einen zweiten Codeteil der reklamiert wird) rot markiert (ziemlich weit unten Seite 12 und 14)
Dabei geht es um eine Funktion die mir aus einem Formular heraus das einscannen von Dokumenten ermöglicht.
Hab da nun schon länger wieder im Internet gesucht aber keine für mich brauchbaren Hinweise gefunden.
[Anhang gelöscht durch Administrator]
Hallo,
ohne die entsprechende aufgerufene Function kann ich zum ersten Fehlerfall nicht viel sagen.
Hier wird der Name des Registryschlüssels übergeben ... OK vielleicht sollte auch HKEY_.... mit Gänsefüßen übergeben werden ...
Bei ... TWAIN_UnloadSourceManager ... fällt mir nur auf, dass diese Anweisung so einfach etwas unmotiviert in einer Routine steht.
Woher soll diese Routine 'wissen' was mit TWAIN gemeint ist?
Ich habe in deinem Code keine Deklaration etc. dazu gefunden.
Hallo
Diese Twain... ist eine Funktion die ich im Internet gefunden habe. Die besteht aus einem Formular und 2 oder 3 Modulen die ich eigentlich mit nur wenigen Änderungen betreffend des Speicherpfades so übernommen habe. Was kann ich Dir zeigen damit Du damit was anfangen kannst?? In der 32 bit Version funktioniert alles bestens. Ich bin da völlig überfordert mit diesen Änderungen....
Danke
Hallo,
ZitatIch bin da völlig überfordert mit diesen Änderungen
Das mag ich dir gerne glauben, eine solche Anpassung ist auch kein Sonntagsspaziergang :-\
Unter Umständen sind in dieser TWAIN-Geschichte auch Elemente vorhanden, die mit der 64Bit Version nicht kompatibel sind.
Zeig halt mal diese Module, wenn sie nicht zu umfangreich sind....
Gibt es mit oder in diesen ebenfalls API-Deklarationen?
Was meint den der Debugger zu den Modulen?
Hallo
Hab in den letzten Tagen versucht irgendwas selber zu Stande zu bringen oder eine Alternative zu finden.... tja, und heute bin ich wieder hier. Ich hab versucht alle relevanten Teile aus der DB zu kopieren plus die beiden DLL´s. Kann da jemand was damit anfangen und für 64 bit umschreiben???
Wäre für jede Hilfe dankbar.
Vielen dank
[Anhang gelöscht durch Administrator]
Hallo,
versuch mal ... ich hab keine 64-Bit Version zur Verfügung ...
[Anhang gelöscht durch Administrator]