プロが教えるわが家の防犯対策術!

VBAを始めたばかりなので初歩的な質問なのですが、

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

---------------省略---------------

'「取消」ボタンのオン
If Len("A3") > 0 Then
CmdBtn2.Enabled = True
End If
'初期化
TxtBx1 = ""
TxtBx2 = ""
ComboBox1.ListIndex = -1
Call TxtBx1.SetFocus
Exit Sub

実行すると、初期化のところで変数(Txtbx1,TxtBx2)などが反転して、
「修飾子が不正です」と出ます。
変数を使わないで直接指定すると問題無いみたいなのですがよくわかりません。
こんな質問ですいませんが宜しくお願いします。

A 回答 (6件)

フォームのTextBoxに入力された”数字” は 数字ではなく ”文字列”になります


なのでLongの型は指定できません
変数を定義しないと何でも型(Variant)として扱われるのでエラーになりません
文字列を数字にするには Val(TextBox2)としてやる必要があります

フォームのオブジェクトを指定する場合
Me.TxetBox1みたいに どのフォームなのか指定するクセをつけたほうがいいかと思います

ところでOn Error Gotoの行き先がありませんね?
一番最後に
err1:
エラーの時の処理

を追加しましょう
エラーの時は何もしなくても
err1: は必要です エラー回避なのにエラーになります

この回答への補足

勉強しながら初めて作ったので確かに基礎ができてません…
一応データと線を追加していくようにしましたが、
ただこれだとエラーなりません。その理由がさっぱりわかりません。@@
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

補足日時:2010/06/01 13:22
    • good
    • 0

追伸:



ブックをアップロードする場合、ブックのプロパティから
作成者情報などが書かれていないか確認してください
書いてあったらそれら情報は削除してください

身元がバレてもいいならかまいませんが  注意です!!
    • good
    • 1

エクセルの質問の場合 元となるシートの表現が


こういった掲示板だとうまくいかない場合がほとんどです
先に紹介したサイトをよく見てください
左下のほうに 掲示板というのがあります
ここは質問掲示板です
ここの掲示板の特徴は 作業しているブックをその掲示板にアップロードできるという
利点です やりたいことが複雑な場合など
ブックをアップすれば回答する側も質問の意図がわかりやすいのと
回答者が修正してくれたブックをそのままダウンロードすることができます

こちらで質問をしなおすほうがいいかもしれませんね

ここは締め切って・・。

アップロードの方法は 質問を挙げたあと
自分の書いた欄にフロッピーディスクのアイコンがあるんで
そこをクリックして進んでいきます
(ちょっとわかりにくいかな・・)
    • good
    • 1
この回答へのお礼

わかりました、ありがとうございます。
もうちょっと質問をまとめて次からはそちらにさせて頂きます。

お礼日時:2010/06/01 14:26

まずあなたが何をどういうようにしたいのか


肝心なことが書かれていません
目的がかかれていないのにアドバイスはできません
コードから読み取れなくはありませんが
正しい事が書いてあるとは思えません
ですから具体的に何をどうしたいのかは質問をする上で必須項目であることを
頭にいれてください!
    • good
    • 0
この回答へのお礼

そうですねすいませんでした。
一応文字数に限りがありまして、一部ですが
「jcctaira」から頂いた回答に補足させて頂きました。

お礼日時:2010/06/01 13:35

http://officetanaka.net/

ここで勉強してください!
非常にためになります!
    • good
    • 0
この回答へのお礼

ありがとうございます。
さっそくここへいってみます。

お礼日時:2010/06/01 13:33

変数やオブジェクトをきちんと学習した方が良いかと思います。



(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 が正しいと思います。
 
全体的に流れ(ロジック)は分かりませんが、変数やオブジェクト(今回はコントロールオブジェクト)等の理解が不足しているような気がします。
きちんと基本をしっかり勉強した方が、後々良いプログラムを作れると思います。
色々大変ですが、頑張って勉強して下さいね。    
    • good
    • 0
この回答へのお礼

そうですね。
なんでもかんでも詰め込もうとして、
部分部分が覚えてないようでは意味ないですから、早速復習していこうと思います。
m(__)m

お礼日時:2010/06/01 13:37

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