質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

マクロ

定義された処理手続きに応じて、どのような一連の処理を行うのかを特定させるルールをマクロと呼びます。

Q&A

1回答

1935閲覧

VBAマリオを作成中にExcelがフリーズする

KM46

総合スコア17

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

マクロ

定義された処理手続きに応じて、どのような一連の処理を行うのかを特定させるルールをマクロと呼びます。

0グッド

0クリップ

投稿2020/02/18 05:26

エクセルの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で作成しています。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

作りがよくわかりませんが、Do~Loopで条件に達するまでループさせる作りであるなら、DoEventsを追加すれば固まることは防げると思います。

VBA

1 Do While i < 430 2 DoEvents 3 If GetAsyncKeyState(vbKeyRight) Then

投稿2020/02/18 06:38

ttyp03

総合スコア16998

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問