|
亀マスターさん
ご回答ありがとうございます。
初心者につき、変数の取得、というのがよくわかっていませんが、色々ググって以下のように修正してみました。
が、”ユーザー定義型が定義されていません”というエラーがでます。
なぜでしょうか?
---
Declare Function GetAsyncKeyState Lib "User32.dll" (ByVal vKey As Long) As LongLong
Sub 練習()
Dim i As Integer
Dim j As Integer
i = 10
j = 10
Cells(i, j).Interior.ColorIndex = 6
Do
If GetAsyncKeyState(37) <> 0 Then
Cells(i, j).Interior.ColorIndex = xlNone
j = j - 1
Cells(i, j).Interior.ColorIndex = 6
End If
If GetAsyncKeyState(38) <> 0 Then
Cells(i, j).Interior.ColorIndex = xlNone
i = i - 1
Cells(i, j).Interior.ColorIndex = 6
End If
If GetAsyncKeyState(39) <> 0 Then
Cells(i, j).Interior.ColorIndex = xlNone
j = j + 1
Cells(i, j).Interior.ColorIndex = 6
End If
If GetAsyncKeyState(40) <> 0 Then
Cells(i, j).Interior.ColorIndex = xlNone
i = i + 1
Cells(i, j).Interior.ColorIndex = 6
End If
If GetAsyncKeyState(13) <> 0 Then
Exit Do
End If
Loop
End Sub
---
よろしくお願いいたします。
▼亀マスター さん:
>この手のプログラムを組むときは、次のようにループ処理で実現します。
>
>Do
>
> '押しているキーを取得
>
> 'キーコードに応じた動作
>
> 'ループを抜けるための処理
>
>Loop
>
>現在提示されたコードで問題なのは、
>1.ループしていないのでプログラム中で1回キーコードを判定したら終了する
>2.そもそも入力状況が取得できていない(?)
>
>入力状況の取得方法はいくつかありますが、Windows APIを使うのがわかりやすいと思います。
>ht tps://excel-excel.com/tips/vba_305.html
>
>なお、注意点として、ループ中にループを抜けるためのコードを入れておいてください。でないと、無限ループで終わらなくなります。
>ループを抜ける方法は何でもいいですが、エスケープキーが押されたら抜けるというのがよく見られます。
>If 【エスケープキーが押されている】 Then Exit Do
>という感じにすればいいでしょう。
>
>あと、VBEの設定で「変数の宣言を強制する」にチェックを入れておいた方がいいですよ。
>これを入れておくと、コード中に「Option Explicit」が自動で入り、未定義の変数を使用するとエラーが発生してわかるようになりますが、変数を強制しない状態はバグの温床になります。
>実際、
>Select Case keycode
>の「keycode」って、どこにも宣言してませんよね?
|
|