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

Problem mit Office 365

Forumthread: Problem mit Office 365

Problem mit Office 365
02.01.2026 12:55:35
Fr4nk
Hallo,

leider sind wir auf Office 365 umgestellt worden.
Einige unserer Scripts funktionieren nun nicht mehr.

Ich habe da ein Skript wo folgender Code drin stand:

Declare Function GetComputerName Lib "kernel32.dll" Alias "GetComputerNameA" (ByVal lpbuffer As String, nsize As Long) As Long 

Declare Function GetUserName Lib "advapi32.dll" Alias "GetUserNameA" (ByVal lpbuffer As String, nsize As Long) As Long


diesen habe ich durch folgendes ersetzt:


#If VBA7 Then
' 64-Bit und 32-Bit kompatible Deklaration
Declare PtrSafe Function GetComputerName Lib "kernel32.dll" ( _
ByVal lpbuffer As String, _
ByVal nsize As PtrSafe) As PtrSafe
#Else
' Alte 32-Bit Deklaration
Declare Function GetComputerName Lib "kernel32.dll" ( _
ByVal lpbuffer As String, _
ByVal nsize As Long) As PtrSafe
#End If

#If VBA7 Then
' 64-Bit und 32-Bit kompatible Deklaration
Declare PtrSafe Function GetUserName Lib "advapi32.dll" ( _
ByVal lpbuffer As String, _
ByVal nsize As PtrSafe) As PtrSafe
#Else
' Alte 32-Bit Deklaration
Declare Function GetUserName Lib "advapi32.dll" ( _
ByVal lpbuffer As String, _
ByVal nsize As Long) As PtrSafe
#End If


Nun bekomme ich hier die Fehlermeldung "Fehler beim kompilieren. Benutzerdefinierter typ nicht definiert"

Hättet Ihr da einen Ansatz für mich?
Anzeige

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Problem mit Office 365
02.01.2026 13:13:57
Uduuh
Hallo,
es gibt keinen Datententyp PtrSafe.
Ersetz mal As PtrSafe durch As LongPtr.

Eigentlich brauchst du aber keine API-Funktionen für das gewollte. Environ("username") und Environ("computername") bringen dir auch das Gewünschte.

Gruß aus'm POtt
Udo
Anzeige
AW: Problem mit Office 365
02.01.2026 14:25:21
Fr4nk
Vielen Dank,

so funktioniert es, allerdings nur auf meinem Rechner :))
AW: Problem mit Office 365
02.01.2026 14:51:06
volti
Hallo Frank,

mal unabhängig vom Environ-Vorschlag von Udo, der deutlich kürzer ist als die API-Version und dem Hinweis auf den Datentyp noch eine ergänzende Erklärung.

Private Declare PtrSafe Function GetUserNameA Lib "advapi32.dll" (ByVal lpBuffer As String, nSize As Long) As Long

Private Declare PtrSafe Function GetComputerNameA Lib "kernel32" (ByVal lpBuffer As String, nSize As Long) As Long
Sub Test()
Dim sText As String * 64

GetUserNameA sText, 64
Debug.Print Left$(sText, InStr(sText, vbNullChar) - 1)
GetComputerNameA sText, 64
Debug.Print Left$(sText, InStr(sText, vbNullChar) - 1)
End Sub


- Bei Office 365 ist eine #IF-Unterscheidung der Funktionen nicht notwendig, da VBA7 hier sowohl die 32 Bit wie auch die 64 Bit-API-Funktionen unterstützt.
- In Deiner Ersetzung hast Du jeweils den Alias weggelassen.
Die Funktion heißt GetUserNameA und nicht GetUserName. Sie dürfte demnach nicht gefunden werden.
Wenn der Alias weggelassen wird (s. o.a. code) muss die Funktion richtig deklariert werden.

Gruß Karl-Heinz
Anzeige
AW: Problem mit Office 365
02.01.2026 20:23:37
Onur
Dann liegt es daran, dass der eine Rechner Excel 64-Bit hat und der Andere Excel 32-Bit .

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige