エクセルのvbaで、マリオを左右に動かしたい。
エクセルのvbaを使ってマリオを再現しているのですが、
該当するマクロを実行し一定時間経つとExcelが固まってしまいます。
仕組みとしては、セルをドットに見立てて事前にイラストを作成し、
特定のキーボードが入力されたらそのイラストをcopyで貼り付け、
パラパラ漫画のように動いてるようにしています。
該当のソースコード
vba
1Option Explicit 2Private Declare Function GetAsyncKeyState Lib "User32.dll" (ByVal vKey As Long) As Long 3Private Declare Sub Sleep Lib "kernel32" (ByVal ms As Long) 4 5 6Sub MarioMove() 7 8Dim marioR1 As String 9marioR1 = "A1:Y16" 10Dim marioR2 As String 11marioR2 = "A19:Y34" 12Dim marioR3 As String 13marioR3 = "A37:Y52" 14 15Dim marioL1 As String 16marioL1 = "AB1:AZ16" 17Dim marioL2 As String 18marioL2 = "AB19:AZ34" 19Dim marioL3 As String 20marioL3 = "AB37:AZ52" 21 22Dim i As Integer 23Dim high As Integer 24Dim speed As Integer 25Dim time As Integer 26 27high = 159 28speed = 3 29time = 1 30i = 1 31 32'Sheets("ちびマリオ").Range(marioR1).Copy Sheets("ステージテスト").Cells(high, i) 33 34 Do While i < 430 35 If GetAsyncKeyState(vbKeyRight) Then 36 'Sleep time 37 i = i + speed 38 Sheets("ちびマリオ").Range(marioR1).Copy Sheets("ステージテスト").Cells(high, i) 39 'Sleep time 40 i = i + speed 41 Sheets("ちびマリオ").Range(marioR3).Copy Sheets("ステージテスト").Cells(high, i) 42 'Sleep time 43 i = i + speed 44 Sheets("ちびマリオ").Range(marioR2).Copy Sheets("ステージテスト").Cells(high, i) 45 ElseIf GetAsyncKeyState(vbKeyLeft) Then 46 'Sleep time 47 i = i - speed 48 Sheets("ちびマリオ").Range(marioL1).Copy Sheets("ステージテスト").Cells(high, i) 49 'Sleep time 50 i = i - speed 51 Sheets("ちびマリオ").Range(marioL3).Copy Sheets("ステージテスト").Cells(high, i) 52 'Sleep time 53 i = i - speed 54 Sheets("ちびマリオ").Range(marioL2).Copy Sheets("ステージテスト").Cells(high, i) 55 ElseIf GetAsyncKeyState(vbKeyLButton) Then 56 GoTo continue 57 End If 58 Loop 59continue: 60End Sub
試したこと
キーボードに何も入力せず、何も操作しなくとも固まりました。
補足情報(FW/ツールのバージョンなど)
Windows10、Excel 2010で作成しています。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。