# Excel Absturz bei Versuch zu kompilieren



## ShawnStein (30. März 2012)

Moin alle miteinander,

ich habe gerade ein echt ätzendes Problem und zwar stürzt mir Excel immer ab, wenn ich versuche mein VBA Projekt zu kompilieren.

Ich glaube es liegt daran, dass ich ein paar API Declare Statements in mein Code eingebaut habe, allerdings eine 64-bit Version nutze. Liegt es daran? Kann man da irgendwas tun?

Wäre nett, wenn mir jemand weiterhelfen könnte.

Cheers,
ShawnStein


----------



## Zvoni (30. März 2012)

Welches OS? Welches Excel? Wie sieht dann API-Statement aus?


----------



## ShawnStein (30. März 2012)

Tschuldige, war etwas ungenau.
MS Office
Excel 2010
ich hab mehrere API Statements

```
Private Declare PtrSafe Function GetPrivateProfileString Lib "kernel32" _
   Alias "GetPrivateProfileStringA" _
   (ByVal lpApplicationName As String, ByVal lpKeyName As Any, _
   ByVal lpDefault As String, ByVal lpReturnedString As String, _
   ByVal nSize As LongPtr, ByVal lpFileName As String) As Variant
' http://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/shell/reference/functions/shgetfolderpath.asp
Private Declare PtrSafe Function SHGetFolderPath Lib "shell32.dll" _
   Alias "SHGetFolderPathA" _
   (ByVal hwndOwner As LongPtr, ByVal nFolder As LongPtr, ByVal hToken As LongPtr, _
   ByVal dwFlags As LongPtr, ByVal lpszPath As String) As Variant
' http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dllproc/base/getenvironmentvariable.asp
Private Declare PtrSafe Function GetEnvironmentVariable Lib "kernel32.dll" Alias _
    "GetEnvironmentVariableA" (ByVal lpName As String, ByVal lpBuffer As String, _
    ByVal nSize As LongPtr) As Variant
' http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dllproc/base/setenvironmentvariable.asp
Private Declare PtrSafe Function SetEnvironmentVariable Lib "kernel32.dll" Alias _
    "SetEnvironmentVariableA" (ByVal lpName As String, ByVal lpValue As String) _
    As Variant
' get temp path
Private Declare PtrSafe Function GetTempPath Lib "kernel32" Alias "GetTempPathA" _
   (ByVal nBufferLength As LongPtr, ByVal lpBuffer As String) As Variant
' sleep
Private Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As LongPtr)
```

und noch ein paar weitere.... sind alle aus der Microsoft library entnommen..
Brauchst du sonst noch Infos?


----------



## Zvoni (30. März 2012)

2 Dinge: 

1) Bitte benutze VB-Codetags. Steht in den FAQ wie das geht.

2) Ich habe auch Excel2010. Wirf das PtrSafe und LongPtr über Bord!
Hier findest du alle notwendigen API-Declares: http://www.vbarchiv.net/api/index.php
(oder du machst es wie ich, und besorgst dir die WinAPI-TypeLib von Bruce McKinney, und musst nie wieder über ne API-Declare nachdenken)


----------



## ShawnStein (30. März 2012)

Danke für die schnelle und hilfreiche Antwort. Werd das gleich mal ausprobieren.


----------



## ShawnStein (31. März 2012)

ich habe windows 7. hätte ich vielleicht sagen sollen.
deshalb funktionieren die API declares aus dem vbarchiv nicht. 

wo krieg ich diese WinAPI TypLib her? Funktioniert die auch für Windows 7?


----------



## Zvoni (31. März 2012)

Ich habe Excel 2010 auf Win7. Die Declares funktionieren ganz sicher, da Microsoft zwecks Kompatibilität zu XP die behalten hat.
Ich habe diverse VBA-Sachen in Excel2010 auf Win7 erfolgreich mit genannten API's am Laufen.

Ein anderer Punkt: Deine Declares verweisen auf die ANSI-Variante der API (zu erkennen an dem "A" im Namen), und das ist definitiv noch aus Win2000/XP-Zeiten. im Klassischen Visual Basic (Bis Version 6 zumindest) kann man per Declare nur auf die ANSI-Variante einer API zugreifen, um auf die Unicode zu kommen brauchste ne TypeLib

TypeLib --> http://vb.mvps.org/hardweb/mckinney2a.htm#1


----------

