- 締切済み
VBScriptの変数宣言
ASPでvbscriptを使って処理をしているページの修正を行っていたのですが、その中で不思議な状態が発生しています。 <% Option Explicit On Error Resume Next %> ===== 省略 ===== <% filename = Trim(bobj.Form(bin,"filename")) Dim filename ===== 省略 ===== 普通、上記のような記述ではfilenameの代入のところでエラーが発生すると思うのですが、代入処理の直後にerr.numberを判定しても、エラーが発生していないんです。 includeしてあるファイルの内部も検索しましたが、filenameの変数宣言は見つかりませんでした。 VBScriptって、どこで変数宣言を行っても有効になるのでしょうか? 正常に動いているので、今のところ問題は無いのですが、何か気持ち悪くて。。。 似たような現象が起こった事のある方や、これが正しい動きだというご指摘をお願いいたします。
- knkenkn
- お礼率92% (12/13)
- その他(プログラミング・開発)
- 回答数4
- ありがとう数3
- みんなの回答 (4)
- 専門家の回答
みんなの回答
- onlyrom
- ベストアンサー率59% (228/384)
BLUEPIXYさんの回答にもありますように質問の件はヘルプにちゃんと書いてあります。 【プロシージャの外部】で宣言した変数は、スクリプトレベルの変数になりスクリプト全体で使用可能。 ということは 【プロシージャの外部】であれば、どこで宣言しても(その変数を使う後で宣言しても)スクリプトレベルの変数を宣言したことになる。 よって、提示のコードでも上手く動作する。 質問する前に先ずヘルプを眺めてみませう。。 (^^;;
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
VBScript のヘルプ(ドキュメント)からの引用 ---------------------------------------------------------------- Option Explicit ステートメントを記述した場合、変数は、Dim、Private、Public、ReDim などの各ステートメントで明示的に宣言する必要があります。宣言されていない変数名を使うと、エラーが発生します。 Dim ステートメントを使ってスクリプト レベルで宣言した変数は、宣言したスクリプト内のすべてのプロシージャから参照できます。 ---------------------------------------------------------------- つまり、Option Explicit を宣言した場合、変数宣言がされていない場合には<b>エラーになります</b> >どこで変数宣言を行っても有効になるのでしょうか? そういうことになります。
- PrintScree
- ベストアンサー率25% (538/2091)
VBScriptはOption Explicitを宣言しても無視する仕様だったはずです。(今思い出しました^^;) たしか、JavaScriptも変数宣言無で変数を使えましたよね? ということで、HTMLに埋め込むスクリプトは変数宣言なしでも使用可能ということなのでしょう。
お礼
御礼遅くなりました。 いろいろ調べて実験した結果、スクリプトレベルで使用する変数は、プロシージャ外部のどこで宣言しても有効になってました。結構乱暴な仕様なんですね。VBScriptって・・・ ご回答ありがとうございました。
- PrintScree
- ベストアンサー率25% (538/2091)
VBScriptの元はBASICですから、C等のように変数宣言をしなくても変数が使用できます。 まぁ、この仕様のおかげで変数のスペルミスがあっても中々特定が難しい場合があります^^; この仕様はVisualBasicやExcel,AccessのVBAも一緒です。ただし、ある特定の宣言を行うと変数宣言していないとエラーとして扱う事が可能です。 (VBSはその宣言が使えなかったような気がする…)
お礼
ご回答ありがとうございます。 確かにそうですね。ただ Option Explicit は宣言してあるので、引っかかると思うんですけどね。。。 他人が作ったモノを修正しているので、混乱しているのかもしれません。 もう一度、落ち着いて解析し直してみます。
関連するQ&A
- vbscriptの変数宣言
教えてください。 プログラム初心者です。 vbscriptで変数をDimで宣言しているものと。Dim無しの変数宣言していないく、 いきなり代入して使っているものもあります。宣言して使うものと使わないものの違いは何でしょうか? よろしくお願いします。
- ベストアンサー
- Microsoft ASP
- VBScript 配列の宣言に変数を使用
VBScript初心者です。 配列を宣言する際に変数を使用することは出来ないでしょうか。 例えば下記のようにするとエラーになります。 Dim intCnt intCnt = 9 Dim strArray(intCnt) どなたかご存知の方がいらっしゃいましたらお教え下さい。 よろしくお願い致します。
- ベストアンサー
- その他(プログラミング・開発)
- Perlの変数宣言について
PHPを毎日書いている者ですが、たまたまPerlのメールフォームをカスタマイズ しなければならなくなりました。 use strict宣言がある場合、変数はmyまたはlocalで宣言しなければいけないようですが、 サブルーチン内に sub form { ・・・ my ($form_value,$error_list) = @_; ・・・ print $error_list{'inquiry_type1'} としたところ、 Global symbol "%error_list" requires explicit package name at ・・・ と、宣言が無い場合に出るというエラーが出ました。 $error_listには、inquiry_type1は入っているはずなのですが、どのような 宣言をすればよいのでしょうか? よろしくお願いします。
- ベストアンサー
- Perl
- VB2010で、変数の宣言がわかりません。
VB2010で、変数の宣言がわかりません。 Option Explicit Public i, j, k, l As Long Public ii, jj, kk, ll As Long Public lngFileSuu As Long Public strTemp As String ・ ・ ・ と標準モジュールに宣言すると エラーがでています。 VB6.0とは宣言方法が違うのでしょうか? 教えてください。よろしくお願いします。
- ベストアンサー
- Visual Basic
- 変数の宣言方法の相違によるエラー
ある変数を関数内で宣言した場合、デバック時に「ハンドルされていない例外が発生しました」っていうエラーになります。でも、グローバル変数として宣言した場合には、同じエラーが発生しませんでした。今回の場合、配列を10,000,000ぐらい確保しようとしたので、メモリ領域を確保できなかったが、エラーの発生原因だと思います。メンバ変数とグローバル変数で確保できるメモリ領域にどれくらいの違いがありますか。その他にクラスのメンバ変数として宣言した場合とグローバル変数として宣言した場合でどのような違いがありますか。 わかる方が教えてください。よろしくお願いします。
- ベストアンサー
- C・C++・C#
- VBScript でのformat
VBScript で、数値をフォーマットしたいのですが、 以下のようなエラーになります。 Microsoft VBScript 実行時エラー: この変数は宣言されていません。: 'Format' スクリプトの内容は以下のとおりです。 Wscript.Echo Format(13, "0000") OSはWindowsXPホームエディション(SP2)です。 よろしくお願いします。
- ベストアンサー
- Visual Basic
- vbscriptで新しいウィンドウを開きたい
タイトルの件、下記URLのサンプルを参考にさせていただいたのですが、思うような結果が得られません。 http://homepage1.nifty.com/kodayan/vbs/app1/window01.html 上記サンプルの内容をそのまま使うと、 Microsoft VBScript 実行時エラー (0x800A01F4) この変数は宣言されていません。: 'Window' というエラーが表示されます。 そこで、変数として宣言すると今度は Microsoft VBScript 実行時エラー (0x800A01A8) オブジェクトがありません。: 'window' というエラーが表示されます。 いったいどうしたら良いのでしょうか?助けてください。 よろしくお願いします。
- 締切済み
- Microsoft ASP
- インクルードしたファイルの関数を使用する
お世話になっております。カナと申します。 宜しくお願いいたします。 ・windowsXP ・Vbscript ・IIS5.0 インクルードしたaspファイルに、関数があるのですが、 それを実行し戻り値を取得して呼び出し元の関数に戻った際に、 エラー「この変数は宣言されていません。」が出てしまいます。 以下ソースです。 '~~~~~TEST_1.asp~~~~~~~~~ <%@ LANGUAGE="VBScript" %> <% option explicit %> <!-- #include file="TEST_2.asp" --> <% call TEST_1() %> <% public function TEST_1(Data) Dim Data On Error Resume Next Data=27 Call TEST_2(Data) Response.Write(Data)%><br><% '↑きちんと30が取得できます Response.Write(Err内容:" & Err.Description)%><br><% '↑ここでエラーの確認をしています。 '「この変数は宣言されていません。」になります。 End Function %> ~~~~~TEST_2.asp~~~~~~~~~ <% Public Sub TEST_2(ByRef Data) On Error Resume Next Response.Write("Data)%><br><% '↑27が表示されます Data=Data+3 End Sub %> ------------------------------------------------------- 以上です。 callで関数を呼んで、実行結果は正しく取得できるのですが、戻ってきたときにエラーになるので、この先のコードを書いていったときにエラー処理等に問題が出てしまいます。 もっと長いソースを書いているときも同様のエラーが出るので、ファイルのインクルードの仕方か関数の呼び出し方など、根本的になにか問題があるのだと思うのですが・・・。 何かおかしい点があるのでしょうか? 大変困っています。 申し訳ありませんが、どなたかご教授ください。
- 締切済み
- Microsoft ASP
- JavaScriptの変数について
JavaScriptのソースで解らないところがあり、困っています。 ソースは下記の様なものなのですが、エラーが出ていません。 解らない点は2点有ります。 1. jにfalseを代入している箇所なのですが、セミコロンがないのは何故なのでしょうか? Chromeのデベロッパツール, FireFoxのFirebugで確かめてみたのですが、エラーとなっておらず、alertでfalseと表示されている状態です。 「j = !1」の箇所を即時関数の外に出すと、エラーとなります。 普通変数に代入する式の末尾はセミコロンをつけると思うのですが、 何故なのでしょうか? 2.また、jはvar j等のように変数の宣言をせずに使えているようなのですが、 普通即時関数内で宣言した変数のスコープは関数の外では使えないので、エラーとなると思うのですが、宣言せずに代入に使った変数はグローバル変数と解釈されるのでしょうか? どなたかお答え下さい。 --------------------------------- <script> (function() { j = !1 })(); alert(j); </script>
- ベストアンサー
- JavaScript
- VBScriptでレコードがない場合エラーになる
VBScriptを使ってHTAを作っています。 ちょっと疑問なのですが、以下のようなコードでレコードがないと 「カレントレコードがありません」というエラーになってしまいます。 txtSQL = "SELECT * FROM test" Set rs = db.OpenRecordSet(txtSQL) ' dbはDAOのデータベースオブジェクト プロシージャで On Error Resume Nextすればエラーになりませんが、 そうなるとありえる全エラーをErrオブジェクトを使ってcatchしないと いけなくなり面倒です。 On Error Resume Nextなしで、ありえるエラーの中で特定のものを (今回は「カレントレコードがない」エラーです)エラーでなくす ことはできないのでしょうか? または プロシージャの中で On Error Resume Nextを使って、 プロシージャの途中でまたエラーで停止するような命令はない のでしょうか? 教えていただけると幸いです。
- ベストアンサー
- Visual Basic
お礼
御礼遅くなりました。 ヘルプは読んでたんですけど、変数の使用後に宣言を行っても有効とは・・・ そういう意味とは、まいりました。 ご回答ありがとうございました。