• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:エラー13 型が一致しません)

エラー13 型が一致しません

このQ&Aのポイント
  • 氏名を入力するとフリガナが自動的に表示されますが、入力しないままフリガナに移動すると「エラー13 型が一致しません」というエラーが表示されます。
  • 修正しやすいように、フリガナを出した後にカーソルをフリガナの最後に移動する処理を追加しましたが、何も入力せずにフリガナに移動するとエラーが発生します。
  • 「エラー13 型が一致しません」というエラーを回避する方法を教えてください。

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

  • ベストアンサー
  • DexMachina
  • ベストアンサー率73% (1287/1744)
回答No.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

yakumo6969
質問者

お礼

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

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

その他の回答 (1)

  • DexMachina
  • ベストアンサー率73% (1287/1744)
回答No.1

Len関数は、引数(ご質問の場合では「.Value」)がNull(空白)の時には 文字数(数値)ではなくNullが返されるため、数値しか受け取れない SelStartに代入しようとしたところで「型が一致しません」というエラーに なったものと思います。 対策としては、Nullを他の値に変換するNz関数を使用します。 (現在) .SelStart = Len(.Value)  (変更後) .SelStart = Nz(Len(.Value),0) Nz関数の1番目の引数がNullの場合は、2番目の引数の値がNullの代わりに 使用されます。 これで、ご質問のエラーは発生しなくなると思います。

yakumo6969
質問者

お礼

ご返答ありがとうございます! その方法でまったくその通りになりました!本当にありがとうございます! できればエラーが発生せず、該当の住所はありませんみたいなメッセージだけを出して、そのままOKして抜け出せる感じでやりたいのですが。

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

