Access (一般機能)

Accessの一般機能に関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 10 Home : Access 2016)
「Ctrl+;での和暦挿入」と「フォーム部品の貼り直し」について
投稿日時: 17/12/14 11:58:28
投稿者: lucid

質問1
データ型が日付/時刻型のフィールドを用意して
書式をge\年m\月d\日
定形入力を>L99\年99\月99\日;0;_
にして日付を和暦で入力できるようにしたのですが
Ctrl+;で今日の日付をショートカット入力することができなくなってしまいました。
これはそういう仕様なのでしょうか。和暦にした日付/時刻型フィールドにCtrl+;で今日の日付を入れることはできないのでしょうか。
 
質問2
質問1のように日付/時刻型フィールドに和暦を入力できるように変更を加えた場合
フォームのフィールドは一旦削除して貼り直さないと変更が反映されないように思うのですが
わざわざ貼り直さなくてもフィールドの変更を反映する方法は存在するのでしょうか。
 
以上です。よろしくお願いいたします。

回答
投稿日時: 17/12/14 13:36:38
投稿者: hatena
投稿者のウェブサイトに移動

lucid さんの引用:
Ctrl+;で今日の日付をショートカット入力することができなくなってしまいました。
これはそういう仕様なのでしょうか。和暦にした日付/時刻型フィールドにCtrl+;で今日の日付を入れることはできないのでしょうか。

そういう仕様でしょうね。
Ctrl+;だと yyyy/mm/dd形式の西暦で入力されますので。
 
lucid さんの引用:
質問2
質問1のように日付/時刻型フィールドに和暦を入力できるように変更を加えた場合
フォームのフィールドは一旦削除して貼り直さないと変更が反映されないように思うのですが
わざわざ貼り直さなくてもフィールドの変更を反映する方法は存在するのでしょうか。

貼り直さなくても、テキストボックスの「定型入力」プロパティに、
>L99\年99\月99\日;0;_;;_
と設定すればいいでしょう。
 
 
和暦定型入力とCtrl+;入力を両立させるには、VBA必須になりますね。
それでも、やりたいということなら、その旨返信ください。

投稿日時: 17/12/14 14:40:34
投稿者: lucid

hatenaさん
 
ご回答いただきありがとうございます。

引用:
和暦定型入力とCtrl+;入力を両立させるには、VBA必須になりますね。

ぜひ実現させたいです。教えていただけると非常に助かります。

回答
投稿日時: 17/12/14 17:04:57
投稿者: hatena
投稿者のウェブサイトに移動

フォームのデザインビューで
日付入力用のテキストボックスを選択します。
プロパティの「イベント」タブで「キークリック時」のドロップダウンリストから[イベント プロシージャ]を選択します。右端のビルドボタン[...]をクリックします。
VBAウィンドウが開き、
 

Private Sub テキストボックス名_KeyDown(KeyCode As Integer, Shift As Integer)

End Sub

 
と表示されますので、その真ん中に下記のようにコードを記述します。
 
Private Sub テキストボックス名_KeyDown(KeyCode As Integer, Shift As Integer)

    If KeyCode = 187 And Shift = acCtrlMask Then
        KeyCode = 0
        Me.テキストボックス名.Text = Format(#2/1/2017#, "gee\年mm\月dd\日")
    End If

End Sub

 
メニューの[デバッグ]-[****のコンパイル]をクリックします。
[ファイル]-[[****の上書保存]をクリックします。
 
以上です。
 
テキストボックス名は実際のテキストボックス名にしてください。
****の部分はプロジェクト名(ファイル名)になります。

投稿日時: 17/12/14 17:33:27
投稿者: lucid

hatenaさん
 
わかりやすく解説していただきありがとうございます。
今試しているのですがエラーが出てしまって悩んでいます。
このエラーに心当たりなどはないでしょうか。
 
 

引用:
イベントプロパティに指定した式 キークリック時でエラーが発生しました:Microsoft AccessがOLEサーバーまたはActiveXコントロールと通信しているときにエラーが発生しました。
* マクロ名、ユーザー定義関数名、[イベントプロシージャ]以外の式が指定されています。
* 関数、イベント、マクロの評価でエラーが発生しました。
 
このエラーは、イベントのロジックの場所を評価できないためにイベントを実行できなかった場合に発生します。たとえば、フォームの "OnOpen/開く時" プロパティが =[フィールド] に設定されている場合、イベントが開始されたときに、マクロまたはイベントの名前が実行対象として予期されるため、このエラーが発生します。

投稿日時: 17/12/14 18:13:06
投稿者: lucid

新規で作成したデータベースだとエラーなく動きました。
もう少し原因を探ってみます。

回答
投稿日時: 17/12/14 23:26:47
投稿者: hatena
投稿者のウェブサイトに移動

lucid さんの引用:
今試しているのですがエラーが出てしまって悩んでいます。
このエラーに心当たりなどはないでしょうか。

 
とりあえず、[ファイル]-[データベースの最適化/修復]を実行してみてください。
 
それでだめなら、
新規にフォームを作成して、「レコードソース」等のプロパティをエラーの出るフォームと同じに設定して、エラーの出るフォームからすべてのコントロールをコピーして貼り付けてください。
その後、イベントプロシージャを設定してみてください。
うまく動いたら、エラーの出るフォームは削除してください。

投稿日時: 17/12/15 11:22:58
投稿者: lucid

hatenaさん
 
フォームを作り直して調べてみたところエラー原因は結局フィールド名にありました。
@〜Sまでの機種依存文字はフィールド名に使用できていたのですが
㉑以降の文字を持つフィールドがフォームに含まれていると先のエラーが出るようです。
キークリック時イベントが反応するようになったので先に進めそうです。

投稿日時: 17/12/15 11:40:14
投稿者: lucid

hatenaさん
 
詳細なアドバイスをしていただきありがとうございました。
頂いたコードを動かすことができました。
どうもありがとうございました。