Powerpoint VBA パワーポイントで元素記号タイピング
元素記号を20番目まで覚える。
これは,とても頭が痛い悩みなんですが,化学を学ぶ上でどうしても避けるわけにはいかない内容です。
自分が高校生の頃よりは少しましなのは,
www.youtube.com
以前NHKでエレメントハンターという番組がありました。そのテーマになっているこの曲があるので導入はしやすい。
でも,とにかく覚えないといけない,という現実は変わりません。
どうしようかなぁ,自分にできる手立てはないかなぁと思い,思いついたのはタイピング。
まだまだプロトタイプですが,ちょっと作ってみました。
時間を測定してタイムアタックをするとかしないと何度もやる気は起きません。
タイムアタック機能を作れば,一部の子にはたぶん闘争心が生まれますので,一部の子には役に立つものになる気がしますし,
単純にタイピングの訓練の場が今の高校生には不足していますので,その一つとしても意義が無くもない。
はたまた別のアプローチとして3拓問題を作って,何度も繰り返すことで定着を図るとか,いろんな手はありますね。。
やっぱブログにネタとして書こうとすると,書きながらいろいろなアイディアが出ます。
なんとか今年も書かないと!
時間を作るよう努力しようと思っています。
コード
Side1 テキストボックスのChangeイベントを使います。
Option Explicit Private Sub TextBox1_Change() Call 元素チェック End Sub
標準モジュール
Option Explicit Public 原子番号 As Long Public 元素(1 To 20) As String, 位置(1 To 20) As String Public 元素記号表 As Table Const TypingText As String = "H_11,He_18,Li_21,Be_22,B_23,C_24,N_25,O_26" & _ ",F_27,Ne_28,Na_31,Mg_32,Al_33,Si_34,P_35,S_36,Cl_37,Ar_38,K_41,Ca_42" Sub 元素記号タイピング() Dim TargetSlide As Slide: Set TargetSlide = ActivePresentation.Slides(1) Set 元素記号表 = TargetSlide.Shapes("元素記号表").Table Dim i As Long For i = 1 To 20 元素(i) = Split(Split(TypingText, ",")(i - 1), "_")(0) 位置(i) = Split(Split(TypingText, ",")(i - 1), "_")(1) Next Slide1.TextBox1.Text = "" 原子番号 = 1 Dim c As Cell For i = 1 To 4 For Each c In 元素記号表.Rows(i).Cells c.Shape.Fill.Visible = msoFalse Next Next End Sub Sub 元素チェック() If 原子番号 = 0 Or 原子番号 = 21 Then Call 元素記号タイピング Exit Sub End If Dim 元素長さ As Long 元素長さ = Len(元素(原子番号)) Dim 行 As Long, 列 As Long 行 = CLng(Left(位置(原子番号), 1)) 列 = CLng(Right(位置(原子番号), 1)) If Right(Slide1.TextBox1.Text, 元素長さ) = 元素(原子番号) Then 元素記号表.Cell(行, 列).Shape.Fill.ForeColor.RGB = vbYellow 原子番号 = 原子番号 + 1 End If If 原子番号 = 21 Then MsgBox ("おつかれさま!") End If End Sub
動画
まぁ今の段階では,極めてまじめでやる気がある子しかやってくれないものなので,もちょいシステム側をきちんとしないといけません。
時間を計る機能は絶対(シツコイデスネ)
いろいろと腑に落ちないことと,やり方がわからないこと,改善すべきことがあります。
一つ目は ActiveXのテキストボックスにフォーカスを自動的に持っていく方法がわかりません。あるのかな。。?これができないとちょいつらい
二つ目は 今は元素記号が大文字1文字か,大文字と小文字のセットだよというのにこだわり,きちんと大文字にしないと認識しませんが,これだとめんどい。
シフト押す回数が多く,タイムアタックさせるとするなら,やる気をなくす要素になります。これはLike演算子で比較させて小文字でもなんとかなるようにすべきかなぁ。
三つめは腑に落ちないこと。タイピングスタートのボタンを押してもリセット処理がされないことがあります。なんでかよくわかりません。
四つ目は時間をどうやろうかなぁですね。タイマー作ったときにやったAPIのSetTimerとか持ってこないといけないかなぁと思っています。
まぁ何はともあれ,形にはしてみたいですね。。
数人でも食いつくものが作れれば,それで追加教材としては十分ですから(;´▽`A``