Skip to content

DLLのダイアログ表示メソッドをVBAから呼び出し、ダイアログを表示させる

License

Notifications You must be signed in to change notification settings

Z1000R/ColorDialogDLL

Repository files navigation

DLLのダイアログ表示メソッドをVBAから呼び出し、ダイアログを表示させる

目次 Contents

 

概要 Overview

DLL内のリソースに埋め込まれたダイアログを表示するメソッドを用意し、外部から呼び出して表示する。
また、ダイアログの復帰値を、DLLのメソッド呼び出し元に返す。
 

詳細 Details

以前、【C++】色を選択できるコンボボックス(ドロップダウンリスト)を作ってみた(MFC 未使用)で、作成したダイアログを、DLL内に移植し、VBAから呼び出せるようにしたものです。
 

関数

#define COLORDIALOGDLL_API __declspec(dllexport) 

extern "C"
{
	COLORDIALOGDLL_API COLORREF WINAPI showColorComboDialog(  
      const VARIANT& vTitle,  
      const VARIANT& vMessage, 
      LPSAFEARRAY* ppsa, 
      const LONG lDefaultIndex);
}
引数 In/Out 内容 備考
vTitle In ダイアログのタイトル
vMessage In ダイアログのメッセージ
ppsa In 表示する色データの配列
(SAFEARRAY)を指すポインタのポインタ
lDefaultIndex In 表示時に選択する項目のインデックス -1 指定で、表示時未選択

 

呼び出し例

C++

DllCaller ソースを参照して下さい。
 

VBA

宣言部 (DLLが 64bit専用で作ったので、32bit用の宣言はありません。)

Private Declare PtrSafe Function showColorComboDialog Lib "ColorDialogDLL.dll" _
   (ByVal vTitle As Variant, _
    ByVal vMessage As Variant, _
    ByRef lColorList() As Long, _
    ByVal lDefaultIndex As Long) As Long

実行部
色データは、Long の配列で渡して下さい。
DLL側では、COLORREF (DWORD)の配列として受け取るので、最下位Byteが、R(赤)となります。

Sub showColorDialog()

    Dim vTitle  As Variant
    Dim vMessage    As Variant
    Dim lColorList() As Long
    Dim lColor      As Long
    Dim i           As Long

    vTitle = "Request From VBA"
    vMessage = "色を選んで下さい。"

    Call setColor1(lColorList)
    lColor = showColorComboDialog(vTitle, vMessage, lColorList, 8)
    Debug.Print Right$("00000" & Hex(lColor), 6)

End Sub

Sub setColor1(ByRef lArry() As Long)

    ReDim lArry(15)

    lArry(0) = &HFFFFFF
    lArry(1) = &HC0C0C0
    lArry(2) = &H808080
    lArry(3) = &H0&
    lArry(4) = &HFF&
    lArry(5) = &H80&
    lArry(6) = &HFFFF&
    lArry(7) = &H8080&
    lArry(8) = &HFF00&
    lArry(9) = &H8000&
    lArry(10) = &HFFFF00
    lArry(11) = &H808000
    lArry(12) = &HFF0000
    lArry(13) = &H800000
    lArry(14) = &HFF00FF
    lArry(15) = &H800080

End Sub

 

開発環境 Development Environment

  • Windows 10 Home 64bit
  • Visual Studio 2022
  • Visual C++
  • Microsoftr 365 Solo 64bit
     

ライセンスと著作権 License and Copyright

  • MIT License
  • (c) 2021 Z1000R  

実行サンプル Sample Image



VBAでの実行例

 

Link

【C++】色を選択できるコンボボックス(ドロップダウンリスト)を作ってみた(MFC 未使用)  

Z1000R

Twitter : @Z1000R_LR

About

DLLのダイアログ表示メソッドをVBAから呼び出し、ダイアログを表示させる

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published