Access VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


1410 / 2272 ツリー ←次へ | 前へ→

【7293】フォーム名の長さの制約? ふぁんた 06/2/17(金) 8:13 質問[未読]
【7295】Re:フォーム名の長さの制約? ふぁんた 06/2/17(金) 10:11 質問[未読]
【7303】Re:フォーム名の長さの制約? YU-TANG 06/2/17(金) 13:54 発言[未読]
【7305】Re:フォーム名の長さの制約? ふぁんた 06/2/17(金) 14:37 お礼[未読]
【7304】Re:フォーム名の長さの制約? YU-TANG 06/2/17(金) 14:08 発言[未読]
【7306】Re:フォーム名の長さの制約? ふぁんた 06/2/17(金) 14:59 お礼[未読]

【7293】フォーム名の長さの制約?
質問  ふぁんた  - 06/2/17(金) 8:13 -

引用なし
パスワード
   職場のWindows98+access97でいつも使っている以下のVBA
(フォームを開き、フォームの中のコマンドボタンの可視を はい にする)
で、
−−−−−−−−−−−−−−−−−−−−−−
On Error GoTo temp6_Err

  DoCmd.OpenForm "F09_予防短期目標", acNormal, "", "", , acNormal
  DoCmd.Restore
  DoCmd.GoToRecord acForm, "F09_予防短期目標", acLast
  Forms![F09_予防短期目標]![bt].Visible = True

temp6_Exit:
  Exit Sub
temp6_Err:
  MsgBox Error$
  Resume temp6_Exit
−−−−−−−−−−−−−−−−−−−−−−
で、
  Forms![F09_予防短期目標]![bt].Visible = True
の行で以下のようなエラーがでました。
−−−−−−−−−−−−−−−−−−−−−−−−
マクロの式または Visual Basic コードで参照されている 'F09_予防短期目標' フォームが見つかりません。
* 参照しようとしたフォームが閉じているか、このデータベースにはありません。
* このフォームの Visual Basic モジュールでコンパイルエラーが発生しました。
−−−−−−−−−−−−−−
つまり、フォームが開いているのに、認識されないのです。

自宅に帰り、WindowsXP+access97では、同じエラーがでました。
access2002にデータベース変換したらエラーはでません。
access97 でも、値の代入マクロではエラーはでません。

当掲示板の過去ログなどをさがしましたが、みつからず、
問題のフォームの名前をいろいろ変えてみました。
F09_予防短期目標……×
F09_予短目……○
F09_yotan……○
F_予防短期目標……○
F09_予防短期目標試作……×
でした。

フォーム名の長さの制約 いったものがあるのでしょうか?
今後の参考にいたしたく、ご存知の方ご教示願えないでしょうか。
なお ヘルプには、「長さは半角で 64 文字以下です」という記載はありました。

【7295】Re:フォーム名の長さの制約?
質問  ふぁんた  - 06/2/17(金) 10:11 -

引用なし
パスワード
   追伸:職場のPCでは
F09_予短目……もエラーとなりました。
F09_yotan は エラーがでません。

こういう現象は、私のPCだけなんでしょうか?

【7303】Re:フォーム名の長さの制約?
発言  YU-TANG WEB  - 06/2/17(金) 13:54 -

引用なし
パスワード
   同じ環境が無いので検証できませんが、オブジェクト名に 2 バイト文字を
使っているからではないでしょうか。

仕様上は明記されていませんが、古い Windows OS、古い Access ではマルチ
バイト キャラクターセット(以下 MBCS)を考慮していない実装が混じって
いるため、無用なトラブルを避けるためにオブジェクト名には 2 バイト文字
を使わないというのが鉄則でした。
Unicode をサポートした OS とアプリの組み合わせでは多少マシになったよう
ですが、それでも多くの開発者は未だにオブジェクト名には 2 バイト文字を
使わないようにしているはずです(と言うか、少なくとも私はそう)。

Access が Unicode をサポートしたのは Access 2000 以降、Windows OS が
Unicode をサポートしたのは NT 系の 4.0 以降です。
Windows 98, ME は Unicode 部分サポートのため、Access 97 と Windows 98
というのは MBCS の取り扱いが弱い組み合わせの代表例になります。

で、Access に限った話ではありませんが、MBCS における有名な問題の一つに
0x5c 問題というのがあります(他にもたくさんありますが)。
これは MBCS 文字の 2 バイト目がたまたま 0x5c だと、エスケープシーケンス
の「\」と誤認して処理がおかしくなるというもので、代表的な該当文字に
「予」や「表」、「ソ」、「十」などがあります。
偶然かもしれませんが、今回の事例でフォーム名に該当文字が含まれている
のが気になりますね。
興味があれば、「0x5c」でググってみてください。

私だったら即刻オブジェクト名に 2 バイト文字の使用を禁止します。
どのみち今から Access 97 や Windows 98 を M$ が改修してくれる可能性は
無いわけですし、後はどう自衛するかだけではないでしょうか。

【7304】Re:フォーム名の長さの制約?
発言  YU-TANG WEB  - 06/2/17(金) 14:08 -

引用なし
パスワード
   追記ですが。

> Forms![F09_予防短期目標]![bt].Visible = True

Forms("F09_予防短期目標")![bt].Visible = True

…で、通るかどうか試してみてもいいでしょう。

ただし、仮にこれで通ったとしても、そのまま 2 バイト文字を
使い続けるのは、地雷を埋めたままのようなものなので、
まったくもってお奨めできませんが。

【7305】Re:フォーム名の長さの制約?
お礼  ふぁんた  - 06/2/17(金) 14:37 -

引用なし
パスワード
   YU-TANG さん ご教示ありがとうございました。

》オブジェクト名に 2 バイト文字を
》使っているからではないでしょうか。

実は、いままで、ほとんどマクロで処理しており、
VBAは全くの初心者です。
で、漢字の名前に なれていたのでした。

これからは、名前は半角英数 を肝に銘じたいとおもいます。

【7306】Re:フォーム名の長さの制約?
お礼  ふぁんた  - 06/2/17(金) 14:59 -

引用なし
パスワード
   YU-TANG さん

》「予」や「表」、「ソ」、「十」などがあります。
》偶然かもしれませんが、今回の事例でフォーム名に該当文字が含まれている
》のが気になりますね。

なるほど! 
それで、今まで、漢字をつかったフォーム名でも問題なく動いていたVBAが
今回、エラーになったという可能性があるわけですね。

勉強になりました。

1410 / 2272 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
1078229
(SS)C-BOARD v3.8 is Free