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
Sub test_0314_KABUKA_GET_TEST()
'銘柄コードの入力
Dim strCODE As String '銘柄コード受け取り用
strCODE = InputBox("銘柄コード", "コード入力", "6723") '手抜きでInputBox関数を使用
'IEを起動して、Yahooファイナンスのページを表示する
Dim objIE As Object 'IEオブジェクト参照用
Set objIE = CreateObject("InternetExplorer.application") 'IEのオブジェクトを作る
objIE.Visible = True '見えるようにする(お約束)
'.Navigate で 指定した文字列のURLを開く
objIE.Navigate "http://stocks.finance.yahoo.co.jp/stocks/detail/?code=" & strCODE
'表示終了まで待つ .Busy(忙しい)間 と.ReadyState(ステータス)が4以外の時 ループ
Do While objIE.Busy = True
DoEvents '特に何もしないで.Busyの状態が変わるまで待つ
Loop
Do While objIE.ReadyState <> 4
DoEvents '特に何もしないで.ReadyStateの状態が4に変わるまで待つ
Loop
'DTデータから[始値] などを探す
Dim objParent As Object '親のタグ オブジェクト
Dim objTagSTRONG As Object 'STRONG の タグを保存する変数
'.tags("DT") で DTタグを抜き出す
Dim objDT As Object 'DTの格納用
Set objDT = objIE.document.all.tags("DT") '.tags("DT")でDTタグを抜く
'いろいろなループを作れるけど、カウンタ n でまわしてみる
Dim n As Integer
Dim x As Integer
Dim BOX As Variant
BOX = Array("始値", "安値", "高値", "出来高")
For n = 0 To objDT.Length - 1 'カウンタ0から.length - 1 までまわす。
For x = 0 To 3
If Left(objDT(n).InnerHTML, 1 + Len(BOX(x))) = BOX(x) & "<" Then '[始値<]を探す
Set objParent = objDT(n).parentElement '親オブジェクトを代入
'次にSTRONG 強調表示の値を探す
Set objTagSTRONG = objParent.all.tags("STRONG") '.tags("STRONG")でSTRONGタグを抜く
'値の表示
Debug.Print BOX(x) & " = " & objTagSTRONG.Item(0).InnerText 'STRONG タグ のテキスト
End If
Next x
Next n
'終了処理
'後始末(使った食器はキレイにしてから戸棚に戻そうね)
Set objDT = Nothing
'objIE.Quit '終了処理 ← テストで残したかったので、コメントにした。
'Set objIE = Nothing
MsgBox "終了しました"
End Sub
ポイントは、
BOX = Array("始値", "安値", "高値", "出来高")
で、変数BOXを文字列で初期化します。
For n = 0 To objDT.Length - 1 'カウンタ0から.length - 1 までまわす。
あとは、0から3のループを作り、
For x = 0 To 3
If Left(objDT(n).InnerHTML, 1 + Len(BOX(x))) = BOX(x) & "<" Then
↑BOX(x)を使用して、条件文を変更しました。
Set objParent = objDT(n).parentElement '親オブジェクトを代入
'次にSTRONG 強調表示の値を探す
Set objTagSTRONG = objParent.all.tags("STRONG") '.tags("STRONG")でSTRONGタグを抜く
↑ここは、変わりなく、単純に親タグからSTRONGを探してます。
'値の表示
Debug.Print BOX(x) & " = " & objTagSTRONG.Item(0).InnerText
↑ここは、見出しの文字を Box(x) で使用してます。
End If
Next x
Next n
読者の声で 初めから 書けよ。。。と言われそうな。。。
03/14 Array 関数を使用して処理をまとめる http://www.youtube.com/watch?v=Faq5AuMRliA