スキップしてメイン コンテンツに移動

ACCESSで文字数を規定する書式設定をしてあるテキストボックスをクリックしたときのキャレット位置の操作

タイトルだけ観ると、随分と長い複雑なもののように見えるけど、たいしたことない。

ACCESSのあるフォームに、こういう書式設定がしてある。

書式:"00000"
文字配置:左

この時、テキストボックスの表示幅が5桁を表示するぶんより十分余裕があったとき、その余裕部分をクリックすると、書式で規定した5文字目ラストにキャレットが置かれてしまう。

この時そのまま数字を入力してしまうと、書式エラーで引っかかる。それがユーザーが面倒だ、キャレットを左端、つまり先頭において欲しい、という。

この問題はキーボード操作ではF2を押すとキャレットは先頭に移動するのだが…

ユーザーが複数いて、その人全部にそれぞれ同じように説明するのも面倒なんで、問題のテキストボックスにクリックイベントが発生したら、F2をSendKeysで送るようにした。ってはなしで。

SendKyes "{F2}", True

コメント

このブログの人気の投稿

対処例:Accessフォームでチェックボックスが思うように設定できない

開発プラットフォームとしてAcccessという事は多い。 そして何気に不思議な動作をする事が多いのも事実。 今回であったのは、フォームに置いたチェックボックスが、フォームを開いた際に思ったように振舞ってくれない、というもの。 このチェックボックスは規定値=FALSEで設定してあって、人の操作以外でこのチェックボックスの値は操作していない。 そしてこのチェックボックスを置いたフォームを開くと… 問題のチェックボックス、チェックがついた状態で描画される!!! こまったチャンである。 時折は意図したとおりにOFFの状態で開く場合もあるものの、まれ。 ここはしっかりユーザーの操作(チェックボックスをONにする)に基づき、関連の項目を入力してもらう、という動作をさせたいし、また他へのI/F項目でもあって、しっかりさせたい。ちなみに、TripleState プロパティは Falseに設定してある。 簡単にググッてみたものの、ちょっと同様の事例や対処は見つからず。いくつか試したが、うまく行かない。 で、結論から書くと、こういう対処をした。 Form_OPENイベントの際に、問題のチェックボックスに以下の操作を実行 ・問題のチェックボックスにフォーカス設定 ・問題のチェックボックスに対して、SendKeys でスペース(" ")一文字投げつけ ・問題のチェックボックスの Value 値を確認。True の場合、もう一回SendKey でスペース(" ")一文字投げつけ 発想としては、チェックボックスがカレントな状態のとき、スペースキーで値が操作できる事を思い出し、ぶつけてみた。 でも、実は最初はうまく行かず。 はて? で、 SendKeys のリファレンスを改めて眺めて、 Wait オプションがある事を思い出した。 解説するまでもないが、これが True の場合、そのキーが処理されるまでVBAは次の実行をまつ。デフォルトでは False で実行される。なので、Accessが、なげつけられた?(いや、自分で自分に投げているわけだから…)スペースキーを受け取る前にVBAが進んでるか?と思い、以下に書き換えてやってみた。 SendKeys " ", True ...

VBS で引数を受け取るサンプル

WScript.Arguments に引数要素が配列で格納されているので、これを取り出す。 =========================================== '############################# 'パラメータ=オーダーIDの取り出しとセット '############################# Dim oParam 'パラメータオブジェクト Dim strPrm0  'パラメータ要素格納 Set oParam = WScript.Arguments strPrm0 = oParam(0) Wscript.echo strPrm0 =========================================== これを引数あり、引数なしでそれぞれ実行してみる。 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ >cscript.exe test.vbs a a >cscript.exe test.vbs test.vbs(9, 1) Microsoft VBScript 実行時エラー: インデックスが有効範囲にありません。 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ strPrm0 = oParam(0) の場所で怒られている。 引数なしで起動した場合には相応の対応をしたい。 そこで、上記を書き換える。 WScript.Arguments のCount ポロパティの値をチェックして動作を切り分ける方法。 =========================================== '############################# 'パラメータ=オーダーIDの取り出しとセット '############################# Dim oParam 'パラメータオブジェクト Dim strPrm0  'パラメータ要素格納 Set oParam = WScript.Arguments ...

SKYSEAの外部デバイスへのコピー抑止を回避する方法

社内のシステム屋としてあまりほめられた事ではないが。 うちの会社ではSKYSEAを導入していて、配布するPCにはそのクライアントがインストールされている。 でも時としてそれが邪魔(会社としては邪魔するために入れているのだから当たり前だが…)な時がある。 そこでこんなのをこしらえた。 <skeseaYokushi.bat> ============================================= rem SKYSEAの外部デバイスへのコピー禁止を回避する為にサービスをとめる。 echo off sc stop "scvcabproxysvr" sc stop "astexagt" sc stop "scvsvc" sc stop "scv logagentservice" sc stop "logsvr" sc stop "icssvc" echo ============================================= SKYSEAは全部で6つのサービスで出来ている。それをとめてしまう、というバッチコマンド。ただ、このサービス相互に依存関係があり、いっぺんには停止が出来ない。 さらに厄介なのが、サービスをとめても、後ほど自動的に再起動がかかる、というつくり。ある程度時間がかかるファイルコピーでは困ってしまう。 そこで上記のコマンドをタスクスケジューラで連続的に起動してサービスをとめ続けてしまえ、とやったのが以下 <skyseayokusei.xml> ============================================= <?xml version="1.0" encoding="UTF-16"?> <Task version="1.2" xmlns="http://schemas.microsoft.com/windows/2004/02/mit/task">   <R...