Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema Frame
BildScreenshot zu Frame Frame-Seite mit Beispielarbeitsmappe aufrufen

Kompatibilität von API-Funktionen

Betrifft: Kompatibilität von API-Funktionen von: Michael Schneyder
Geschrieben am: 30.08.2014 19:04:44

Guten Abend aus Wien,
ich programmiere gerade eine kleine Buchhaltungssoftware für KMUs. Das funktioniert bislang auch recht gut - solange ich das Ganze auf meinem Excel 2007 (32bit) laufen lasse.

Für ein paar spezielle Funktionen habe ich im Netz API-Funktionen gesucht und gefunden (z.B. Fensterfixierung, Rahmen von UFs entfernen, usw.). Diese hab ich eingebaut und alles läuft. Das Programm sollte aber später auch auf anderen Systemen laufen und da liegt mein Problem: bei z.B. Excel 2010 64bit bekomme ich einen Laufzeitfehler 9 (Index außerhalb gültigem Bereich) und das wars. Nach eingehender Recherche bin ich immerhin so schlau geworden, dass ich diese Funktionen bei einer 64bit-Version anders ansprechen muss (z.B. ptrlong, usw.).

Meine VBA-Kenntnisse sind soweit in Ordnung, bloß stehe ich bei den Funktionen völlig an und auch stundenlange Suchen im Netz haben mir nur partiell weitergeholfen. Wäre es möglich, dass ihr mir hier helft? Im Idealfall sollte das Programm erst automatisch abfragen, welche Version verwendet wird und dann die entsprechenden Deklarationen festlegen (ab Excel 2007, 32bit und 64bit).

Hier einmal die Deklarationen soweit ich sie im Netz gefunden hab:

Declare PtrSafe Function DeleteMenu Lib "user32.dll" (ByVal hMenu As Long, ByVal nPosition As Long, ByVal wFlags As Long) As Long
Declare PtrSafe Function DrawMenuBar Lib "user32.dll" (ByVal hWnd As Long) As Long
Declare PtrSafe Function FindWindow Lib "user32.dll" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As LongPtr
Declare PtrSafe Function GetSystemMenu Lib "user32.dll" (ByVal hWnd As Long, ByVal bRevert As Long) As Long
Declare PtrSafe Function GetSystemMetrics Lib "user32.dll" (ByVal nIndex As Long) As Long

#If VBA7 Then
#If Win64 Then
Declare PtrSafe Function GetWindowLongPtr Lib "user32.dll" Alias "GetWindowLongPtrA" (ByVal hWnd As LongPtr, ByVal nIndex As Long) As LongPtr
Declare PtrSafe Function SetWindowLongPtr Lib "user32.dll" Alias "SetWindowLongPtrA" (ByVal hWnd As LongPtr, ByVal nIndex As Long, ByVal dwNewLong As LongPtr) As LongPtr
#Else
Declare Function GetWindowLongPtr Lib "user32.dll" Alias "GetWindowLongA" (ByVal hWnd As LongPtr, ByVal nIndex As Long) As LongPtr
Declare Function SetWindowLongPtr Lib "user32.dll" Alias "SetWindowLongA" (ByVal hWnd As LongPtr, ByVal nIndex As Long, ByVal dwNewLong As LongPtr) As LongPtr
#End If

Declare Function SendMessage Lib "user32.dll" Alias "SendMessageA" (ByVal hWnd As LongPtr, ByVal wMsg As Long, ByVal wParam As Long, ByRef lParam As Any) As Long

#Else
Declare Function GetWindowLongPtr Lib "user32.dll" Alias "GetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long) As Long
Declare Function SendMessage Lib "user32.dll" Alias "SendMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByRef lParam As Any) As Long
Declare Function SetWindowLong Lib "user32.dll" Alias "SetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
#End If

Declare PtrSafe Function ReleaseCapture Lib "user32.dll" () As Long
Declare PtrSafe Function SetWindowPos Lib "user32.dll" (ByVal hWnd As Long, ByVal hWndInsertAfter As Long, ByVal x As Long, ByVal y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long

Public Const SM_CXSCREEN = 0
Public Const SM_CYSCREEN = 1
Public Const MF_BYCOMMAND = &H0
Public Const SC_MOVE = &HF010
Public Const GC_CLASSNAMEMSEXCELFORM = "ThunderDFrame"
Public Const GWL_STYLE = -16
Public Const WS_CAPTION = &HC00000
Public Const HTCAPTION = 2
Public Const WM_NCLBUTTONDOWN = &HA1
Public Const HWND_TOPMOST = -1
Public Const SWP_NOSIZE = &H1
Public Const SWP_NOMOVE = &H2
Public Const SWP_NOACTIVATE = &H10
Public Const SWP_SHOWWINDOW = &H40

Public hWndForm As LongPtr, hwndMenu As LongPtr


Irgendwo hier sollte der "Fehler" liegen. Ich freue mich über jede Hilfe und bin dankbar wieder was Neues lernen zu können.

LG aus Wien
Michael

  

Betrifft: AW: Kompatibilität von API-Funktionen von: robert
Geschrieben am: 04.09.2014 09:17:41

Hi Michael,

hast Du hier unter "RECHERCHE-Archivsuche" schon gesucht ?

Gruß
robert ( auch aus Wien )