Access2010のVBAにて変数宣言:小文字と大文字の挙動について

このQ&Aのポイント
  • Access2010のVBAにて変数宣言時に小文字の「sql」と宣言しても、ある時点で大文字の「SQL」に自動変換されてしまう現象が発生します。
  • 特に動作に支障はないが、他の変数の宣言との統一性に影響を与える可能性があります。
  • バグかどうかは不明だが、この問題の解決策は現時点では存在しないようです。
回答を見る
  • ベストアンサー

Access2010のVBAにて(変数の宣言)

Access2010にて複数のフォーム内で、「sql」という変数を宣言しています。 宣言例) Dim sql As String (sql は小文字) それが、あるときを境に、全て「SQL」となってしまいました。 一括置換でプロジェクト内の全ての「SQL」の宣言箇所を 小文字の「sql」に変換してみたのですが、置換作業が終わった直後に やはり大文字の「SQL」に戻ります。 特にこれといって動きに支障があるわけではないのですが、 他の変数の宣言を小文字で統一している事もあり、気になります。。。 なお、Accessでオブジェクト名を間違えて半角カナなどで 一度宣言してしまうと、その後オブジェクト名を修正しても、 VBAコード内では半角のオブジェクト名が自動補完されてしまいますよね。 これと同じような現象でしょうか。 これはAccessのバグになるのでしょうか。 それとも修正方法があるのでしょうか。 修正方法や対策をご存じの方は教えて頂けませんでしょうか。 宜しくお願い致します。

  • SOU48
  • お礼率35% (51/144)

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

  • ベストアンサー
  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.2

Sub sql() でエンターを押すと End Sub がくっつくでしょ? それでSub~End Subを削除したら直るかも。

SOU48
質問者

お礼

直りました! なるほど、ちょっと反則技だけど関数として再定義してやれば 改めて小文字で認識されるわけですね。 本件に限らず、これは目から鱗でした。 ただ、他の方の回答にもあるように「sql」はAccessの予約語のようですので 別の語句で定義し直す事も検討したいと思います! 有り難うございましたm(_ _)m

その他の回答 (3)

  • nda23
  • ベストアンサー率54% (777/1415)
回答No.4

QueryDefオブジェクトを使いませんでしたか? これにSQLプロパティがあるので、小文字は 使えなくなります。

  • nicotinism
  • ベストアンサー率70% (1019/1452)
回答No.3

SQL はAccessの予約語なのでオブジェクト名や変数などに使用しない事です。 最初は問題なくても、ある日突然・・・てのが有りました。 http://office.microsoft.com/ja-jp/access-help/HA010341461.aspx No や Name などとつい使いたくなるのがアブナイ。 なお、大文字・小文字関係ありません。 sSql とか MySQL とか適当なのにリネームしておいた方が吉。

SOU48
質問者

お礼

