VBA Word Makro soll sowohl mit 32-bit und 64 bit version

Moderator: ModerationP

VBA Word Makro soll sowohl mit 32-bit und 64 bit version

Beitragvon tutenchamun » 22. Sep 2019, 13:13

Guten Nachmittag

Ich habe in Word 2016/2019 einen Kode laufen, der sowohl mit der Office Version mit 32-bis als auch mit 64-bit laufen soll.

In der 32-bit Versione verwende ich folgende Declaration
Private Declare Sub Sleep Lib "kernel32" (ByVal Zeit As Long)

und in de4 64-bit Version verwende ich folgende Declaration
Private Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal Zeit As Long)

der Kode wird an verschiedene User weitergegeben, die auf verschieden Office Versionen arbeiten. Ich möchte nun den Kode so gestalten, dass er je nach Version richtig läuft, ohne vorher im Kode herumbasteln zu müssen. d.h. ich müsste beim Start des Kodes abfragen welche bit-Version auf dem PC läuft und dementsprechend die richtige Declaration verwenden.

hat jemand eine Idee wie das funktionieren könnte

danke für die Hilfe
Benutzeravatar
tutenchamun
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 552
Registriert: 19. Jun 2005, 06:43
Wohnort: Südtirol

Re: VBA Word Makro soll sowohl mit 32-bit und 64 bit version

Beitragvon Nepumuk » 22. Sep 2019, 14:08

Hallo,

der Zusatz PtrSafe in der API funktioniert ab Office 2010 auch in der 32Bit-Version. Es gibt nur eine Handvoll Funktionen bei denen zwischen 32 und 64Bit unterschieden werden muss.
De fontibus non est disputandum

Gruß
Nepumuk 8-)
Benutzeravatar
Nepumuk
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 14564
Registriert: 10. Aug 2004, 08:40
Wohnort: Regensburg

Re: VBA Word Makro soll sowohl mit 32-bit und 64 bit version

Beitragvon tutenchamun » 22. Sep 2019, 14:28

Danke werde es morgen testen, danke
Benutzeravatar
tutenchamun
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 552
Registriert: 19. Jun 2005, 06:43
Wohnort: Südtirol

Re: VBA Word Makro soll sowohl mit 32-bit und 64 bit version

Beitragvon theoS » 22. Sep 2019, 16:36

Es gibt auch eine Möglichkeit die bittigkeit abzufragen und den Code entsprechend mit if-then unterschiedlich ablaufen zu lassen. Das machen die Excelianer gerne. Hab allerdings mangels Bedarf keinen Code für dich. Im alten Forum gab es es da einiges dazu.
theo s.
Benutzeravatar
theoS
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 4762
Registriert: 19. Apr 2008, 00:14

Re: VBA Word Makro soll sowohl mit 32-bit und 64 bit version

Beitragvon knobbi38 » 22. Sep 2019, 18:01

@theo
meintest du das hier?
Code: Alles auswählen
#if Vba7 then
'  Code wird im neuen VBA7-Editor ausgeführt
     #if Win64 then
     '  Code wird unter der 64-Bit-Version von Microsoft Office ausgeführt
     #else
     '  Code wird unter der 32-Bit-Version von Microsoft Office ausgeführt
     #end if
#else
' Code wird in VBA-Version 6 oder älter ausgeführt
#end if

Man könnte auch in der OH mit dem Suchbegriff "WIN64" alles nachlesen.

@tutenchamun:
Für 32/64Bit:
Code: Alles auswählen
Declare PtrSafe Sub Sleep Lib "kernel32" Alias "Sleep" (ByVal dwMilliseconds As Long)


Gruß Ulrich
knobbi38
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 1395
Registriert: 02. Jul 2015, 14:23

Re: VBA Word Makro soll sowohl mit 32-bit und 64 bit version

Beitragvon hddiesel » 23. Sep 2019, 11:04

Hallo,

Code: Alles auswählen
#If VBA7 And Win64 Then
   Public Declare PtrSafe Sub Sleep Lib "kernel32.dll" (ByVal dwMilliseconds As LongPtr)
#Else
   Public Declare Sub Sleep Lib "kernel32.dll" (ByVal dwMilliseconds As Long)
#End If
Mit freundlichen Grüssen
Karl


BS: Windows 10_64-Bit, MS Office Professional Plus 2016_32-Bit
Benutzeravatar
hddiesel
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 3803
Registriert: 17. Feb 2006, 11:40
Wohnort: Deutschland

Re: VBA Word Makro soll sowohl mit 32-bit und 64 bit version

Beitragvon knobbi38 » 23. Sep 2019, 14:49

@Hddiesel:

ich glaube nicht, daß die 64 Bit Deklaration korrekt ist. Der Parameter dwMilliseconds ist eine DWORD, also ein Long und keine Pointer! Im Übrigen ist die Deklaration von sleep() bei 32Bit und 64Bit ausnahmsweise mal gleich.

Und mit der konditionalen Definition "WIN7 AND WIN64" wird VBA7 mit VBA6 und gleichgesetzt und ignoriert, dass VBA7/32Bit zumindest ptrsafe/und longprt versteht. In diesem Fall nicht so wichtig, aber als Beispiel nicht so gut geeignet. Wenn, dann sollte man das auch erklären, als einfach nur eine neue Variante anzugeben.

Gruß Ulrich
Zuletzt geändert von knobbi38 am 27. Sep 2019, 20:43, insgesamt 1-mal geändert.
knobbi38
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 1395
Registriert: 02. Jul 2015, 14:23

Re: VBA Word Makro soll sowohl mit 32-bit und 64 bit version

Beitragvon tutenchamun » 27. Sep 2019, 20:10

guten abend
ich bedanke mich bei allen für die antworten
die deklartion mit Ptrsafe funktioniert in der 64 bit als auch in der 32 bit Version

danke nochmals
Benutzeravatar
tutenchamun
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 552
Registriert: 19. Jun 2005, 06:43
Wohnort: Südtirol


Zurück zu Word Forum (provisorisch)

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 4 Gäste