| 
    
     |  | ▼佐藤 さん: こんにちは。
 
 >ユーザーホームでタイピングソフトを作ろうと思っているんですが、なにせ初心者ですのでどういった手順でマクロを組んでいいのかわかりません。
 >・スタートボタンを押すと問題文がでる
 >・文字を打ち、あっていればその文字の色がかわり、間違っていれば別の色にかわり、その先には進めない
 >・問題文の種類は10種類くらい
 >・打つ文字はA〜Zまでのアルファベット
 >・最後に終わるボタンを押すと間違ったアルファべットがでてくる
 >
 >といった感じのマクロがあれば、それをベースに勉強できるのですが、どなたか作ってくれませんか?
 ちょっとだけ、表現の仕方がまずかったかなあ・・・・。
 
 「ここまでは、このように出来たのですが、ここの個所の方法がわかりません」
 というだぐいのコードを載せた質問にされた方がよかったかなあ・・と、思います。
 でも、演習問題だと思えば、回答投稿の価値ありと考える方もいるかと思いますが・・。
 
 ユーザーフォームにコマンドボタンを二つ用意して下さい。
 ユーザーフォーム 名前---Userform1
 コマンドボタン オブシェクト名--Commandbutton1---問題表示用
 コマンドボタン オブジェクト名--Commandbutton2---タイピングログ表示用
 
 標準モジュールに
 '=====================================================
 sub main()
 userform1.show
 end sub
 
 Userform1のモジュールに
 
 '=====================================================
 Dim mondai As Variant
 Dim m_idx As Long
 Dim c_idx As Long
 Dim logstr As String
 '=====================================================
 Private Sub CommandButton1_Click()
 Dim lbl As MSForms.Label
 If m_idx > -1 Then
 For idx = 1 To Len(mondai(m_idx))
 Controls.Remove "label" & idx
 Next
 End If
 m_idx = IIf(m_idx >= UBound(mondai), 0, m_idx + 1)
 For idx = 1 To Len(mondai(m_idx))
 Set lbl = Controls.Add("Forms.Label.1", "label" & idx, True)
 With lbl
 .Top = 40
 .Left = idx * 12.5 + 20
 .Width = 12.5
 .Height = 24
 .Font.Name = "MS ゴシック"
 .Font.Size = 24
 .Caption = Mid(mondai(m_idx), idx, 1)
 End With
 Next idx
 c_idx = 1
 Controls("loglbl").Caption = ""
 logstr = ""
 End Sub
 '===============================================
 Private Sub CommandButton2_Click()
 Controls("loglbl").Caption = logstr
 End Sub
 '===============================================
 Private Sub UserForm_Initialize()
 'ここでは、コントロールのプロパティを設定していますが、
 'これは、事前設定で可能です
 
 With Me
 .Width = 350
 .Height = 250
 End With
 btncap = Array("問題表示", "ログ表示")
 For idx = 1 To 2
 With Controls("commandbutton" & idx)
 .TabStop = False
 .TakeFocusOnClick = False
 .Caption = btncap(idx - 1)
 .Left = (idx - 1) * 78 + 32.5
 .Top = Me.Height - 100
 .Width = 78
 .Height = 36
 End With
 Next
 Set lbl = Controls.Add("Forms.Label.1", "loglbl", True)
 With lbl
 .Top = 80
 .Left = 32.5
 .Width = 250
 .Height = 28
 .Font.Name = "MS ゴシック"
 .Font.Size = 24
 .BackColor = &HFFFFFF
 .SpecialEffect = 2
 End With
 mondai = Array("cat", "dog", "cow", "lion", "tiger", "monkey")
 m_idx = -1
 End Sub
 '=====================================================================
 Private Sub UserForm_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
 If m_idx > -1 Then
 If Mid(mondai(m_idx), c_idx, 1) = Chr(KeyAscii) Then
 Controls("label" & c_idx).ForeColor = &HFF0000
 If c_idx <= Len(mondai(m_idx)) Then c_idx = c_idx + 1
 End If
 logstr = logstr & Chr(KeyAscii)
 End If
 End Sub
 
 
 以上です。mainを実行して試してみて下さい。
 
 >そこから時間を計ったり、いろいろと発展させていこうと考えてます。
 
 これが少しでも参考になればよいのですが・・。
 ちょっと前に、子供に試させたら
 「つまんない!!絵もないし、音もない」って言われました!!
 
 |  |