• ベストアンサー

Option Compare Database

vbaで Option Explicit がないと、変数の宣言が強制されないけど、 アクセスには Option Compare Database がありますが、 これはどういう役目をなしてるのでしょうか? これがないとどうなるのでしょうか?

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

  • ベストアンサー
  • Br6
  • ベストアンサー率64% (9/14)
回答No.1

「Option Compare ~」は文字を比較する方法を決定します。 「Option Compare Database」が記述されている場合は、オプションの「新規データベースの並び順序」の 設定に従い、文字を比較します。 例えば、新規データベースの並び順序を「日本語」にした場合、 「"亜" < "一"」 はTrueを返します。(読みの50音順で亜の方が先) 「日本語、部首、画数」にした場合、 「"亜" < "一"」 はFalseを返します。(亜の方が画数が多い) 「Option Compare ~」には「Database」の他に「Binary」、「Text」があります。 「Option Compare Binary」の場合は文字コード順で比較するため、大文字小文字を区別します。 「"a" = "A"」 はFalseになります。 「Option Compare Text」の場合は大文字小文字を区別しません。 「"a" = "A"」 はTrueになります。 「Option Compare ~」の記述を省略した場合は、「Option Compare Binary」と同等の意味になります。 まとめると、「Option Compare Database」がある場合は、「新規データベースの並び順序」の設定に従う。 ない場合は、文字コード順で比較するというということになります。

hcyyfnknnjo
質問者

お礼

どうもありがとうございました。

