Здесь, кажется, все упускают из виду то, что вы работаете в VBA, а не в .NET. IntPtr - это тип .NET, представляющий целое число, свойственное платформе. На 32-битной платформе это 32 бита, на 64-битной платформе - 64 бита.
Учитывая, что HKL - это typedef для дескриптора, который является typedef для PVOID, который является typedef для VOID *, это именно то, что вам нужно, если вы использовали .NET.
VBA не имеет ничего для 64-битных чисел, поэтому вы должны использовать другой подход.
На 64-битной машине вам нужно будет сделать что-то вроде этого:
Public Type HKL64
High As Long
Low As Long
End Type
Private Declare Function ActivateKeyboardLayout Lib "user32" ( _
Byval HklHigh As Long, Byval HklLow As Long, _
ByVal flags As Integer) As HKL64
Этот должен позволить передавать 64-битное значение в стеке функции API (через две переменные). Однако, если вы собираетесь использовать этот код на 64-битных и 32-битных машинах, вам нужно будет сделать две декларации API и затем определить, какой из них вызывать.
Кроме того, любой другой код в VBA, который вызывает API, которые имеют дело с указателями или дескрипторами, должен быть соответствующим образом изменен для обработки 64-битного ввода (не 32).
Что касается примечания, исходное объявление ActivateKeyboardLayout является неправильным, поскольку оно имеет тип возврата Integer, представляющий собой 16-разрядное значение, в то время как API возвращает тип HKL, который составляет 32 или 64 бита, в зависимости на платформе.