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

Forumthread: VBA-Code von 32-Bit in 64-Bit umschreiben

VBA-Code von 32-Bit in 64-Bit umschreiben
30.03.2019 21:05:59
32-Bit
Sehr geehrte Damen und Herren,
mich interessiert es, ob der Compiler von Microsoft eine 32-Bit-Datei in eine 64-Bit-Datei per Tastendruck kompilieren (umschreiben) kann. Mit dem Microsoft Compatibility Inspector kann ich ja überprüfen, ob ein 32-Bit VBA-Code mit einer 64-Bit-Version von Office 365 kompatibel ist. Bei der Ausführung von 32-Bit-Makros treten oft API-Fehler (Windows) oder MAPI-Fehler (Datei per E-Mail versenden) auf.
Downloadadresse:
https://www.microsoft.com/en-us/download/details.aspx?id=15001
Die Fehlercodes bezüglich der Kompatibilität von alten Makros unter 64 Bit sehen folgendermaßen aus:
Fehler beim Kompilieren (Deklaration von Variablen)
Der Code in diesem Projekt muss für die Verwendung in 64-Bit-Systemen aktualisiert werden. Prüfen und aktualisieren Sie Declare-Anweisungen, und versehen Sie diese anschließend mit dem Attribut PtrSafe.
Alle Declare-Anweisungen müssen nun das Schlüsselwort PtrSafe enthalten, damit sie unter den 64-Bit-Versionen von Microsoft Office ausgeführt werden können.
Das Schlüsselwort PtrSafe gibt an, dass eine Declare-Anweisung unter den 64-Bit-Versionen von Microsoft Office sicher ausgeführt werden kann.
Ich habe mir dies so vorgestellt, dass der Compiler den VBA-Code automatisch von 32-Bit in 64-Bit umschreibt, wenn der Compiler überprüft hat, ob der 32-Bit VBA-Code mit einer Office 365-Version (64-Bit-Version) kompatibel ist.
Falls dies nicht möglich ist, interessiert es mich, ob der Compiler in Visual Studio 2019 diese Funktion besitzt.
Mit den Visual Studio Tools für Office habe ich ja wahrscheinlich noch mehr Möglichkeiten, als mit dem Visual Basic Editor von Microsoft Office.
Der Custom UI Editor ist für XML nicht ganz so gut geeignet, da er keinen Objektkatalog mit allen zur Verfügung stehenden Befehlen enthält, wie der Visual Basic Editor. Dieser Objektkatalog ist im VBA-Editor in Excel oft sehr hilfreich. Gibt es in Visual Studio 2019 so einen Objektkatalog für XML?
Mit freundlichen Grüßen
André Poppek
Anzeige

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
VBA ist ein Interpreter, kein Compiler! (owT)
30.03.2019 21:40:58
EtoPHG

AW: Kurzform meiner Frage
30.03.2019 23:44:48
André
Sehr geehrte Damen und Herren,
1. Punkt:
ich meinte, ob Visual Studio so einen Compiler hat. Ich weiß, dass der VBA-Editor so einen Compiler nicht hat.
Der Microsoft Compatibility Inspector kann nur Fehlercodes anzeigen, aber nicht beheben.
Downloadadresse:
https://www.microsoft.com/en-us/download/details.aspx?id=15001
2. Punkt:
Ich wollte wissen, ob Visual Studio für XML einen Objektkatalog hat, wo ich alle XML-Befehle mit Bedeutung nachlesen kann. Ich überlege nämlich, ob sich für mich Visual Studio Professional lohnt. Die Visual Studio Tools für Office sind ja wahrscheinlich besser, als der VBA-Editor und der CustomUI Editor für die Ribbon Programmierung und der Kompilierung von 32-Bit-Makros in 64-Bit-Makros.
Mit freundlichen Grüßen
André Poppek
Anzeige
AW: Kurzform meiner Frage
31.03.2019 11:45:54
mumpel
Hallo!
Den Code musst Du manuell umschreiben. Und ich kann mir nicht vorstellen dass der Compiler in VS das automatisiert kann. Zudem ist VS eine ganz andere Sprache und nutzt andere Syntax.Du müsstest für Visual Studio komplett umlernen.
Gruß, René
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

VBA-Code von 32-Bit in 64-Bit umschreiben


Schritt-für-Schritt-Anleitung

Um deinen VBA-Code von 32-Bit auf 64-Bit umzustellen, befolge diese Schritte:

  1. Überprüfen der Excel-Version: Stelle sicher, ob du die 32-Bit oder 64-Bit Version von Excel verwendest. Dies kannst du unter Datei > Konto > Über Excel herausfinden.

  2. Kompatibilität prüfen: Verwende den Microsoft Compatibility Inspector, um zu überprüfen, ob dein bestehender 32-Bit VBA-Code mit der 64-Bit-Version von Office 365 kompatibel ist.

  3. Declare-Anweisungen anpassen: Suche nach allen Declare-Anweisungen in deinem Code. Jede dieser Anweisungen muss das Attribut PtrSafe enthalten, um sicherzustellen, dass sie unter der 64-Bit-Version von Excel funktioniert. Beispiel:

    Declare PtrSafe Function MyFunction Lib "mydll.dll" () As Long
  4. Code manuell umschreiben: Leider gibt es keine automatisierte Funktion im Excel VBA Compiler, die den Code direkt von 32-Bit auf 64-Bit umschreibt. Du musst dies manuell durchführen, indem du die Syntax anpasst.

  5. Testen des Codes: Teste deinen umgeschriebenen Code gründlich, um sicherzustellen, dass er in der 64-Bit-Umgebung korrekt funktioniert.


Häufige Fehler und Lösungen

  • Fehler beim Kompilieren: Wenn du die Fehlermeldung "Der Code in diesem Projekt muss für die Verwendung auf 64-Bit-Systemen aktualisiert werden" erhältst, überprüfe, ob alle Declare-Anweisungen das PtrSafe-Attribut enthalten.

  • API-Fehler: Diese treten häufig auf, wenn Funktionen, die spezifisch für 32-Bit sind, in 64-Bit verwendet werden. Stelle sicher, dass du die richtigen Datentypen verwendest und deine API-Aufrufe entsprechend anpasst.

  • MAPI-Fehler: Wenn du beim Versenden von E-Mails über VBA auf Probleme stößt, prüfe die entsprechenden MAPI-Funktionen und deren Behauptungen in der 64-Bit-Syntax.


Alternative Methoden

Eine alternative Methode zum Konvertieren von 32-Bit zu 64-Bit ist die Verwendung von Visual Studio. Es bietet umfassendere Möglichkeiten zur Entwicklung und könnte dir helfen, deine VBA-Projekte effizient zu aktualisieren. Beachte jedoch, dass du möglicherweise die Syntax und Struktur von VBA lernen musst, da Visual Studio eine abweichende Programmierumgebung darstellt.


Praktische Beispiele

Hier sind einige häufige Beispiele, die du anpassen musst:

  1. Declare-Anweisung für eine 32-Bit DLL:

    Declare Function MyFunction Lib "mydll.dll" () As Long

    Anpassung für 64-Bit:

    Declare PtrSafe Function MyFunction Lib "mydll.dll" () As Long
  2. Datentypen anpassen: Achte darauf, dass du den Datentyp LongPtr anstelle von Long verwendest, wenn du Zeiger oder Handles deklarierst:

    Dim hWnd As LongPtr

Tipps für Profis

  • Verwendung von LongPtr: Nutze LongPtr für Variablen, die Zeiger oder Handles speichern, um sicherzustellen, dass dein Code sowohl in 32-Bit als auch in 64-Bit funktioniert.

  • Testumgebung einrichten: Richte eine Testumgebung ein, in der du alle Änderungen an deinem Code gründlich testen kannst, bevor du sie in die Produktion übernimmst.

  • Verwende den Custom UI Editor: Wenn du Ribbon-Anpassungen vornimmst, kann der Custom UI Editor für Microsoft Office 365 nützlich sein, um XML-basierte Anpassungen vorzunehmen.


FAQ: Häufige Fragen

1. Kann ich meinen 32-Bit VBA-Code automatisch auf 64-Bit umstellen? Leider gibt es keine automatische Funktion im Excel VBA Compiler, um den Code von 32-Bit auf 64-Bit umzuschreiben. Du musst dies manuell tun.

2. Was ist das PtrSafe-Attribut? Das PtrSafe-Attribut ist erforderlich, um zu signalisieren, dass eine Declare-Anweisung in der 64-Bit-Version von Excel sicher ausgeführt werden kann.

3. Wie erkenne ich, ob ich Excel 32-Bit oder 64-Bit nutze? Du kannst dies unter Datei > Konto > Über Excel überprüfen. Dort wird die genaue Version angezeigt.

4. Gibt es eine Möglichkeit, Fehler beim Kompilieren zu beheben? Ja, du kannst Fehler beheben, indem du sicherstellst, dass alle Declare-Anweisungen das PtrSafe-Attribut haben und die richtigen Datentypen verwenden.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige