Trainingsplaner und 64BitEin User hat mir gemeldet, dass bei Verwendung der Anwendung unter der 64Bit Version von Microsoft Office ein Fehler auftritt. Dieser bezieht sich auf die Deklaration von Windows API Funktionen (Windows Application Programming Interface). Davon habe ich in der Anwendung nur zwei verwendet, und zwar zur Tastaturabfrage und Soundausgabe in der Tabata Routine. Da der Fehler bereits beim Kompilieren des Codes (beim Start der Anwendung) auftritt, funktioniert dann nicht nur der Tabata Timer nicht, sondern es geht gar nichts mehr.
Ich habe herausgefunden, dass der Aufruf unter 64Bit-Systemen modifiziert werden muss (Einfügen des Attributs "PtrSafe" in den API-Aufruf) und habe den User gebeten, das für mich zu testen, da ich selbst keinen Zugriff auf 64 Bit Systeme habe. Nach seiner Aussage scheint es mit dem modifizierten Aufruf zu funktionieren. Ich habe jetzt eine Abfrage auf die verwendete VBA-Version definiert, die den Code sowohl für 32Bit als auch für 64Bit Systeme lauffähig machen sollte. Diese bedingte Deklaration wird in zukünftigen Versionen der Anwendung eingebaut, ich konnte das aber bisher nicht testen (außer dass es auf 32Bit so läuft).
Statt einer aktualisierten Version gibt es daher hier vorerst nur den geänderten Code und ich versuche mal im Bekanntenkreis jemand mit 64Bit Office zu finden, um das vernünftig zu testen.
Wer also ein 64Bit Office verwendet und eine Fehlermeldung bekommt, dass der Code für 64 Bit Systeme aktualisiert werden muss, kann das selber austauschen (bitte Feedback an mich, ob's funktioniert).
Dazu den VBA Editor aufrufen (ALT-F11) und im Fenster links Modul2 durch Doppelklick auswählen.
Dann im Programmcode ziemlich am Anfang die Deklarationen der API-Aufrufe (mit Kommentaren 4 Zeilen) unterhalb von "Option Explicit" entfernen und durch den folgenden Code ersetzen (am Besten direkt durch Copy&Paste):
- Code: Alles auswählen
' Soundausgabe- und Tastaturabfrage-Funktionen deklarieren
#If VBA7 Then
' Deklaration für 64 Bit
Private Declare PtrSafe Function sndPlaySound Lib "winmm.dll" Alias "sndPlaySoundA" (ByVal lpszSoundName As String, ByVal uFlags As Long) As Long
Declare PtrSafe Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer
#Else
' Deklaration für 32 Bit
Private Declare Function sndPlaySound Lib "winmm.dll" Alias "sndPlaySoundA" (ByVal lpszSoundName As String, ByVal uFlags As Long) As Long
Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer
#End If
Hinweis: Da das PtrSafe-Attribut nicht bekannt ist, kommt es bei 32Bit Systemen bei Eingabe der 64Bit Deklaration zu Fehlermeldungen und die beiden Zeilen werden rot dargestellt.
Da diese Zeilen innerhalb einer "#If" Bedingung stehen (diese werden zum Kompilierungszeitpunkt aber nicht zur Laufzeit ausgewertet), sind diese Fehler aber zu ignorieren und sollten nicht zu Fehlern bei der Anwendung des Programms führen.
Wer etwas will, findet Wege. Wer etwas nicht will, findet Gründe.