関連するQ&A

  • Option Explictについて教えてください

    WEBでOption Explictを検索したら ------------------------------------ option explicit を指定して実行すると、 「コンパイルエラー変数が定義されていません。」 のエラーが出て、青色に反転します。 つまり、単純ミスが防げます。 option explicit が無いと ミスがミスと分からずに実行しますので、 間違った結果が出てしまいます。 option explicit は無条件に定義しましょう。 ---------------------------------- 変数の宣言を強制されるため、 変数のタイプミスを防ぐことができます。 ---------------------------------- 初心者はVBEの「ツール」の「オプション」 「編集」を選択して「変数の宣言を強制する」 (初期状態ではチェックがついていません) には必ずチェック。 ------------------------------------ 変数を宣言しているのはユーザーの環境が、 Option Explicit と明示的に変数を宣言することを 要求されている可能性があるので「エラーが出ました」 という場合があるからです --------------------------------- など色々と見つかりました。 一番わかりやすかったのは ↓これでした。 http://okwave.jp/qa/q4304440.html また以下のような説明もありました。 Option Explicitをつけた場合とつけない場合で 下のソースを実行してみてください。 abc = "Hello" Msgbox(adc) ↓ で説明のように試してみたら ・つけた場合→コンパイルエラー ・つけない場合→エラーにならずMsgboxは空白 でした。これは理解できました。 ですが以下の場合 Option Explicit Sub Macro1() Sheets("Sheet1").Select Columns("A:A").Select Selection.Copy Columns("C:C").Select ActiveSheet.Paste Application.CutCopyMode = False Range("A1").Select End Sub 多分変数は宣言していないので 「変数が定義されていません」とエラーが出ると 思ったのに、でませんでした。 >変数の宣言を強制されるため >Option Explicit と明示的に変数を宣言することを >要求されている可能性 の説明からの自分の解釈と合致しません。 option explicitを指定すると 【記述内に変数宣言がないとエラーになる】 と解釈したのですがそれは間違っていますか? それともSub Macro1()はどこかに変数宣言が あるのでしょうか? 凄くわかりやすく教えていただきたいです。 【追記】 退職者が残したエクセルファイルにて。 Sheet1~Sheet8まであります。 VBEで見ていくと Sheet1:Option Explict  Sheet2:Option Explict  Sheet3:Option Explict  Sheet4:Option Explict  Sheet5:Option Explict  Sheet6:何も無し Sheet7:Option Explict  Sheet8:Option Explict  次に標準モジュールを見ると Module1:Option Explict Sub Macro2() Module2:Option Explict Sub Macro3()  Module3:Option Explict Sub Macro4() Module4:Option Explict Sub Macro5()  Module5:Option Explict  Module6:Option Explict Sub Macro1() となっています。 Macro1~Macro5は全て マクロの記録のみで作成されています。 これを修正するのですが、Option Explictを 初めて見たので困惑しています。 よろしくお願いします。

  • On Error Resume Nextを複数のプロシージャーで使うことは不可能ですか?

    Module1に ------------------------------------------- Option Compare Database Option Explicit Sub マクロ1() End Sub Sub マクロ2() End Sub ------------------------------------------- があるのですが ------------------------------------------- Option Compare Database Option Explicit Sub マクロ1() On Error Resume Next End Sub Sub マクロ2() On Error Resume Next End Sub ------------------------------------------- ではなく ------------------------------------------- On Error Resume Next Option Compare Database Option Explicit Sub マクロ1() End Sub Sub マクロ2() End Sub ------------------------------------------- これはできないのでしょうか? エラーになります。 dimもつけても駄目でした。 ひとつづつやっていくしかないのでしょうか?

  • Access:DataBaseオブジェクト型の変数の宣言

    初歩的な質問ですが、 DataBaseオブジェクト型の変数の宣言って どう書いたらいいですか? 私のAccessはVer.2000なのですが、 参考書が2002・2003対応でして、 Dim DB as Dataset という宣言が出来ないのです。 どうか教えてください。 よろしくお願いします。

  • DATABASE型について

    ACCESSプロジェクトを使っています。  (基本的な理解不足だと思いますが) Access97では、 Dim DB As Database Dim RS As Recordset と宣言して Set DB =CurrentDb() Set RS=DB.OpenRecordset(… で使えていましたが、Accessプロジェクトでは使えません。 (ストアドプロシージャ部分ではなく、フォームのVBA部分で) フォーム上のボタンから、モジュール操作を実行したいのですが、 上記 そのまま使用すると 「コンパイルエラー ユーザー定義型は定義されていません」 と出てきます。 Accessプロジェクトで操作するにはどのようにすればいいのでしょうか?

  • JavaScriptでVBのOption Explicitのように変数の明示的な宣言を強制することは不可能?

    たぶんできないのだとは思いますが、ダメ元で質問です。 JavaScriptでVBのOption Explicitステートメントのように、変数の明示的な宣言を強制することはできないのでしょうか? 調べた限りでは、なさそうですが、将来的に言語使仕様が変わる云々の可能性も含めてコメント頂けると幸いです。 できないとすると、変数のタイプミスによるバグの発見が大変だと思いますが、皆さんはどのように工夫してデバッグされていますか?

  • VBAにおける Option Explicitの役割

    VBAにおける Option Explicitの役割 VBAでゲームを作ることを勉強している初心者です。 本に従ってもっとも基本的なスロットゲームをためしました。 プログラム本体の前にある下記のOption Explicitを省くとコンパイルエラーになります。 VBAにおける Option Explicitはプログラム本体中にあるどのキーがどのスロットを止めるなどの指示を 具体的記述なしに有効にするなどの役目があるのでしょうか。 Option Explicit Declare Function GetAsyncKeyState Lib "User32.dll" (ByVal vKey As Long) As Long Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) Declare Function GetTickCount Lib "kernel32" () As Long 'Windows起動後経過時間取得API どなたか教えていただけると助かります。 よろしくお願いいたします。

  • 「変数の宣言を強制する」にチェックがついてませんで

    win7、オフィス2010を使っています。 VBE画面でモジュールを追加したら 「Option Explicit」 がありませんでした。 ツール→オプションを見てみたら 「変数の宣言を強制する」にチェックがついてませんでした。 これは、デフォルトでチェックはつかないのでしょうか? それとも誰かが外したのでしょうか? このPCは複数人で使っています。

  • MSAccess で database定義されていない?

    Accessでレコードのデータを読もうと標準モジュールに次のプログラムを作りました Option Compare Database Public longTATENO As Long Public longYOKINO As Long Public Sub no_gen() Dim dbs As database Dim RS As Recordset Set dbs = CurrentDb Set RS = dbs.Openrecordset("M_基本情報") longTATENO = RS![立替処理No] longYOKINO = RS![預金処理No] End Sub 別のフォームを開くときに no_gen と書きそのフォームを開くと dbs As database の所が反転表示になり コンパイルエラー  ユーザ定義型は定義されていませんと出ます。 何が悪いのでしょう? Access初心者ですよろしくお願いします

  • VBA option explicitについて

    VBA option explicitのメリットについて。また、どんな場合に、どのように使われるのかをご教授頂けないでしょうか。宜しくお願いいたします。

  • エクセルの変数をアクセスでも使いたい。

    エクセルの標準モジュールには Option Explicit Public 文字列 As String Public アクセス As Object Public Sub エクセル側テスト() 文字列 = "あ" Set アクセス = GetObject("C:\db1.mdb") If Not アクセス Is Nothing Then アクセス.Run "アクセス側テスト" End If Set アクセス = Nothing End Sub アクセス(db1.mdb)の標準モジュールには Option Compare Database Option Explicit Public 文字列 As String Sub アクセス側テスト() MsgBox 文字列 End Sub という風にコードを書きましたが やはりアクセスではエクセルで指定した変数が受け継がれません。 これを「アクセス側テスト」のマクロでもmsgboxで「あ」と表示させるにはどうすればいいのでしょうか? よろしくお願いします。

専門家に質問してみよう