• ベストアンサー

エクセルVBAへのwindowsAPIの組み込み

Excel2010を使用しています。 以下のページの最初に紹介されているマクロを実装・使用したいのですが、やり方がわかりません。 『excel_vbaでスクリーン上のpixelの色を拾いたい』 http://www.excel.studio-kazu.jp/kw/20060624174313.html APIを使ったマクロを書いたことがないので、Declare Function~Sub辺りの運用がわかりません。 詳しい方のご助力を願います。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

>APIを使ったマクロを書いたことがないので、Declare Function~Sub辺りの運用がわかりません。 Declare Functionで「使いたいAPI関数、そのAPI関数を収納しているDLL、関数の引数と戻り値などの仕様」を定義します。 例えば Declare Function GetPixel Lib "gdi32.dll" (ByVal hdc As Long, ByVal nXPos As Long, ByVal nYPos As Long) As Long は GetPixelという関数が、gdi32.dllに収納されていて、第一引数hdcはLong、第二引数nXPosはLong、第三引数nYPosはLongで、関数の戻り値はLong を意味します。 これは「宣言」ですから、グローバル変数を宣言するのと同じように「Sub~End Sub」「Function~End Function」の外に書きます。 で、宣言したAPI関数を呼び出す時は Sub Macro1() 'ローカル変数を定義 Dim hdc As Long, Color As Long Dim pt As POINTAPI 'マウスカーソルの位置を変数ptに取得 Call GetCursorPos(pt) ’画面のデバイスコンテキストをhdcに得る hdc = GetDC(0) 'hdcで示した画面の、pt.X、pt.Yの位置のピクセルの色を拾う Color = GetPixel(hdc, pt.X, pt.Y) '使い終わったhdcを後始末する Call ReleaseDC(0, hdc) MsgBox "色は" & Color & "です。" End Sub のように、普通に呼び出します。

chiku_sho
質問者

お礼

早速のご回答ありがとうございます。 Declare~の部分はグローバル変数と同じような役割があるわけですね。 moduleの最上に書くことで解決できました。 今回は誠にありがとうございました。おかげで助かりました。

その他の回答 (1)

  • ushi2015
  • ベストアンサー率51% (241/468)
回答No.1

こんにちは 何が分からないのでしょうか? 目的は、『excel_vbaでスクリーン上のpixelの色を拾いたい』ですか? はっきりとした具体的な目的は? OSは? 32ビット、64ビット?

chiku_sho
質問者

補足

作業環境は以下になります。 OS | Windows 10 64bit Soft | Excel2010 32bit 目的は「excel_vbaでスクリーン上のpixelの色を拾う」です。

関連するQ&A