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