電子書籍の厳選無料作品が豊富!

Private Sub 招待者氏名_AfterUpdate()
With Me!招待者フリガナ
'住所にフォーカスを移動
.SetFocus
'カーソルを最後に移動
.SelStart = Len(.Value)
End With
End Sub

氏名を入れたらフリガナを自動で出しています。
変換しづらい名前を入力する際、一文字ずつ打った後フリガナを手動で修正しています。
「祭子」を「まつりこ」で変換し、フリガナを「サイコ」に修正するなど。

修正しやすいように、フリガナを出したあと、
カーソルをフリガナの最後に移動するようにしました。

そこまではうまくいったのですが、氏名になにも入力をせずに
フリガナに移動したら、「エラー13 型が一致しません」とでます。

これを回避、抜け出す方法を教えていただきたいのですが。

宜しくお願いいたします。

A 回答 (2件)

No.1です。



> エラーが発生せず、該当の住所はありませんみたいなメッセージだけを出して、
> そのままOKして抜け出せる感じ

「住所」は「招待者フリガナ」の間違い、でよろしいでしょうか?
そうであれば、とりあえず、
 1)氏名が空欄
 2)氏名は埋まっているがフリガナが空欄
 3)両方とも一応埋まっている
という場合が考えられると思いますので、それぞれを場合分けすることになります。
(Access2003で今確認した限りではCopy&Pasteの場合でも、対応するフリガナが
 設定されたのですが、以前Access2000辺りで確認した際はPasteだとフリガナが
 設定されなかったような気がするので・・・)

具体的には、以下の通りです;
(なお、今回の回答では、招待者フリガナ.ValueがNullの場合がIf文で既に切り分け
 済みなので、前回回答したNz関数は必要なくなります)

Private Sub 招待者氏名_AfterUpdate()
If IsNull(招待者氏名) Then
  '「招待者氏名」の値が削除された場合
  MsgBox "招待者氏名を入力して下さい。"
Else
  '「招待者氏名」が入力された場合
  With 招待者フリガナ
    .SetFocus
    If IsNull(招待者フリガナ) Then
      'フリガナが空欄だった場合
      MsgBox "フリガナを入力して下さい。"
    Else
      'フリガナが設定された場合
      .SelStart = Len(.Value)
    End If
  End With
End If
End Sub
    • good
    • 0
この回答へのお礼

分かりやすいご説明本当に感謝いたします!
無知なりにもできるとワクワクしますねw

ほんとにありがとうございます!

お礼日時:2007/07/10 10:42

Len関数は、引数(ご質問の場合では「.Value」)がNull(空白)の時には


文字数(数値)ではなくNullが返されるため、数値しか受け取れない
SelStartに代入しようとしたところで「型が一致しません」というエラーに
なったものと思います。

対策としては、Nullを他の値に変換するNz関数を使用します。

(現在)
.SelStart = Len(.Value) 
(変更後)
.SelStart = Nz(Len(.Value),0)

Nz関数の1番目の引数がNullの場合は、2番目の引数の値がNullの代わりに
使用されます。
これで、ご質問のエラーは発生しなくなると思います。
    • good
    • 0
この回答へのお礼

ご返答ありがとうございます!

その方法でまったくその通りになりました!本当にありがとうございます!

できればエラーが発生せず、該当の住所はありませんみたいなメッセージだけを出して、そのままOKして抜け出せる感じでやりたいのですが。

お礼日時:2007/07/09 13:17

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す