
お世話になります。
仕訳伝票の入力画面を作成しています。
仕訳登録フォームに サブフォームを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も見ています
-
サブフォームに対してGoToRecordするには?
その他(Microsoft Office)
-
Access サブフォームでの選択行の取得
その他(データベース)
-
Accessレポートのチェックボックスを大きくする方法
Access(アクセス)
-
-
4
Accessで別テーブルの値をフォームに表示したい
その他(データベース)
-
5
レコードを保存するコード アクセスvba
その他(Microsoft Office)
-
6
Accessで、フォームからフォームへ値を引き継ぐやり方
Access(アクセス)
-
7
アクセスでテキストボックスの値が空白だったら
Access(アクセス)
-
8
ACCESSのフォームで次のレコードに移動しない方法を教えてください
その他(データベース)
-
9
Access メインフォーム サブフォームにて
Access(アクセス)
-
10
Access 複数フォームを開き、画面の最上面にしたいフォームをコント
その他(データベース)
-
11
Accessのフォームにて、詳細行のボタンを行の内容により、表示/非表
その他(Microsoft Office)
-
12
どこにもフォーカスを当てたくない
Access(アクセス)
-
13
Accessでフォームから別フォームのテキストボックスの値を設定する
Visual Basic(VBA)
-
14
ACCESS VBA でのエラー解決の根拠がわかりません エラー「イベントプロパティに指定した式・・
Access(アクセス)
-
15
アクセスのサブフォームからメインフォームヘEnterキーで移動したい!!
Access(アクセス)
-
16
ACCESSでVBAから選択クエリの抽出条件を指定したい
Access(アクセス)
-
17
Accessのサブフォームから値を参照する方法について
その他(データベース)
-
18
[Access]帳票フォームにて連続する非連結コントロールに個々の値を入れるには
Access(アクセス)
-
19
Accessのマクロでモジュールを実行させたい。
Access(アクセス)
-
20
Accessで、サブフォームのあるフォーム内をEnterキーで移動したい
Access(アクセス)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
貸し切りバスを借りた場合の仕訳
-
帳簿についてです。 塗装業の塗...
-
機械リース屋から作動油を買い...
-
見返勘定とは?
-
ACCESSのサブフォームからメイ...
-
労働保険料の仕訳について
-
税理士試験、簿記論の特殊商品...
-
原材料仕入の前払いの仕訳(前...
-
振替伝票の金額にマイナス表示...
-
outlookのメールの自動仕訳につ...
-
受講料の返金について
-
レンタカー事業での仕訳
-
使用人兼務役員の報酬の仕訳
-
マイナスの請求書 仕訳
-
来客の宿泊費
-
会社主催のイベント費用の勘定...
-
振出した手形が相手が忘れてし...
-
略称→A/Cは勘定科目の意味だと...
-
全商簿記3級についてです。 赤...
-
庭木の剪定代の科目は?
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
おすすめ情報