Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Office64-bit erkennen

Office64-bit erkennen
28.02.2013 20:37:21
Albert
Liebe VBA Experten,
ich möchte beim Start einer Datei die Officeversion (32 oder 64 Bit) abfragen und habe folgenden Code verwendet. Das Problem ist nun, dass auf dem Rechner mit der 32 Bitversion die MsgBox eingeblendet wird, die Abfrage vom Rechner mit der 64 Bitversion jedoch übergangen wird. Wenn ich mit "Application.OperatingSystem" eine Systemabfrage auf diesem Rechner mache wird jedoch folgende Version angezeigt "Windows (64-bit) NT 6.01".
Private Sub Workbook_Open()
If Application.OperatingSystem = "Windows (64-bit) NT 6.01" Then
MsgBox ("Dies ist eine 64-Bit Officeversion und die wird von diesem Programm nicht unterstützt") _
Else
MsgBox ("Dies ist eine 32-Bit Officeversion")
End If
Auch diese Abfrage wird vom Rechner mit der 64 Bit-Version ignoriert
'#If Win64 Then
'    MsgBox ("Es wird nur Office in der 32-Bitversion unterstützt")
'    ActiveWorkbook.Close
'    Application.Quit
'#End If
End Sub

Wer kann mir da weiterhelfen, vielen Dank im Voraus
Albert

Anzeige

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Office64-bit erkennen
01.03.2013 09:03:46
EtoPHG
Hallo Albert,
probier mal:
Sub Sub Versionen()
#If Win64 Then
MsgBox "WIN 64bit"
#Else
MsgBox "WIN 32bit"
#End If
#If VBA7 Then
MsgBox "OFFICE 64bit"
#Else
MsgBox "OFFICE 32bit"
#End If
End Sub
Gruess Hansueli

AW: Office64-bit erkennen
01.03.2013 17:03:59
Luschi
Hallo Hansueli,
so ganz stimmt das mit der Abfrage von #Vba7 nicht, siehe Grafik:
Userbild
Wenn ich im Direktfenster ? Vba7 eingebe, kommt als Ergebnis nur eine Leerzeile!
Gruß von Luschi
aus klein-Paris

Anzeige
AW: Office64-bit erkennen
01.03.2013 19:17:46
EtoPHG
Hallo Luschi,
Da hast du recht, bzw. ich möchte mich rechtfertigen ;-)
Der Grund für die Abfrage, ob der Code auf einem 64Bit System läuft oder nicht, ist die Tatsache das in letzterem die Zeigerdatentypen anders deklariert werden müssen, da diese auf grössere Adressräume verweisen können. D.h. die Msgbox "Office 64bit" sagt zwar nicht aus, dass ein Office-64Bit installiert ist, aber dass diese Zeigertypen mit PtrSafe qualifiziert werden müssen. Darum ist in diesem Fall (VBA7) richtig, dass Zeiger und Handles mit dem vorangestellten Qualifier PtrSafe definiert werden müssen, obwohl ein 32bit Office installiert ist.
Gruess Hansueli

Anzeige
AW: Office64-bit erkennen
01.03.2013 23:00:48
Luschi
Hallo Hansueli,
ich schreibe meinen Vba-Code mit einem 32-bit-Excel und verwende viele API-Funktionen.
Jetzt hat eine Firma auf Win8-64 mit Office 2010-64 umgestellt; doch der Chef-Controller hat
auf ein Office 2010-32 bestandem, da er viele ActiveX-Steuerelemente auf Blattebene einsetzt, für die es keine 64-bit-Versionen gibt. Also darf ich nun auf meinen Code anpassen.
M$ hat dazu hier Hinweise gegeben:
http://msdn.microsoft.com/de-de/library/office/ee691831%28v=office.14%29.aspx
Aber richtig helfen tun sie mir nicht, da eben auch auf dem 32-bit-Office das bedingte _ Kompilieren von

#if VBA7 Then    ' VBA7
Declare PtrSafe Function SHBrowseForFolder Lib "shell32.dll" _
Alias "SHBrowseForFolderA" (lpBrowseInfo As BROWSEINFO) As Long
'... weitere Code
#else    ' Downlevel when using previous version of VBA7
Declare Function SHBrowseForFolder Lib "shell32.dll" _
Alias "SHBrowseForFolderA" (lpBrowseInfo As BROWSEINFO) As Long
'... weitere Code
#end if
in den If-Zweig springt und dann der Debugger sich meldet.
Bin für jeden Hinweis zu diesem M$-Heckmeck dankbar.
Gruß von Luschi
aus klein-Paris

Anzeige
AW: Office64-bit erkennen
02.03.2013 00:09:23
EtoPHG
Hallo Luschi,
Für dein Beispiel muss der Code den if-Then Zweig laufen, denn das DLL läuft auf einem 64Bit Windows.
Wenn aber deine Mappe mit ActiveX-Steuerelementen ausgestattet ist und es sowohl auf einem
64Bit-Office, wie auf einem 32Bit-Office laufen muss, dann hast du ein Problem, das du nicht mit VBA lösen kannst. 64Bit-Office Anwendungen, können nur mit 64Bit-ActiveX Steuerelementen auf einem 64Bit-Windows laufen. Die 32Bit-Office Anwendung kannst du sowohl auf 64, wie auf 32Bit-Windows betreiben. Konkret: du brauchst 2 verschiedene Mappenversionen, eine für 64-Office (mit 64Bit-ActiveX und 64Bit-Windows) und eine für 32Bit-Office (mit 32Bit-ActiveX für 64Bit-Win oder 32Bit-Win).
Alles klar?
Gruess Hansueli

