
お世話になります。
仕訳伝票の入力画面を作成しています。
仕訳登録フォームに サブフォームを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で質問しましょう!
似たような質問が見つかりました
- Access(アクセス) Access 登録ボタンからサブフォームの更新 1 2022/07/22 10:23
- Access(アクセス) Dlookupにエラーがでてしまう 1 2022/10/31 14:35
- 財務・会計・経理 この仕訳おかしいでしょうか? 3 2023/01/15 13:08
- Excel(エクセル) Excel VBAについてです。 少しだけ知識はあるのですが、 うまくいかなかったので 質問させてい 3 2022/09/13 18:40
- Excel(エクセル) エクセルマクロで教えてください 2 2022/05/04 09:07
- Visual Basic(VBA) ユーザーフォーム「frm_基本❶」を立ち上げると新規で入力する行数を右下のNoとして表示しています。 1 2023/03/16 19:02
- その他(パソコン・スマホ・電化製品) ASUSの保証期間が短い 2 2023/05/02 11:53
- Visual Basic(VBA) VBA 登録ボタンを省略してエンターキーで作業 4 2022/07/09 22:29
- Visual Basic(VBA) Excel VBA マクロ ある列の最終行迄を参照し、別の列の空白セルに値を入力したいです 2 2023/03/05 02:44
- 確定申告 白色申告のetaxは、手書きで仕上げた申告用紙と収支内訳書をアップロードして提出可能? 1 2023/03/14 04:22
このQ&Aを見た人はこんなQ&Aも見ています
-
サブフォームに対してGoToRecordするには?
その他(Microsoft Office)
-
Access サブフォームでの選択行の取得
その他(データベース)
-
Accessで別テーブルの値をフォームに表示したい
その他(データベース)
-
-
4
どこにもフォーカスを当てたくない
Access(アクセス)
-
5
Accessレポートのチェックボックスを大きくする方法
Access(アクセス)
-
6
アクセスのサブフォームからメインフォームヘEnterキーで移動したい!!
Access(アクセス)
-
7
[Access]帳票フォームにて連続する非連結コントロールに個々の値を入れるには
Access(アクセス)
-
8
アクセスでテキストボックスの値が空白だったら
Access(アクセス)
-
9
Accessのフォームにて、詳細行のボタンを行の内容により、表示/非表
その他(Microsoft Office)
-
10
ACCESSのフォームで次のレコードに移動しない方法を教えてください
その他(データベース)
-
11
Accessで、フォームからフォームへ値を引き継ぐやり方
Access(アクセス)
-
12
Accessで、サブフォームのあるフォーム内をEnterキーで移動したい
Access(アクセス)
-
13
Access 複数フォームを開き、画面の最上面にしたいフォームをコント
その他(データベース)
-
14
Access メインフォーム サブフォームにて
Access(アクセス)
-
15
ACCESSでVBAから選択クエリの抽出条件を指定したい
Access(アクセス)
-
16
Accessのサブフォームから値を参照する方法について
その他(データベース)
-
17
アクセス・別フォームの新規レコードへの移動
Access(アクセス)
-
18
Access VBAでタブコントロールで選択するタブをしていするには。
Access(アクセス)
-
19
アクセス 壊れた? 「ファイルが見つかりません」
Access(アクセス)
-
20
Accessでフォームから別フォームのテキストボックスの値を設定する
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
おすすめ情報