- ベストアンサー
VBA初心者の質問:変数の反転と修飾子の不正なエラー
- VBA初心者が変数の反転と修飾子の不正なエラーについて質問します。実行すると変数が反転し、「修飾子が不正です」とエラーが出ます。直接指定すると問題はないのですが、なぜ変数を使うとエラーが起きるのかわかりません。
- この質問では、VBA初心者が変数の反転と修飾子の不正なエラーについて説明します。実行すると、変数の値が反転してしまい、「修飾子が不正です」というエラーが表示されます。直接指定するとエラーは起きないので、なぜ変数を使うとエラーが生じるのか疑問です。
- VBA初心者が変数の反転と修飾子の不正なエラーについて質問します。実行すると、変数の値が反転し、それによって「修飾子が不正です」というエラーが発生します。変数を使用しないで直接指定するとエラーは出ないので、変数を使うとエラーが生じる理由がわかりません。
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
フォームのTextBoxに入力された”数字” は 数字ではなく ”文字列”になります なのでLongの型は指定できません 変数を定義しないと何でも型(Variant)として扱われるのでエラーになりません 文字列を数字にするには Val(TextBox2)としてやる必要があります フォームのオブジェクトを指定する場合 Me.TxetBox1みたいに どのフォームなのか指定するクセをつけたほうがいいかと思います ところでOn Error Gotoの行き先がありませんね? 一番最後に err1: エラーの時の処理 を追加しましょう エラーの時は何もしなくても err1: は必要です エラー回避なのにエラーになります
その他の回答 (5)
- sumer45
- ベストアンサー率17% (52/294)
追伸: ブックをアップロードする場合、ブックのプロパティから 作成者情報などが書かれていないか確認してください 書いてあったらそれら情報は削除してください 身元がバレてもいいならかまいませんが 注意です!!
- sumer45
- ベストアンサー率17% (52/294)
エクセルの質問の場合 元となるシートの表現が こういった掲示板だとうまくいかない場合がほとんどです 先に紹介したサイトをよく見てください 左下のほうに 掲示板というのがあります ここは質問掲示板です ここの掲示板の特徴は 作業しているブックをその掲示板にアップロードできるという 利点です やりたいことが複雑な場合など ブックをアップすれば回答する側も質問の意図がわかりやすいのと 回答者が修正してくれたブックをそのままダウンロードすることができます こちらで質問をしなおすほうがいいかもしれませんね ここは締め切って・・。 アップロードの方法は 質問を挙げたあと 自分の書いた欄にフロッピーディスクのアイコンがあるんで そこをクリックして進んでいきます (ちょっとわかりにくいかな・・)
お礼
わかりました、ありがとうございます。 もうちょっと質問をまとめて次からはそちらにさせて頂きます。
- sumer45
- ベストアンサー率17% (52/294)
まずあなたが何をどういうようにしたいのか 肝心なことが書かれていません 目的がかかれていないのにアドバイスはできません コードから読み取れなくはありませんが 正しい事が書いてあるとは思えません ですから具体的に何をどうしたいのかは質問をする上で必須項目であることを 頭にいれてください!
お礼
そうですねすいませんでした。 一応文字数に限りがありまして、一部ですが 「jcctaira」から頂いた回答に補足させて頂きました。
- sumer45
- ベストアンサー率17% (52/294)
http://officetanaka.net/ ここで勉強してください! 非常にためになります!
お礼
ありがとうございます。 さっそくここへいってみます。
- jcctaira
- ベストアンサー率58% (119/204)
変数やオブジェクトをきちんと学習した方が良いかと思います。 (1)TxtBx2 = TextBox2 TxtBx2変数は数値なので、もしTextBox2が数字以外を入力した場合エラーになります。 入力値を数字チェクするか、エラーにならないように次の命令に変更した方が良いです。 TxtBx2 = Val(TextBox2) (2)Selection = Selection.Row - 2 選択されたセルの2行上を選択しようとしているのでしょうか? 上記の結果はSelectionは何も変わらない ※本来Selectionに数字を設定しているのでエラーになっても良いような? Selection.Offset(-2, 0).Select に変更が必要です。 (3)If Len("A3") > 0 Then この命令は"A3"という文字の長さをチェックしています。 必ずLen("A3") は2になります。 もしセルA3の長さをチェックした場合は次のようにします。 If Len(Range("A3")) > 0 Then (4)TxtBx1 = "" , TxtBx2 = "" 変数をクリアーしたいのですか? 多分、入力するテキストボックスをクリアーするのでないでしょうか? またTxtBx2は数値変数なので TxtBx2 = 0 でないとエラーになります。 TextBox1 = "" ,TextBox2 = "" ではないでしょうか? (5) Call TxtBx1.SetFocus テキストボックスにフォーカスを移動したいのだと思います。 TxtBx1は変数なので意味がないし、Call はサブルーチンを呼ぶためなので それもおかしいですね。 TextBox1.SetFocus が正しいと思います。 全体的に流れ(ロジック)は分かりませんが、変数やオブジェクト(今回はコントロールオブジェクト)等の理解が不足しているような気がします。 きちんと基本をしっかり勉強した方が、後々良いプログラムを作れると思います。 色々大変ですが、頑張って勉強して下さいね。
お礼
そうですね。 なんでもかんでも詰め込もうとして、 部分部分が覚えてないようでは意味ないですから、早速復習していこうと思います。 m(__)m
補足
勉強しながら初めて作ったので確かに基礎ができてません… 一応データと線を追加していくようにしましたが、 ただこれだとエラーなりません。その理由がさっぱりわかりません。@@ Private Sub CmdBtn1_Click() On Error GoTo err1 Dim TxtBx1 As String Dim TxtBx2 As Long TxtBx1 = TextBox1 TxtBx2 = TextBox2 Range("a65535").End(xlUp).Offset(1).Select '新しいセルにデータを追加 Selection = Selection.Row - 2 Selection.Offset(, 1).Value = TxtBx1 Selection.Offset(, 2).Value = ComboBox1 Selection.Offset(, 3).Value = TxtBx2 With Selection.Borders(xlEdgeLeft) '「No.」の左外枠中線・右中枠細線・下線 .LineStyle = xlContinuous .Weight = xlMedium End With With Selection.Borders(xlEdgeRight) .LineStyle = xlDot .Weight = xlThin End With With Selection.Borders(xlEdgeBottom) .LineStyle = xlContinuous .Weight = xlThin End With Range("b65535").End(xlUp).Select '「タイトル」の右中枠細線・下線 With Selection.Borders(xlEdgeRight) .LineStyle = xlDot .Weight = xlThin End With With Selection.Borders(xlEdgeBottom) .LineStyle = xlContinuous .Weight = xlThin End With Range("c65535").End(xlUp).Select '「ジャンル」の右中枠細線・下線 With Selection.Borders(xlEdgeRight) .LineStyle = xlDot .Weight = xlThin End With With Selection.Borders(xlEdgeBottom) .LineStyle = xlContinuous .Weight = xlThin End With Range("d65535").End(xlUp).Select '「DVD」の右中枠細線・下線 With Selection.Borders(xlEdgeRight) .LineStyle = xlContinuous .Weight = xlMedium End With With Selection.Borders(xlEdgeBottom) .LineStyle = xlContinuous .Weight = xlThin End With '「取消」ボタンのオン If Len("A3") > 0 Then CmdBtn2.Enabled = True End If '初期化 TextBox1 = "" TextBox2 = "" ComboBox1.ListIndex = -1 Call TextBox1.SetFocus Exit Sub 'エラー処理 err1: MsgBox ("DVD番号(数字)を入れて下さい。") TextBox2 = "" Call TextBox2.SetFocus End Sub