0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

ExcellentからのVBAの32bit/64bitの同居

Last updated at Posted at 2019-04-11

Excellent

システムコンサルタント社製のExcelアドインとして動作するBIツールでVBAのコードを出力することができます。

32bit/64bit VBA

Excellentの32bit版と64bit版どちらにも対応するVBA

# If VBA7 And Win64 Then
Declare PtrSafe Function XLTLoginP Lib "XLTVBA32.DLL" (ByVal PUID$, ByVal PPASS$, ByVal MSGF%) As LongPtr
Declare PtrSafe Sub XLTPassMask Lib "XLTVBA32.DLL" (ByVal FLG%, ByVal sLEN%, ByVal PASS$)
Declare PtrSafe Function XLTLogout Lib "XLTVBA32.DLL" (ByVal HDL As LongPtr) As Long
Declare PtrSafe Function XLTSQLExecS Lib "XLTVBA32.DLL" (ByVal HDL As LongPtr, ByVal DOM$, ByVal SQL$, ByVal MSGF%, ByVal HENF%, ByVal sROW&, ByVal JOBF%, ByVal SHEET$, ByVal ROWNO&, ByVal COLNO%) As Long
# Else
Declare Function XLTLoginP Lib "XLTVBA32.DLL" (ByVal PUID$, ByVal PPASS$, ByVal MSGF%) As Long
Declare Sub XLTPassMask Lib "XLTVBA32.DLL" (ByVal FLG%, ByVal sLEN%, ByVal PASS$)
Declare Function XLTLogout Lib "XLTVBA32.DLL" (ByVal HDL&) As Long
Declare Function XLTSQLExecS Lib "XLTVBA32.DLL" (ByVal HDL&, ByVal DOM$, ByVal SQL$, ByVal MSGF%, ByVal HENF%, ByVal sROW&, ByVal JOBF%, ByVal SHEET$, ByVal ROWNO&, ByVal COLNO%) As Long
# End If

Dim Handle As LongPtr
Dim Exec As Long

ようするに、

32bitのDeclare文の後ろにPrtSafeを追加すれば64bitのDeclare文に対応するので、ディレクティブで64bitと32bitを分ける。
HandleをLongPtr型にすればどっちにも対応※

※ Handleの型は32bit版はLong型ですが、LongPtrは32bitだとLong、64bitだとLongLongになるので、([LongPtr データ型][1])LongPtrにしておけばOK!
[1]:https://docs.microsoft.com/ja-JP/office/vba/Language/Reference/User-Interface-Help/longptr-data-type

0
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?