Anzeige
AW: Office64-bit erkennen
02.03.2013 06:08:08
Luschi
Hallo Hansueli,
danke für Deine Infos - da muß ich dann doch in den sauren Apfel beißen.
Wie heißt es doch so schön: Doppelt hält besser!
Nur das ich nun doch wieder den gerade wegen Stromsparens abgeschalteten 2. Rechner
anstöpzeln muß, wird der Stromindustrie sicher freuenund nicht mir.
Gruß von Luschi
aus klein-Paris
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Office 64-Bit erkennen: So funktioniert's


Schritt-für-Schritt-Anleitung

Um die Office-Version (32 oder 64 Bit) in deinem VBA-Projekt abzufragen, kannst du folgenden Code verwenden:

Private Sub Workbook_Open()
    #If Win64 Then
        MsgBox "Dies ist eine 64-Bit Officeversion"
    #Else
        MsgBox "Dies ist eine 32-Bit Officeversion"
    #End If

    #If VBA7 Then
        MsgBox "VBA läuft in 64-Bit Modus"
    #Else
        MsgBox "VBA läuft in 32-Bit Modus"
    #End If
End Sub

Dieser Code nutzt die #If-Direktive, um die Architektur des Systems zu bestimmen. Stelle sicher, dass du diesen Code im Workbook_Open-Ereignis einfügst, damit die Abfrage direkt beim Öffnen der Datei erfolgt.


Häufige Fehler und Lösungen

  1. Fehler: MsgBox wird nicht angezeigt

    • Lösung: Achte darauf, dass die Abfrage korrekt implementiert ist und dass du VBA7 verwendest. Wenn du einen 32-Bit Rechner hast, sollte der entsprechende Codeblock ausgeführt werden.
  2. Fehler: 32-Bit- und 64-Bit-Code in einer Datei vermischt

    • Lösung: Trenne die Codeabschnitte für 32-Bit und 64-Bit. Verwende #If VBA7 und #If Win64, um sicherzustellen, dass der richtige Code für die Version ausgeführt wird.
  3. Fehler: Fehler bei der Verwendung von DLLs

    • Lösung: Wenn du API-Funktionen wie SHBrowseForFolder nutzt, achte darauf, die PtrSafe-Qualifikation für 64-Bit VBA zu verwenden.

Alternative Methoden

Es gibt auch andere Möglichkeiten, die Version von Excel zu ermitteln. Eine davon ist die Verwendung von Application.Version:

Sub VersionErmitteln()
    MsgBox "Excel Version: " & Application.Version
End Sub

Diese Methode zeigt die Version von Excel an, gibt jedoch keine Auskunft darüber, ob es sich um eine 32-Bit oder 64-Bit-Version handelt.


Praktische Beispiele

Hier sind einige nützliche Beispiele, wie du die 32 oder 64 Bit Version von Office abfragen kannst:

  1. Abfrage der Bit-Version mit API

    #If Win64 Then
       Declare PtrSafe Function SHBrowseForFolder Lib "shell32.dll" _
       Alias "SHBrowseForFolderA" (lpBrowseInfo As BROWSEINFO) As Long
    #Else
       Declare Function SHBrowseForFolder Lib "shell32.dll" _
       Alias "SHBrowseForFolderA" (lpBrowseInfo As BROWSEINFO) As Long
    #End If
  2. VBA-Funktion zur Versionsermittlung

    Sub VersionAbfragen()
       If VBA7 Then
           MsgBox "Office 64-Bit ist installiert"
       Else
           MsgBox "Office 32-Bit ist installiert"
       End If
    End Sub

Tipps für Profis

  • Nutze bedingte Kompilierung: Mit #If VBA7 kannst du sicherstellen, dass dein Code sowohl in 32-Bit als auch in 64-Bit Umgebungen korrekt läuft.
  • Test auf verschiedenen Rechnern: Teste deinen Code auf sowohl 32-Bit als auch 64-Bit Maschinen, um sicherzustellen, dass alle möglichen Fehlerquellen abgedeckt sind.
  • Verwende Debug.Print: Nutze Debug.Print im Direktfenster, um die Werte von Variablen während der Entwicklung zu überprüfen.

FAQ: Häufige Fragen

1. Wie kann ich die Excel-Version anzeigen? Du kannst die Excel-Version mit Application.Version abfragen, das jedoch nur die Versionsnummer zurückgibt.

2. Was ist der Unterschied zwischen 32-Bit und 64-Bit? 64-Bit-Versionen können mehr RAM adressieren und sind in der Regel leistungsfähiger, während 32-Bit-Versionen auf älteren Systemen besser funktionieren.

3. Warum wird der Code auf meinem 64-Bit-Rechner nicht ausgeführt? Stelle sicher, dass du die richtige #If-Direktive verwendest und dass alle externen Bibliotheken oder DLLs mit der richtigen Bit-Version übereinstimmen.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige