VBAで特定のキーを押すとRGB(i+1,255,255)みたいに
キー入力が入るたびに1足したいです
ですが、今のコードでやるとFor文が無限にループしてしまいます
無知を承知で、どこが悪いのか、どういう仕組みにすべきなのか教えてください
本当に、無知ですみません
Private Sub UserForm_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
Dim i As Integer
If KeyCode = vbKeyLeft Then
For i = 0 To 255
Application.Wait (Now + TimeValue("0:00:03"))
Label1.Left = Label1.Left - 1
Label1.ForeColor = RGB(i, 0, 255)
End If
If KeyCode = vbKeyRight Then
For i = 0 To 255
Application.Wait (Now + TimeValue("0:00:03"))
Label1.Left = Label1.Left + 1
Label1.ForeColor = RGB(0, 255, i)
End If
If KeyCode = vbKeyUp Then
For i = 0 To 255
Application.Wait (Now + TimeValue("0:00:03"))
Label1.Top = Label1.Top - 1
Label1.ForeColor = RGB(255, i, 0)
End If
If KeyCode = vbKeyDown Then
For i = 0 To 255
Application.Wait (Now + TimeValue("0:00:03"))
Label1.Top = Label1.Top + 1
Label1.ForeColor = RGB(i, 0, 255)
End If
End Sub
あほは承知で
回答お願いします
A 回答 (6件)
- 最新から表示
- 回答順に表示
No.6
- 回答日時:
Forの無限ループはわかりませんけど、1つのlabelを色を変えて移動させても
>色がグラデーションのようになって欲しいんです
にはならないように思いますけどね。
検証はしてませんが、単に同じlabelが色を変えながら移動するだけでグラデーションのように残像現象みたいにはならないのでは?と。
No.5
- 回答日時:
やりたい事はこんなことでしょうか。
Private Sub UserForm_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
Static n
If KeyCode = vbKeyLeft Then
If n > 0 Then
n = n - 1
Label1.Left = n
Label1.ForeColor = RGB(0, 255, n)
End If
End If
If KeyCode = vbKeyRight Then
If n < 255 Then
n = n + 1
Label1.Left = n
Label1.ForeColor = RGB(0, 255, n)
End If
End If
End Sub
No.4
- 回答日時:
多分ウェイトとして「Application.Wait (Now + TimeValue("0:00:03"))」を使っていたのかなぁ?と思って残しましたが全く不要なので省きました。
※「Sample」マクロを実行して下さい。
※ 「←」「→」「↓」「↑」でラベルの位置が動きます。
※ 「E」「R」「F」「G」「V」「B」でラベルの背景色が変化します。
☆ 標準モジュールへ
Public T As Long '上
Public L As Long '左
Public R As Long '赤
Public G As Long '緑
Public B As Long '青
Sub Sample()
UserForm1.Show
End Sub
☆ フォームへ
Private Sub UserForm_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
Select Case KeyCode
Case vbKeyLeft
If L > 0 Then '「0」は適当に
L = L - 1
Else
L = 0 '「0」は適当に
End If
Case vbKeyRight
If L < 100 Then '「100」は適当に
L = L + 1
Else
L = 100 '「100」は適当に
End If
Case vbKeyUp
If T > 0 Then '「0」は適当に
T = T - 1
Else
T = 0 '「0」は適当に
End If
Case vbKeyDown
If T < 100 Then '「100」は適当に
T = T + 1
Else
T = 100 '「100」は適当に
End If
Case vbKeyR
If R < 255 Then R = R + 1
Case vbKeyE
If R > 0 Then R = R - 1
Case vbKeyG
If G < 255 Then G = G + 1
Case vbKeyF
If G > 0 Then G = G - 1
Case vbKeyB
If B < 255 Then B = B + 1
Case vbKeyV
If B > 0 Then B = B - 1
End Select
Label1.Left = L
Label1.Top = T
Label1.BackColor = RGB(R, G, B)
End Sub
No.3
- 回答日時:
字下げを付け忘れました。
(☆ フォームへ だけです)☆ フォームへ
Private Sub UserForm_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
Select Case KeyCode
Case vbKeyLeft
If L > 0 Then '「0」は適当に
L = L - 1
Else
L = 0 '「0」は適当に
End If
Case vbKeyRight
If L < 100 Then '「100」は適当に
L = L + 1
Else
L = 100 '「100」は適当に
End If
Case vbKeyUp
If T > 0 Then '「0」は適当に
T = T - 1
Else
T = 0 '「0」は適当に
End If
Case vbKeyDown
If T < 100 Then '「100」は適当に
T = T + 1
Else
T = 100 '「100」は適当に
End If
Case vbKeyR
If R < 255 Then R = R + 1
Case vbKeyE
If R > 0 Then R = R - 1
Case vbKeyG
If G < 255 Then G = G + 1
Case vbKeyF
If G > 0 Then G = G - 1
Case vbKeyB
If B < 255 Then B = B + 1
Case vbKeyV
If B > 0 Then B = B - 1
End Select
Label1.Left = L
Label1.Top = T
Label1.ForeColor = RGB(R, G, B)
Application.Wait (Now + TimeValue("0:00:03"))
End Sub
No.2
- 回答日時:
もしかしたら以下の様な事?
☆ 標準モジュールへ
Public T As Integer '上
Public L As Integer '左
Public R As Integer '赤
Public G As Integer '緑
Public B As Integer '青
☆ フォームへ
Private Sub UserForm_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
Select Case KeyCode
Case vbKeyLeft
If L > 10 Then '「10」は適当に
L = L - 1
Else
L = 10 '「10」は適当に
End If
Case vbKeyRight
If L < 100 Then '「100」は適当に
L = L + 1
Else
L = 100 '「100」は適当に
End If
Case vbKeyUp
If T > 10 Then '「10」は適当に
T = T - 1
Else
T = 10 '「10」は適当に
End If
Case vbKeyDown
If T < 100 Then '「100」は適当に
T = T + 1
Else
T = 100 '「100」は適当に
End If
Case vbKeyR
If R < 255 Then R = R + 1
Case vbKeyE
If R > 0 Then R = R - 1
Case vbKeyG
If G < 255 Then G = G + 1
Case vbKeyF
If G > 0 Then G = G - 1
Case vbKeyB
If B < 255 Then B = B + 1
Case vbKeyV
If B > 0 Then B = B - 1
End Select
Label1.Left = L
Label1.Top = T
Label1.ForeColor = RGB(R, G, B)
Application.Wait (Now + TimeValue("0:00:03"))
End Sub
No.1
- 回答日時:
For ~ Next 文は何をやりたいのでしょうか?
ちなみに「For」の数と「Next」の数が合いませんし…
下記のように字下げの習慣をつけると良いと思います。(何をやりたいか判らないので回答ではありません)
Private Sub UserForm_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
Dim i As Integer
If KeyCode = vbKeyLeft Then
For i = 0 To 255
Application.Wait (Now + TimeValue("0:00:03"))
Label1.Left = Label1.Left - 1
Label1.ForeColor = RGB(i, 0, 255)
Next←が必要?
End If
If KeyCode = vbKeyRight Then
For i = 0 To 255
Application.Wait (Now + TimeValue("0:00:03"))
Label1.Left = Label1.Left + 1
Label1.ForeColor = RGB(0, 255, i)
Next←が必要?
End If
If KeyCode = vbKeyUp Then
For i = 0 To 255
Application.Wait (Now + TimeValue("0:00:03"))
Label1.Top = Label1.Top - 1
Label1.ForeColor = RGB(255, i, 0)
Next←が必要?
End If
If KeyCode = vbKeyDown Then
For i = 0 To 255
Application.Wait (Now + TimeValue("0:00:03"))
Label1.Top = Label1.Top + 1
Label1.ForeColor = RGB(i, 0, 255)
Next←が必要?
End If
End Sub
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) ①ExcelVBAでカレンダーを作り、別のユザーフォームで日付を入力したいのですがエラーになります。 1 2023/02/17 18:39
- Visual Basic(VBA) VBAの繰り返し処理について教えてください。 3 2022/08/02 13:21
- Visual Basic(VBA) 【VBA】写真の貼り付けコードがうまく機能しません。 5 2022/09/01 18:43
- Visual Basic(VBA) Excel vbaについての質問 3 2023/04/18 16:14
- Excel(エクセル) 2つのVBAを一緒にしたら機能しなくなりました(エクセル) 7 2022/06/02 12:41
- Visual Basic(VBA) エクセル マクロ(A1:A10)までの中で一番多く出た数字をB10に表示 6 2023/04/25 17:01
- Excel(エクセル) VBAについて 3 2022/06/19 18:19
- Visual Basic(VBA) 実行時エラー´5854´ 文字列型パラメーターが長すぎます。 3 2023/06/08 21:17
- Visual Basic(VBA) VBA Userformで一部別シートに転記がしたいのですが 2 2023/05/24 13:08
- Excel(エクセル) エクセルVBAでオブジェクトが必要です 2 2022/09/10 16:37
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Form_Load と Form_Activate の...
-
ユーザーフォームを表示中にシ...
-
'ユーザーフォーム右上隅の[×...
-
エクセルVBAのフォームを最...
-
VBAで画像を表示する方法
-
モーダルフォームとモードレス...
-
Hideについて(.NET)
-
ユーザーフォームのテキストボ...
-
Microsoft Formsの「個人情報や...
-
クリックイベントなのに、2回ク...
-
ユーザーフォームのコピー?
-
ACCESSのフォーム、開くんです...
-
ExcelVBAのユーザーフォームの...
-
MSGBOXのフォント大きさ変更
-
複数モニタ使用時のフォームの...
-
Accessで、一つのフォーム画面...
-
指定の動作中ユーザーフォーム...
-
フォームに引数を渡す方法のやり方
-
フォームを最背面に設定したい...
-
ユーザーフォームのラベルに時...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ユーザーフォームを表示中にシ...
-
ExcelVBAのユーザーフォームの...
-
クリックイベントなのに、2回ク...
-
Microsoft Formsの「個人情報や...
-
ユーザーフォームのテキストボ...
-
【VBAユーザーフォームで閉じる...
-
モーダルフォームとモードレス...
-
VBAでユーザーフォームを再表示...
-
エクセルVBAのフォームを最...
-
MSGBOXのフォント大きさ変更
-
Form_Load と Form_Activate の...
-
ユーザーフォーム上に現在日時...
-
Excelにて、ユーザーフォームで...
-
Hideについて(.NET)
-
フォームウィンドウを最前面に...
-
コントロールの存在確認
-
VBA(エクセル)のユーザー...
-
'ユーザーフォーム右上隅の[×...
-
エクセルVBA フォーム上でOnkey...
-
ブックをCloseまたはQuitで閉じ...
おすすめ情報
回答ありがとうございます!
一番大事なとこ書いてませんでした申し訳ないです!
次から気をつけますね!
特定のキーが入力される度に色を変えたいというか
キーを長押しすると色がグラデーションのようになって欲しいんです
伝わるかな、、、?
押せば押すほどiが増えるから
色が変わるんじゃないかなって
説明するの難しいですね、、、
例えば◆があるとすれば
←を入力した際に色を微かに変えたいんです
そうするとRGBのグラデーションになる、と思ったんです
私の語彙力ではこれば精一杯です申し訳ありません
的外れかもしれませんけど
RGBよりHSVの方が良かったりするんですかね
返信遅くなり申し訳ありません!
その通りにやってみましたが
どうも左のキーを押した瞬間にループが止まらなくて
うわーーーーーってなりました、、、