関連するQ&A

  • Accessにコピペで郵便番号を入力した場合

    ACCESSについてのご質問です。 郵便番号を入力時、IMEの郵便番号辞書により 都道府県市町村名を自動表示させるようにしています。 郵便番号を入力後、カーソルが町名の最後にフォーカスするように 下記のようにVBAで書いています。 -------------------- ivate Sub 郵便番号_AfterUpdate() With Me!住所詳細 '住所詳細にフォーカスを移動 .SetFocus 'カーソルを最後に移動 .SelStart = Len(.Value) End With End Sub -------------------- これで、郵便番号を通常に入力したときは問題ないのですが、 コピペで貼り付けた場合、どうしてもエラーになってしまいます。 ------ 実行時エラー'13': 型が一致しません。 ------ このエラーを回避する方法はありませんでしょうか。 ご存知の方、お教えいただければ幸いです。

  • コンボボックス 選択後のカーソル制御

    ACCESS2007のデータベースを利用しています。 テキストボックス1、コンボボックス1、テキストボックス2が上から順に並んでおり、コンボボックス1で表示されるリストから一つを選ぶと、カーソルがテキストボックス2に遷移します。 (ACCESS2007のオプションの詳細設定のところで、フィールド移動時の動作をフィールドの先頭に移動)に設定しています。 コンボボックス1の選択後、コンボボックス1の先頭にカーソル移動するには、どのような処理をVBAに追加すればよいでしょうか? Private Sub コンボボックス1_AfterUpdate() テキストボックス1.SetFocus コンボボックス1.SetFocus With Me!コンボボックス1 .SelStart = 0 .SelLength = 0 End With End Sub ではうまく動作しませんでした。どうぞ宜しくお願い致します。

  • AccessVBA  SetFocusとGoToControlが正常に作動しない

    重複番号をチェックする機能を作っています。 重複番号が入力されると、エラーメッセージが出て、 OKを押すと番号を入れるテキストボックスにカーソルが移動し、空白にする、 という機能をつけましたが、 何度試してもカーソルが、隣のテキストボックスに移動してしまいます。 (エラーメッセージが出て、空白にするという動作は正常に行われます) SetFocusとGoToControlで試したのですが、 どちらも駄目でした。 原因が分かりません。 どなたかお分かりになりましたら、教えてください。 コードは下記のとおりです。 Private Sub AMコード_AfterUpdate() If DCount("AMコード", "Q_AM担当者登録チェック") >= 1 Then MsgBox ("すでに存在する番号です。別の番号を振りなおしてください。"), vbCritical, "番号重複" AMコード.SetFocus AMコード = "" End If End Sub

  • エクセルマクロのイベントプロシージャについて

     こにんちは。仕事で使う表をもっと便利にするため、独学でマクロを勉強、作成している者です。  さて、今回、ユーザーフォーム上に5つのテキストボックスを配置して(Textbox1~Textbox5)、Textbox1に入力した内容によってカーソルの移動先を変えるマクロを作成したいのですが、うまくいきません。  私の作成したコードは以下の通りです(今回、質問するにあたって、かなり省略しています)。 Private Sub TextBox1_AfterUpdate() Select Case TextBox1.Value Case 1 TextBox1.SetFocus Case 2 TextBox2.SetFocus Case 3 TextBox3.SetFocus Case 4 TextBox4.SetFocus Case Is >= 5 TextBox5.SetFocus End Select End Sub  そこで、いろいろ試したり調べたりしたのですが、どうもイベントプロシージャそのものに対する基本的な認識ができていない気がしてきました。  と言いますのも、上記プログラムを走らせると、1、2を入力した際はタブオーダーに従い?Textbox2へカーソルが移動しますが、3以上の数値を入力すると、4でも5でもTextbox3へ移動します。  何をやってもタブオーダー通りにしか移動しないのならともかく、なぜこのような変な動きになるのか、分かりやすく説明していただくことは可能でしょうか。  また、もちろんどうすれば目的通り動かせるのかも教えていただきたく思います。  もちろん一番の目的はそれなのですが、今後の理解のため、イベントのタイミング等について教えていただければ幸いです。  なお、各イベントの意味については、下記のページを見て理解はできたつもりなのですが・・・。  http://home.att.ne.jp/zeta/gen/excel/c04p30.htm

  • EXCEL VBAのユーザーフォームのコマンドボタンでBSキーと同様の役割を持たせる方法について

    すいません、EXCEL VBAで教えていただきたいことがあります。 EXCEL VBAでユーザーフォームを作る。 フォーム内にはTextBox1とCommandButton1を設置。 TextBox1に書き込んだ文字をドラッグ →CommandButton1を押す →ドラッグした文字を消去 という機能をコマンドボタンに持たせたいのですが 可能でしょうか。 下記のコードを作ってみたのですが、やはりこれだと一文字づつしか消せません。 よろしくお願いします。 Private Sub CommandButton1_Click() Dim i As Integer With Me.TextBox1 i = .SelStart If i > 0 Then .Text = Left(.Text, i - 1) & Mid(.Text, i + 1) .SelStart = i - 1 End If End With TextBox1.SetFocus End Sub

  • エクセルユーザーフォームのカーソル位置

    どうしても分からないのでお助け下さい(>_<) エクセルでユーザーフォームを作っています。 TextBox1に品番を入れたら、Label1に品名を表示させています。 このとき、TextBox1に存在しない品番を入力した場合は、 再度入れなおしをさせたいのです。 そこで、カーソルをもう一度TextBox1に持っていきたいのです。 しかし、どうやってもタブオーダーでTextBox1の次にあるTextBox2に カーソルが行ってしまいます。 どうしたらもう一度TextBox1にカーソルを持っていくことができますか? ちなみに品名を表示するモジュールを書いておきます。 このSetFocusが違うということは分かるのですが・・・。 Private Sub TextBox1_AfterUpdate() Dim tmp As Range, a a = Me.TextBox1.Value   Set tmp = Sheets(1).Columns(1).Find(a, , xlWhole)   If tmp Is Nothing Then     Me.Label1.Caption = "品番が誤っています。再度入力して下さい"     Me.TextBox1.SetFocus     Exit Sub   Else     Me.Label1 = tmp.Offset(0, 1)   End If End Sub

  • タブキー 自身のコントロールにフォーカスをあてたい

    タブキーで移動しても自身のコントロールにフォーカスをあてたい txt_検索文字と言うコントロールがあり、 txt_検索文字に文字を入力して、タブキーで移動すると、 Private Sub txt_検索文字_AfterUpdate() ’更新処理・・・ Me.Controls("txt_検索文字").SetFocus End Sub のイベントが発生するのですが、 タブキーを押してイベントが終わっても、再度、txt_検索文字のままにしたいのですが、 Me.Controls("txt_検索文字").SetFocus がきいてないようです。 他のコントロールにフォーカスが当たってしまいます。 ようは、タブキーを押してコントロールの更新イベントが発生しても、再度同じコントロールのままカーソルを充てる方法を教えてください。

  • VBAでのユーザーフォーム上でのタブオーダーの移動の方法

    やりたい事を以下に書きます。  ユーザーフォームで入力用のTEXTBOXがいくつかあり、TABINDEXが最初のTEXTBOXから順に入力していきます。  1つのTEXTBOXに入力完了後した場合、TABキーまたは、ENTERにより次のTEXTBOXにフォーカスが移動し、最後にコマンドボタンにを押すと入力が完了するというフォームを作っています。  ただし、最初のTEXTBOXに『99』を入力すると、途中のTEXTBOXへのフォーカスの移動はしないで最後のコマンドボタンにフォーカスが移動するようにしたいと考えています。 問題点を以下に書きます。  TEXTBOXの入力完了を現在、「AfterUpdate」イベントでつかまえて、TEXTBOXの値を取得し、その値が『99』だった場合、コマンドボタンにフォーカスを移動するようにコーディングしています。 こんな感じです。(かなり省略していますが、) Private Sub TextBox1_AfterUpdate() If TextBox1.Value = "99" Then CommandButton1.SetFocus Exit Sub End If End Sub この用にコーディングすると、TABINDEXが二つ後ろのTEXTBOXが入力待ち状態となってしまいます。 たとえば TEXTBOXが3つコマンドボタンが1つのフォームだと、 TEXTBOX1に『99』と入力し、上記のコーディングだと一度コマンドボタンにフォーカスが移動したあと、最後にTEXTBOX3にフォーカスが移動して入力待ち状態となる感じです。 色々試しましたが、解決方法が見つかりません。知っている方いましたら、教えてください。

  • ユーザーフォームのカーソル移動

    Excelのマクロでカーソル移動の事で教えて下さい。 フォームを表示するとTextBox1にカーソルが表示されます。 TextBox1で入力の判断しNG場合 カーソルを移動せずTextBox1に表示したいのですが CommandButton1に移動してしまいます。 (SetFocusでTextBox1を指定してNG) 【フォームの内容です】 TextBox1が1個 CommandButtonが2個存在します。 TextBox1のTabIndexは 0 CommandButton1のTabIndexは 1 CommandButton2のTabIndexは 2 【プログラムです】 Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean) If TextBox1 = "" Then MsgBox "NG"     TextBox1.SetFocus End If End Sub 宜しくお願い致します。

  • ACCESSで重複チェック後にフォーカスを移動したい

    Private Sub 会社名_AfterUpdate() ACCESS2003です。 フォーム上で入力後(更新後処理)に重複チェックをしています。 重複したときにエラーメッセージを出してフォーカスさせたいのです。 エラーメッセージまでは上手くいくのですが、フォーカスが移動してくれません。 どこが悪いのでしょうか? Private Sub 会社名_AfterUpdate() Dim i As Integer i = DCount("*", "tbl取引先", "会社名 ='" & Me.会社名 & "'") If i = 1 Then MsgBox [会社名] & " は登録済みです。" Me![会社名].SetFocus Cancel = True End If End Sub よろしくお願いします