|
>1.While (strNewData2 = vbNullString)〜からWendまでが飛ばされる
Wendって初めて見ました。
ヘルプで確認してみましたが、While...Wendっていう構文がVBAにはあるんですね。
同じことをVBAで書く場合、Do...Loopを使うのが多いと思います。
ところで、このコードですが、「strNewData2 = vbNullString」という式が成り立つ限り、
While...Wend間がループされるというものです。
この式が成り立たなければ、While...Wend間が実行されることはありません。
なので、飛ばされる原因は、「strNewData2 = vbNullString」という式が成り立たない
ということです。
そこで、この式をもっと細かく見てみます。
まず、変数strNewData2です。
この変数は、「Dim strNewData2 As String」で宣言されてから
「While (strNewData2 = vbNullString)」に至るまでに何も代入されていないので、
「While (strNewData2 = vbNullString)」のコード実行時のstrNewData2の値は、長さ0の文字列です。
strNewData2は、何も代入されないまま、上記のコードで使われているわけですが、
どんな値が格納されていると考えているのでしょうか。
次に、vbNullStringという定数です。
私はそんな定数があることを知りませんでした。なので、ヘルプを見てみました。すると、
>vbNullString
>値 0 を持つ文字列
>長さ 0 の文字列 ("") とは異なります。外部プロシージャを呼び出す場合に使用します。
とありました。
また、「"0" = vbNullString」という条件式が成り立つか実験してみましたが、
成り立たないという結果でした。
ついでに、「0 = vbNullString」という条件式が成り立つか実験してみましたが、
データ型違いのエラーになりました。
結局、vbNullStringって具体的にはどんな値なのかよくわかりませんでした。
いずれにしても、「strNewData2 = vbNullString」という条件式は、
「"" = 正体不明」という意味になるわけですが、この条件式が成り立つことはあり得ません。
なので、While (strNewData2 = vbNullString)からWendの間が飛ばされてしまうわけです。
>2.(パラメータが少なすぎます1を指定して下さい)というエラーメッセージ
アクセスでは頻出のエラーメッセージです。
しかも、エラーメッセージを見ても、何が悪かったのかを把握できない
という困ったエラーメッセージです。
このエラーメッセージが出る場合というのは、ほぼ決まっています。
SQL文中で当該テーブルにないフィールド名が使われている場合です。
言い換えると、
>"INSERT INTO 社員名簿 ( 管理ID, 社員コード, 社員名 )"
の中に「社員名簿」テーブルにないフィールド名があるということです。
そして、「1を指定して下さい」ということなので、そういうフィールドが1つある
ということです。
「管理ID」の前の半角スペースあるいは「社員名」の後の半角スペースが怪しいと思います。
質問では言及されていませんが、ほかにもおかしなところがあります。
まず、
>Dim strNewData As Long
です。
変数の名付け方にハンガリアン記法というのがあります。
これに従った場合、「strNewData」という変数はString型とするのが通常ですが、
実は長整数型だったわけで、びっくりです。
ハンガリアン記法に従うなら、長整数型は「lngNewData」という変数名にするのが通常です。
ま、変数名の名付け方は人それぞれなので、間違いだというわけではありませんが。
次に
>While (strNewData = Null)
です。
「strNewData = Null」という条件式が成り立つことはあり得ません。
なので、「While (strNewData = Null)」から「Wend」までのコードが実行されることも
絶対にありません。
まず、Nullであるかどうかは、「=」では調べられません。IsNull関数を使います。
次に、strNewDataは、長整数型の変数ですから、Nullを格納できません。
なので、「strNewData = Null」という条件式が成り立つことは絶対にありません。
また、strNewDataには、値を何も格納していませんから、
strNewDataに格納されているのは、初期値である0です。
strNewDataには、何が格納されると考えていますか。
次に
>If (strNewData = Null) Then
です。
このIf文のTrueパート(IfからElseまでの間)が実行されることは絶対にありません。
理由は、上記と同じことです。
次に
>strNewData = Null
です。
このコードがもしも実行されれば、データ型違いというエラーになります。
長整数型の変数には、Nullを格納できないからです。
次に
>GoSub StopOrContinue
です。
GoSubってあまり見ないです。
Gotoを使うか、サブプロシージャを呼び出すことが多いと思います。
次に
>Response = acDataErrAdded
です。
NonListイベントはそれほど使ったことはないのですが、
多分、追加クエリの前にこのコードを実行しないとだめだと思います。
ヘルプの使用例でも、データを追加する前に「Response = acDataErrAdded」が書かれていました。
それから、
>While (strNewData = Null)
や
>While (strNewData2 = vbNullString)
のループです。
現状では条件式が成り立つことがなく、ループ内に入れないため、問題が顕在化していませんが、
もしもこのループの中に入ってしまえば、無限ループになります。
ループ内での処理から見て、ループ抜けの条件が成り立つことがないからです。
最後に、私は明日から温泉です。次のレスができるのは週明けになります。
|
|