| 
    
     |  | ▼ichinose さん: >▼佐藤 さん:
 >こんにちは。
 >
 >>ユーザーホームでタイピングソフトを作ろうと思っているんですが、なにせ初心者ですのでどういった手順でマクロを組んでいいのかわかりません。
 >>・スタートボタンを押すと問題文がでる
 >>・文字を打ち、あっていればその文字の色がかわり、間違っていれば別の色にかわり、その先には進めない
 >>・問題文の種類は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を実行して試してみて下さい。
 >
 >>そこから時間を計ったり、いろいろと発展させていこうと考えてます。
 >
 >これが少しでも参考になればよいのですが・・。
 >ちょっと前に、子供に試させたら
 >「つまんない!!絵もないし、音もない」って言われました!!
 
 実行できました。今後はエンターを押したら次ぎへ進む。タイマー機能をつくる。
 タイピング結果を表示できるようにする。
 といったことをしていきたいと思ってます。
 ありがとうございました。
 
 
 |  |