• ベストアンサー

Mid関数(2)

VB6.0でタイピングソフトを作成しています。KeyPressの入力判定で、入力された文字とLabel1に表示されている文字が一緒なら、その文字を消すという処理なんですが、 Private Sub Form_KeyPress(KeyAscii As Integer) Label1.Caption = "taipingu" If Mid(Label1.Caption, z, 1) = Chr(KeyAscii) Then Dim ss As String ss = Label1.Caption Mid(ss, z, 1) = " " Label1.Caption = ss z = z + 1 End if というやり方を教えていただいてやってみたのですが、 「If Mid(Label1.Caption, z, 1) = Chr(KeyAscii) Then」の部分で 「プロシージャの呼び出し、または引数が不正です」 というエラーが出てしまいます。しかも、このエラーが出ずに実行がうまくいくときもあります。 何故このエラーが出るのか、分かる方お願いします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.4

プロジェクトの参照で、「参照不可」のものがあると Mid関数やFormat関数等がエラーになる場合があります。 この場合、「参照不可」の項目を参照しなおすと直ります。

すると、全ての回答が全文表示されます。

その他の回答 (5)

  • Ishiwara
  • ベストアンサー率24% (462/1914)
回答No.6

z 以外に容疑者はいないと思いますが‥ if 文の前に、例えば z=z のような式を置き、if 文でブレーク(一時停止)させて、そのつど z や keyascii をチェックしてみては? また、余計なおせっかいですが、なぜ typing でなく taipingu なのでしょう?

すると、全ての回答が全文表示されます。
回答No.5

こんばんは No.2です。 最終文字(8文字目)を処理した後に加算しているので、Z = 9 になると思います。ですが If Mid(Label1.Caption, z, 1) = Chr(KeyAscii) Then では 9文字目 の検査をしてもエラーは発生しませんでした。 何故エラーになるのか私にもわからなくなりました。お役に立てず申し訳ないです。

すると、全ての回答が全文表示されます。
回答No.3

こんにちは z = z + 1 で z の値が Label1.Caption = "taipingu" の長さを超えてしまったのではありませんか?

sikimori
質問者

補足

zの値を適当に貼り付けたラベルの表示させてみたら、 (今の場合"taipingu") z = 8でした。 いろいろ変えて試したところ、zがLabel1.Captionに書かれている文字列を超えることはありませんでした。

すると、全ての回答が全文表示されます。
noname#140971
noname#140971
回答No.2

Private Sub Form_Load()   Me.Label1.Caption = "typing" End Sub Private Sub Form_KeyPress(KeyAscii As Integer)   Me.Label1.Caption = Replace(Me.Label1.Caption, Chr(KeyAscii), "_") End Sub と、1行で事足りるかと思いますが・・・。 Private Sub Form_KeyPress(KeyAscii As Integer)     Dim I As Integer     Dim L As Integer     Dim C As String     Dim S As String     S = Label1.Caption     C = Chr(KeyAscii)     L = Len(S)     For I = 1 To L         If Mid(S, I, 1) = C Then             Mid(S, I, 1) = " "         End If     Next I     Label1.Caption = S End Sub 多分、このような回答だったんではないでしょうか?

sikimori
質問者

補足

すいません・・・。少し書き足りないコードがありました。 Private Sub Form_KeyPress(KeyAscii As Integer) Label1.Caption = "taipingu" If Mid(Label1.Caption, z, 1) = Chr(KeyAscii) Then Dim ss As String ss = Label1.Caption Mid(ss, z, 1) = " " Label1.Caption = ss z = z + 1 Else Label2.Caption = "違う文字です" End if でした。 書いていただいたコードの2つ目のような処理をまさにやりたいのです。 ただ、「Me.Label1.Caption = Replace(Me.Label1.Caption, Chr(KeyAscii), "_")」 の処理をif文を使って私の書いたコードに組み込むにはどうやったらいいのでしょう・・・?

すると、全ての回答が全文表示されます。
  • fly_moon
  • ベストアンサー率20% (213/1046)
回答No.1

zの初期化は行ってますか? zは0からではなく1から開始させる必要があるのはわかりますよね? タイピングを始める前のタイミングのイベントで初期化を行っていないように思えます。載せてあるソース以外の部分の設計ミスでは?

sikimori
質問者

補足

zはform_Load時に1に初期化しています。 このエラーが出るまでの処理には間違いはない様に思います。

すると、全ての回答が全文表示されます。

関連するQ&A