「sql」は予約語なんですね。 言われてみれば確かに予約されていてもおかしくない語句です(汗 別の語句で定義し直す事を検討したいと思います。 有り難うございましたm(_ _)m

noname#175029
noname#175029
回答No.1

スーパーコードを入力すればダイジョウブ!

関連するQ&A

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

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

  • ACCESS2000で変数の扱い方について

    ある変数を用いて、テーブルの項目名の参照の仕方が知りたいのですが 具体的には。。。 ACCESS2000でAとB二つのテーブルがあります。 Aには 項目No. (オートNo.) 項目名 (文字) Bには コード  (数値) 名称   (文字) カナ   (文字) 住所1  (文字) 住所2  (文字) という構成になっています。 Aの項目名には、Bの名称以下の列名(名称、カナ、住所1,2)という レコードが入っています。 ここで、Bの文字型の項目を全て64バイト以下にするという事をやりたいのですが、 今後もBの項目は増えていくことが予想されますので、 一つづつコードを書いていくのは大変なので、以下の方法を考えました。 1.Aの1レコード目の項目名を変数Xに代入 2.B上の列名Xを1レコード目から順番に64バイト以下に変換 3.Bのレコード全て終わった段階で、変数XにAの次レコードの項目名を代入 4.Aのレコードがなくなるまで、2へ戻る Do Until A.EOF   X=A.項目名     '変数XへAの項目名を代入     Do Until B.EOF       B.Edit       B!X= LeftB(B!X,64) 'Bの列名Xの文字数を64へ変換       ~~~~~~~~~~~~~~~~~~       B.Update       B.MoveNext     LOOP   A.MoveNext LOOP というコードを書いたのですが ~~~~部分の”B!X”だとテーブルBのXに入っている列名を認識しません。 どのように記述すればいいのか、教えてください。 また、以前から参照していたACCESSの質問掲示板HPが なくなってしまい、困っています。そのようなHPをご存知でしたら 教えていただきたいです。

  • アクセス2000のVBAで変数に係数をつける方法

    アクセス2000を使っています。 一つのレコード内に、下記のように、「半角4文字の番号+スペース」という規則正しいデータがあります。  ↓↓ 11A11 10A11 22B11 09A22 しかし、このデータの数は不規則で、番号が1個のものもあれば、20個のものもあります。  ↓↓ 11A11 11A11 10A11 22B11 09A22 ・・・ このデータ内にある半角4文字の番号を全て別々のデータにしたいと思い、VBAのコードを使って、InStr関数でスペースを検索し、そのスペースの手前から4文字のデータをleft関数やMid関数で抽出し、それを変数data(x)に代入し、次に、InStr関数で前のスペースの位置から次のスペースを探して、また、そのスペースの手前から4文字のデータをMid関数で抽出し、それを変数data(x)に代入する。 要するに、data(x) の中の x を1から1づつ増加させていき、data(1),data(2),data(3)という変数を自動的に生成し、その生成された各変数にデータを代入していきたいのですが、どうすればいいのでしょうか?

  • VB.NETで変数の宣言が上手くできません

    VB.NETで変数の宣言が上手くできません プロパティを使用し、変数の内容を一括保存しようと考えています その為に以下のようなコードを書いたのですが他のフォームから宣言されていないとなってしまいます 修正点を教えて頂けると嬉しいです Setting.vb Pubic class Settings Public dbdirectry As String Public flistpass As String Public Property flist () As String Get Return flistpass End Get Set (Byval Value As String) flistpass = Value End Set End Property もう一つflist () をdbdic ()に flistpassをdbdirectryにしたもの End Class この変数2つに他のフォームMainForm1.vbとDefaultSetting.vbなどからflistpass = Newflistpassなどと記述するとアクセス出来ず宣言していない扱いになります Publicでの宣言で大丈夫だと思ったのですが間違えているのでしょうか?

  • Access/ADOを使って変数にSQL文を入れた場合の変数の内容の確認

    お知恵をかしてください。 Access2000を使用しています。 VBAのADOを使ってデータベースの操作しています。 モジュールにSQL文を入れたい時は変数を文字列で宣言して記述するのですが、 書きたいSQL文に例えば下記のような計算式を入れたい場合 『&』と『"』が 変数の宣言が文字列なのでくっついて消えてしまいますよね? 変数= sql文 と Format(Mid([FieldName],1,4) & "/" & Mid([FieldName],5,2) & "/" & Mid([FieldName],7,2),"yyyy/mm/dd") そこで、デバッグプリントをしてイミディエイトで実際いまの変数の値はどうなってるのかを確認しながら、 『"』と『&』をつけ足したりしたいのですが、 SQL文が間違っているとデバッグプリントのところに行く前に構文エラーで落ちてしまう為、確認できません。 間違いを探したいからデバッグしているのに、どうすれば良いか分かりません。 何か記述した変数内容がどうなっているのか、確認する方法はないでしょうか? うまく説明ができず、分かりづらいかもしれませんが、ご回答いただければ幸いです。

  • VBAの一括型宣言について

    VBAにて 変数の先頭がA~Gまでの文字で始まるものはすべてsingle宣言をしたいのですが 昔使っていた記憶があるのですが忘れてしいました 現在も使用可能であれば宣言方法お教えください。 ex dim A1 as single dim B2 as single dim Ga as single これを ○○○ A~G as single のように宣言したい、 環境 offixe 2010 os windows 7

  • eval 半角カナが文字化けする

    初めて投稿させていただきます。 半角カナが混ざっている文字列をevalすると、文字化けする場合があります。 どうすれば文字化けしないようになりますか? ちなみに全ての半角カナを全角カナに置換してevalを行いその後、半角カナに戻すということをやったのですが、もともと全角カナ文字まで半角カナに変換されてしまいました。できれば全角カナは全角カナ、半角カナは半角カナのまま文字化けせずにevalする方法を教えてください。

    • 締切済み
    • PHP
  • Excel2007VBA配列変数の宣言について

    ●質問の主旨 (1)以下のコードのプロシージャを実行すると 12行目の変数myArrが選択され、「配列に割り当てられません」と エラーメッセージが返されます。これはなぜでしょうか? (2)(1)の原因は5行目の変数myArrの宣言について問題があるよう 気がしますが、どうすればいいのか分かりません? 以上2点について、1つだけでもご助言いただければ幸いです。 ご教示よろしく願いします。 ●質問の補足 下記のコードは「各支社の成績」(画像の下部)を 「業務成績通知書」(画像上部)に成績欄に差し込んで 各支社ごとのワークシートを印刷するためのコードです。 画像上部のワークシート名→差込印刷TARGET 画像下部のワークシート名→data ●コード Option Explicit Sub オートシェイプ1_Click() Dim myTar As Worksheet 'ワークシート差込印刷(ターゲット)のオブジェクト変数 Dim myDat As Worksheet 'ワークシートdataの配列変数 Dim myArr(6, 4) As Range Dim y As Integer '印刷するシート数のオブジェクト変数 Dim myTem As Range '印刷するアクティブシートのオブジェクト変数 Dim n As Integer '差込数の数 Dim target_name As String '差込名 'ワークシート差込印刷(ターゲット)をオブジェクト変数に代入 Set myTar = Worksheets("差込印刷TARGET") Set myDat = Worksheets("data") 'ワークシートdataをオブジェクト変数に代入 myArr = myDat.Range("B2:G6") '印刷範囲のセル範囲を配列変数に代入 For y = 1 To 5 '繰り返し myTar.Copy after:=myDat 'ワークシート差込印刷のコピーをワークシートdataの後に配置 Set myTem = ActiveSheet 'アクティブシートを変数myTemに代入 myTem.Name = "印刷中" 'コピーされたワークシートの名前は「印刷中」とする For n = 1 To 6 '差込名に「ターゲット番号」を代入 target_name = "TARGET" & n '印刷中シートの「ターゲット番号」のセルに支店ごとのデータ(配列変数)を代入 myTem.Cells.Find(target_name).Value = myArr(y, n) Next myTem.PrintOut 'アクティブシートの印刷 Application.DisplayAlerts = False '画面警告表示を非表示 myTem.Delete '「印刷中」のシートを削除 Application.DisplayAlerts = True '画面警告表示を非表示を元に戻す Next End Sub

  • ヒアドキュメント内での変数の扱い

    ヒアドキュメント内で変数を入れるとそれ以降の文字が出てきません 半角スペースで変数の後を1つあけてやるとうまく出ますが、表示にも半角スペースが空くので見栄えが良くないので修正したいのですが、どうしたらいいでしょうか。 \を変数の後に入れてみましたが、これでも変数の後は表示されたのですが、\まで表示されてしまいます。 例: $foo = "変数"; print<<<DOC_END 文字$fooあと DOC_END; これだと「あと」が表示されない $foo = "変数"; print<<<DOC_END 文字$foo\あと DOC_END; これだと「文字変数\あと」となる \の代わりに半角スペースを入れると変数とあとの間に半角スペースも表示される

    • ベストアンサー
    • PHP
  • 日本語だからエラーになるのかな(VBA)

    エクセルやアクセスで原因のわからない実行時エラーが出るのですが プロシージャー名やオブジェクト名や変数名に日本語で命名しているのですが それが原因でエラーが発生する事ってありますか? 全て英文字に書き換えるべきなのでしょうか?