
お世話になります。
仕訳伝票の入力画面を作成しています。
仕訳登録フォームに サブフォームを2つあります。
うまく説明できないのでコーディングを記入しておきます。
これで仕訳登録フォームから仕訳登録サブ借方フォーム
仕訳登録サブ借方フォームから仕訳登録サブ貸方フォームへはカーソルが移動しますが
仕訳登録サブ貸方フォームから仕訳登録フォームへは移動してくれません
マウスを使わずイベントで移動する方法はありますか
メインフォーム 仕訳登録
Private Sub 目的_LostFocus()
DoCmd.GoToControl "仕訳登録サブ借方"
End Sub
サブフォーム1 仕訳登録サブ借方
Private Sub 借方合計_Click()
Forms!仕訳登録!借 = 合計
DoCmd.GoToControl "仕訳登録サブ貸方"
End Sub
サブフォーム2 仕訳登録サブ貸方
Private Sub 貸方合計_Click()
Forms!仕訳登録!貸 = 合計
DoCmd.GoToControl "仕訳登録"
End Sub
「カレントレコードに'仕訳登録'というフィールドはありません」とメッセージにになりますので
Private Sub 貸方合計_Click()
Forms!仕訳登録!貸 = 合計
DoCmd.GoToControl "Forms!仕訳登録!貸"
End Sub
「カレントレコードに'Forms!仕訳登録!貸'というフィールドはありません」
とエラーメッセージになります。
A 回答 (3件)
- 最新から表示
- 回答順に表示
No.3
- 回答日時:
No.2です。
まず、前回の回答の訂正から(汗)
(補足欄の内容にも関わりがあります)
1個目のGotoControlで、「貸」コントロールがあるサブフォームへの移動を
指定してしまうと、メインフォームではなくサブフォーム側の「貸」への
移動になります(汗)
「貸」コントロールがあるサブフォームから、メインフォーム側の「貸」に
移動する場合は、一旦、メインフォーム側にしかないコントロールに移動
させてから、「貸」に移動します。
DoCmd.GotoControl "閉じる"
DoCmd.GotoControl "貸"
'→メイン側の「貸」に移動
※メインフォームにのみ、「閉じる」コマンドボタンがあるという想定です。
逆に、メインフォーム側から、サブフォーム側の「貸」に移動する場合は、
前回間違えて示したように(汗)、一旦サブフォームに移動させたのちに、
「貸」に移動します。
DoCmd.GotoControl "仕訳登録サブ貸方"
DoCmd.GotoControl "貸"
'→「仕訳登録サブ貸方」側の「貸」に移動
> DoCmd.GoToControl "Forms!仕訳登録!伝票No."
GotoControlでは、あくまでコントロール名しか指定できません。
(「Forms!仕訳登録!伝票No.」というような形で、位置を指定することができない)
仮に、メインフォームにしか「伝票No.」テキストボックスがない場合は、
DoCmd.GotoControl "伝票No."
だけで移動できます。
一方、上で訂正させて戴いた件のように、メインとサブの双方に同名のテキスト
ボックスがある状況で、サブフォームからメイン側に移動させたい場合は、
DoCmd.GotoControl "閉じる"
DoCmd.GotoControl "伝票No."
とします。
ご質問のように、「Forms!仕訳登録!伝票No.」として一発で対応したいという
ことでしたら、やはり「SetFocus」の方が目的に沿うと思います。
Forms!仕訳登録![伝票No.].SetFocus
(別のフォームのコントロールも指定可能)
または
Me.Parent![伝票No.].SetFocus
(VBAの記述場所がサブフォーム内で、移動先がメインフォームの場合のみ)
※「伝票No.」の「.」と、「.SetFocus」の「.」を区別して認識させるために、
「伝票No.」は半角の角括弧([ ])で囲む必要があります。
再度のご回答感謝します。
詳細なご説明に長時間掛けていただいたと推察いたします。
色々勉強になりました。
追伸
内容説明のないままにしてすみません。
メインフォームに 借 貸 のテキストボックスがあり、
二つのサブフォームの合計をこのフィールドに送り、メインフォームで合計の比較をやっています。
No.2
- 回答日時:
「DoCmd.GotoControl」は、その名の通り「コントロールの移動」を行うもの
なので、移動先にはコントロール名を指定してやる必要があります。
従って、「貸」コントロールに移動したい場合は、「貸」を指定してやります。
Private Sub 貸方合計_Click()
Forms!仕訳登録!貸 = 合計
DoCmd.GotoControl "貸"
End Sub
ご質問の例では、「仕訳登録」という「フォーム名」を指定しているために、
「該当コントロールがない」というエラーが返されています。
なお、「サブフォームの方はフォーム名を指定しているのに」と思われるかも
しれませんが、サブフォームは
「メインフォーム上のコントロールとしての名前」と、
「表示するのに使用するフォーム名」
という二つの名前を持っています。
ただ、この2つの名前は同じにすることもできますので、この2つが同名だった
場合は、上記のような疑問が発生してしまうこともあります。
(試しに、メインフォームをデザインビューで開いて、サブフォームの外枠を
ダブルクリックするなどしてサブフォームのプロパティシートを開き、
『その他』タブの『名前』を、現在の「仕訳登録サブ借方」から
「サブフォーム1」にすると、データ表示は今まで通りにできますが、
「DoCmd.GotoControl "仕訳登録サブ借方"」のコードは、ご質問のメイン
フォームに移動させようとした場合と同様のエラーになるようになります)
(なお、「表示するのに使用するフォーム名」というのは、『データ』タブの
『ソースオブジェクト』のことです)
※「仕訳登録サブ貸方」サブフォームにも「貸」という名前のコントロールが
ある場合は、以下のようにするとメインフォーム側の「貸」に移動できます。
(一旦、「貸方合計」ボタンがあるサブフォームへのGotoControlを行う、と)
Private Sub 貸方合計_Click()
Forms!仕訳登録!貸 = 合計
DoCmd.GotoControl "仕訳登録サブ貸方"
DoCmd.GotoControl "貸"
End Sub
・・・「マクロをVisual Basicに変換」を使うと『コントロールの移動』は
「DoCmd.GotoControl」に変換されるので、そこでこの方法を覚えられたのかと
推測しますが、VBAで組まれる場合は、No.1の方が回答されている、「SetFocus」
を覚えてしまわれた方が簡単かもしれません(汗)
(実際の構文としては、「Me.Parent!貸.SetFocus」でもOkのはずです:
「Parent」と「SetFocus」の前は「.」、「貸」の前は「!」なので注意)
この回答への補足
詳しいご回答有難うございます。
SetFocusで解決しましたが
仕訳登録フォーム に 伝票No. というテキストボックスがあります。
DoCmd.GoToControl "仕訳登録"
を
DoCmd.GoToControl "Forms!仕訳登録!伝票No."
としましたがエラーになります
参考までにDoCmd.GoToControlを使ってどのようになるのかお教えいただけないでしょうか
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
プロが教える店舗&オフィスのセキュリティ対策術
中・小規模の店舗やオフィスのセキュリティセキュリティ対策について、プロにどう対策すべきか 何を注意すべきかを教えていただきました!
-
Access サブフォームでの選択行の取得
その他(データベース)
-
サブフォームに対してGoToRecordするには?
その他(Microsoft Office)
-
レコードを保存するコード アクセスvba
その他(Microsoft Office)
-
4
Accessのサブフォームから値を参照する方法について
その他(データベース)
-
5
サブフォームの新規レコードに移動したい アクセス
Access(アクセス)
-
6
Accessで、フォームからフォームへ値を引き継ぐやり方
Access(アクセス)
-
7
アクセスで#エラーを表示させない方法は?
Access(アクセス)
-
8
アクセスのサブフォームからメインフォームヘEnterキーで移動したい!!
Access(アクセス)
-
9
AccessのRefresh・Requery・Repaintの違い
Access(アクセス)
-
10
Access 別フォームへの再クエリ(更新)がしたい。
その他(データベース)
-
11
親フォームからサブフォームのレコードソースを設定
Access(アクセス)
-
12
どこにもフォーカスを当てたくない
Access(アクセス)
-
13
Accessで、サブフォームのあるフォーム内をEnterキーで移動したい
Access(アクセス)
-
14
ACCESS フォームからサブフォームのデータを更新・入力したい
Access(アクセス)
-
15
サブフォームのイベント取得
Visual Basic(VBA)
-
16
ACCESS──メインフォームでサブフォームのレコード件数をカウントしたい
Access(アクセス)
-
17
Accessのフォームにて、詳細行のボタンを行の内容により、表示/非表
その他(Microsoft Office)
-
18
Access メインフォーム サブフォームにて
Access(アクセス)
-
19
ACCESSサブフォームにデータ反映されない
Access(アクセス)
-
20
Accessのフォーム上にレコード数とレコード番号の表示
その他(データベース)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
人気Q&Aランキング
-
4
振替伝票の金額にマイナス表示...
-
5
経理事務の筆記試験があるのですが
-
6
期首繰越剰余金
-
7
機械リース屋から作動油を買い...
-
8
普通預金に振込まれた家賃収入...
-
9
先掛割引料の仕訳
-
10
使用人兼務役員の報酬の仕訳
-
11
ACCESSのサブフォームからメイ...
-
12
支払手形の仕訳について
-
13
司法書士への支払いでの仕訳に...
-
14
マイナスの請求書 仕訳
-
15
outlookのメールの自動仕訳につ...
-
16
自己株式の無償取得の会計処理
-
17
開業前の原材料と製品の仕訳に...
-
18
商品が破損していた場合の仕訳...
-
19
Outlookのccメールを区別する
-
20
経理 諸口残高について
おすすめ情報
公式facebook
公式twitter