Private Sub 詳細_Format(Cancel As Integer, FormatCount As Integer)
If (Me![cntA] Mod 3) = 1 Then '左端なら
'フラグを使用して可視/不可視をセットする
Me![lab01].Visible = Not pFLG 'ラベルはフラグの逆をセット
Me![lab02].Visible = Not pFLG
'実データ
Me![ID].Visible = pFLG '実データにはフラグそのままセット
Me![WrietTime].Visible = pFLG
Me![F_TITLE].Visible = pFLG
Me![F_MEMO].Visible = pFLG
If pFLG = False Then 'まだラベルエリアを印刷してなかったら
Me.NextRecord = False 'レコードの移動をまず止める
pFLG = True '印刷フラグを立てる
End If
Else
pFLG = False 'その他の時
End If
End Sub
Sub AAA()
Msgbox "チエちゃん好き"
Msgbox "ミキちゃん好き"
Msgbox "アキちゃん好き"
Msgbox "マイちゃん好き"
End Sub
じゃなくって、
Sub BBB()
Dim strNAME As Variant
Dim n As Integer
'配列を代入
strNAME = Array("チエ", "ミキ", "アキ", "マイ")
'データを表示
For n = 0 To 3
MsgBox strNAME(n) & "ちゃん好きです"
Next n
End Sub
と、ループとArrayで配列を作成の知識のある人は作るかな。
/*
* 4.配列の要素数を返すUBound関数を使ったりする
*/
表示させたい、好きな子が増えたら?
コピー君は、
Sub AAA()
Msgbox "チエちゃん好き"
Msgbox "ミキちゃん好き"
Msgbox "アキちゃん好き"
Msgbox "マイちゃん好き"
Msgbox "アヤちゃん好き" '午後の紅茶のアヤちゃんは好きじゃないけど(笑)
End Sub
とコピーで作成するのかな。
For君は、
Sub BBB()
Dim strNAME As Variant
Dim n As Integer
'配列を代入
strNAME = Array("チエ", "ミキ", "アキ", "マイ", "アヤ")
'データを表示
For n = 0 To 4 'カウンタも忘れずに増やす
MsgBox strNAME(n) & "ちゃん好きです"
Next n
End Sub
Sub CCC()
Dim strNAME As Variant
Dim n As Integer
'配列を代入
strNAME = Array("チエ", "ミキ", "アキ", "マイ", "アヤ", "STOP")
'stopまでデータを表示
n = 0 'カウンタ初期化
While strNAME(n) <> "STOP" 'STOP以外の間ループする
MsgBox strNAME(n) & "ちゃん好きです"
n = n + 1 'カウントアップ次の子にする
Wend
End Sub
Sub DDD()
Dim strNAME As Variant
Dim n As Integer
'配列を代入
strNAME = Array("チエ", "ミキ", "アキ", "マイ", "アヤ")
'データを表示
For n = 0 To UBound(strNAME) '配列の最大要素までループ
MsgBox strNAME(n) & "ちゃん好きです"
Next n
End Sub
Private Sub 詳細_Format(Cancel As Integer, FormatCount As Integer)
If (Me![cntA] Mod 3) = 1 Then '左端なら
'フラグを使用して可視/不可視をセットする
Me![lab01].Visible = Not pFLG 'ラベルはフラグの逆をセット
Me![lab02].Visible = Not pFLG
'実データ
Me![ID].Visible = pFLG '実データにはフラグそのままセット
Me![WrietTime].Visible = pFLG
Me![F_TITLE].Visible = pFLG
Me![F_MEMO].Visible = pFLG
If pFLG = False Then 'まだラベルエリアを印刷してなかったら
Me.NextRecord = False 'レコードの移動をまず止める
pFLG = True '印刷フラグを立てる
End If
Else
pFLG = False 'その他の時
End If
End Sub
Private Sub 詳細_Format(Cancel As Integer, FormatCount As Integer)
Dim n As Integer
If (Me![cntA] Mod 3) = 1 Then '左端なら
For n = 0 To Me.Controls.Count - 1 'コントロールの数ループする
If Left(Me.Controls(n).Name, 3) = "lab" Then '名前はラベル
Me.Controls(n).Visible = Not pFLG
Else
Me.Controls(n).Visible = pFLG
End If
Next n
If pFLG = False Then 'まだラベルエリアを印刷してなかったら
Me.NextRecord = False 'レコードの移動をまず止める
pFLG = True '印刷フラグを立てる
End If
Else
pFLG = False 'その他の時
End If
End Sub
と書いて、
コントロールの名前付けの規則でTrue/False
を
切り替える方法も1つの手です。
Me.Controls(n).Visible
あっ、これが三流君のうわさのクセね。
ループのカウンタでまわしたがるってヤツね。
VBA系の
No.73 オブジェクトのループはFor Each In でループさせる
http://www.ken3.org/backno/backno_vba15.html#73
で、
偉そうなこと語ってて、これかよ。
~~~~~~~~~~~~~~~~~~~~
わかったよ、一般向けにFor Each版に修正するよ。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Private Sub 詳細_Format(Cancel As Integer, FormatCount As Integer)
Dim objITEM As Object 'コントロールのオブジェクトを入れる変数
If (Me![cntA] Mod 3) = 1 Then '左端なら
For Each objITEM In Me.Controls 'コントロールを取り出しループする
If Left(objITEM.Name, 3) = "lab" Then '名前はラベル
objITEM.Visible = Not pFLG
Else
objITEM.Visible = pFLG
End If
Next
If pFLG = False Then 'まだラベルエリアを印刷してなかったら
Me.NextRecord = False 'レコードの移動をまず止める
pFLG = True '印刷フラグを立てる
End If
Else
pFLG = False 'その他の時
End If
End Sub