- ベストアンサー
VBコードでバックカラーの変更がうまくできない??NO3
- VBコードを使用して、指定した要素のバックカラーを変更する処理がうまくいかない場合の対処方法を教えてください。
- バックカラーを変更する処理がエラーを引き起こしてしまう場合、適切な条件文とコードを使用することで問題を解決することができます。
- 関連URL:http://oshiete1.goo.ne.jp/kotaeru.php3?qid=418248, http://oshiete1.goo.ne.jp/kotaeru.php3?qid=418250
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
#1で回答した者です。 daisuke-123さんのプログラムで If Index = 1 Or 2 Or 3 Or 4 Or 5 Then という書き方では、Index = 1 又は 2 又は 3・・・ であって、Index = 1 or Index = 2 or Index = 3 ではありません(たぶん) ですから、どのピクチャーをクリックしてもこの条件を満たしてしまいます。 この場合、 If Index = 1 or Index = 2 or・・・・ Then と書くか、 '横反転 Select Case Index Case 1 To 5 '1~5の場合の処理 Case 6 To 10 '以下省略 End Select '縦反転 Select Case Index Case 1,6,11,16,21 '1,6,11,16,21の場合の処理 以下省略 End Select のように書けばよいと思います。 #1でも書きましたが、 このままでは、クリックしたピクチャーは2度反転しますので 2度反転しないようにしなければいけません。 縦反転の中に If Index = 1 Or Index = 6 Or Index = 11 Or Index = 16 Or Index = 21 Then If Index <> 1 Then If P1(1).BackColor = vbRed Then P1(1).BackColor = vbBlue Else P1(1).BackColor = vbRed End If End If If Index <> 6 Then If P1(6).BackColor = vbRed Then P1(6).BackColor = vbBlue Else P1(6).BackColor = vbRed End If End If '以下略 のようにすべての場所に「クリックしたピクチャーでなければ」という条件を入れます。 #1のプログラムは、1つ1つ書かないでいいように、For...Nextでまわしています。 プログラムでわからない所があれば、補足してください。 2度書きすみません。
その他の回答 (1)
- taisuke555
- ベストアンサー率55% (132/236)
間違っていたらすみません。 たぶん、クリックした場所が、2度反転されているのではないでしょうか。 以下にプログラムを作ってみましたので、参考にしてください。 Private Sub P1_Click(Index As Integer) Dim wrow As Integer Dim wcol As Integer Dim i As Integer wrow = Int((Index - 1) / 5) * 5 + 1 wcol = (Index - 1) Mod 5 + 1 '横列反転 For i = wrow To wrow + 4 If P1(i).BackColor = vbRed Then P1(i).BackColor = vbBlue Else P1(i).BackColor = vbRed End If Next i '縦列反転 For i = wcol To 20 + wcol Step 5 If (i <> Index) Then 'クリックしたピクチャーの2度反転防止 If P1(i).BackColor = vbRed Then P1(i).BackColor = vbBlue Else P1(i).BackColor = vbRed End If End If Next i End Sub おかしな所は、補足してくだされば修正します。
お礼
If Index = 1 or Index = 2 or・・・・ Then > と書き直すとうまくできました。 ご回答ありがとうございました。