• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:うまくできない??NO3)

VBコードでバックカラーの変更がうまくできない??NO3

このQ&Aのポイント
  • VBコードを使用して、指定した要素のバックカラーを変更する処理がうまくいかない場合の対処方法を教えてください。
  • バックカラーを変更する処理がエラーを引き起こしてしまう場合、適切な条件文とコードを使用することで問題を解決することができます。
  • 関連URL:http://oshiete1.goo.ne.jp/kotaeru.php3?qid=418248, http://oshiete1.goo.ne.jp/kotaeru.php3?qid=418250

質問者が選んだベストアンサー

  • ベストアンサー
回答No.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度書きすみません。

daisuke-123
質問者

お礼

If Index = 1 or Index = 2 or・・・・ Then > と書き直すとうまくできました。  ご回答ありがとうございました。

その他の回答 (1)

回答No.1

間違っていたらすみません。 たぶん、クリックした場所が、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 おかしな所は、補足してくだされば修正します。

関連するQ&A