dポイントプレゼントキャンペーン実施中!

初めて質問します。なので、情報が少なかったらすみません。
windows7 64bit Excel2010でVBAにトライしています。
その中で「GetAsynckeyState」関数を使用して、キーボードの入力を判定したく、
コードを書いたところ「GetAsynckeyStateはUser32.dll 内に見つかりません」という
エラーが発生しました。
下記がそのコードです。使用できるようにしたいのですがどうしたらいいでしょうか。ご教授お願いします
===================
Option Explicit

Private Declare Function GetAsynckeyState Lib "user32.dll" (ByVal vKey As Long) As Long

Sub test()

If GetAsynckeyState(38) <> 0 Then

Range("B1") = "●"

Else

Range("B1") = ""

End If


End Sub

====================

A 回答 (2件)

GetAsyncKeyの「Key」の「K」が小文字になっています。



ビギナーが必ず一度は引っ掛かる問題ですが、GetAsyncKeyは大文字小文字を区別します。一文字でも違うと、「見つかりません」と言われてしまいます。


それから、ご提示のコードは、一瞬で処理が終了してしまうため、正しくプログラムを走らせても、キー入力を検知できません。

この問題を解決するには、処理をループさせて、ユーザーがいつキーを押しても判定できる状態にしておく必要があります。
※ループにはまって抜け出せなくなったときはESCを押します。
また、戻り値は、押されてない時が0以上、押されている時が0未満ですので、<0として判定します。

例:

Sub test()
main:
If GetAsyncKeyState(38) < 0 Then
Range("B1") = "●"
MsgBox ("処理終了")
Exit Sub

Else
GoTo main:
End If
End Sub
    • good
    • 0
この回答へのお礼

おはずかしいかぎりです・・・直したところ、動作しました。
今後も気を付けたいと思います。ありがとうございますm(__)m

お礼日時:2014/03/06 12:22

APIの関数名は大文字・小文字を区別しますので、正しく記載してください。


× Private Declare Function GetAsynckeyState Lib "user32.dll" (ByVal vKey As Long) As Long
○ Private Declare Function GetAsyncKeyState Lib "user32.dll" (ByVal vKey As Long) As Long

参考URL:http://msdn.microsoft.com/ja-jp/library/cc364583 …
    • good
    • 0
この回答へのお礼

おはずかしいかぎりです・・・直したところ、動作しました。
今後も気を付けたいと思います。ありがとうございますm(__)m

お礼日時:2014/03/06 12:23

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!