質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Access

Accessはマイクロソフトによるリレーショナルデータベース管理システムです。オブジェクト指向のアプリケーション作成に対応しており、テーブルや編集をはじめ、クエリ生成、入力フォーム作成、レポート作成など一通りの機能を備えています。

Q&A

解決済

5回答

10604閲覧

ACCESS VBA

hrkst007

総合スコア7

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Access

Accessはマイクロソフトによるリレーショナルデータベース管理システムです。オブジェクト指向のアプリケーション作成に対応しており、テーブルや編集をはじめ、クエリ生成、入力フォーム作成、レポート作成など一通りの機能を備えています。

0グッド

0クリップ

投稿2018/02/12 12:48

前提・実現したいこと

やりたいことは
ACCESSのVBAでメインフォームからサブフォームの新規レコードに移動したい。

発生している問題・エラーメッセージ

実行時エラー '2105' 指定したレコードに移動できません。 となりエラーとなってしまいます。

該当のソースコード

メインフォーム:F001_メイン
サブフォーム:F002_サブ

ACCESS VBA

DoCmd.OpenForm "F002_サブ", acNormal, "", "", , acNormal DoCmd.GoToRecord acForm, "F002_サブ", acNewRec ←ここで実行時エラーとなります、

試したこと

ACCESS2007では上記のコードで問題なく動くのですが、ACCESS2016では実行時エラー(2105)となってしまいます。

補足情報(FW/ツールのバージョンなど)

※ACCESS 2010、2013でも同様にエラーになります。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sousuke

2018/02/13 01:46

件名は質問内容を簡潔に記したものがよろしいかと
guest

回答5

0

「F002_サブ」というのはメインフォームのサブフォームコントロールに埋め込まれたものですか。

提示のコードは、「F002_サブ」を別フォームとして開いて、そのフォームで新規レコードに移動するコードになってますが、それが希望のことですか。


サブフォームコントロールに埋め込まれたものだとしたら、下記のようなコードになります。

メインフォームのモジュールのコード

vba

1Me.サブフォームコントロール名.SetFocus 2DoCmd.GoToRecord , , acNewRec '※1

※1 第1引数、第2引数を省略するとフォーカスのあるフォームのレコード移動になる。
あるいは、

vba

1Me.サブフォームコントロール名.Form.RecordSet.AddNew

こちらの方法では、フォーカス移動させる必要はない。


別フォームとして開くのが希望なら、提示のコードで問題ないはずです。そのエラーが出るなら、フォームのレコードソースが更新不可になっているか、「追加の許可」が「いいえ」になっいるかが原因と考えられます。

投稿2018/02/13 01:09

hatena19

総合スコア33620

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hrkst007

2018/02/14 13:51

ご回答ありがとうございます。別フォームで開くのが希望でして、フォームのレコードソースや追加の許可を確認しましたが、問題ありませんでした。 1番気になるのが、ACCESS2007で問題なく動いていたものが、ACCESS2016で動かなくなるのが、何故なのか、色々ネット等で調べましたが参考にになる情報がありませんでした。同じソースコードでもACCESSのバージョンによって動作が変わってしまうのでしょうか。 素人的な質問で申し訳ありません。
hatena19

2018/02/15 00:53

開いたフォームがアクティブになる前にレコード移動しているのかも。 Forms!フォーム名.Recordset.Addnew で移動したらどうでしょう。 これならアクティブでなくても移動できますので。
guest

0

サブフォームの詳細のプロパティに『可視』という項目があり、ここがいいえになっていたので、はいにしたら、解決しました。
回答いただいた皆さんありがとうございました。

投稿2018/02/24 02:07

hrkst007

総合スコア7

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

要件は大体分かるんですがコードを見るとちょっと状況がよくわかりません。
メインフォーム:F001_メイン
サブフォーム:F002_サブ
であるなら「F001_メイン」は既に開いていて、その中に「F002_サブ」が
サブフォームコントロールに埋まっているものと想像するんですが

VBA

1DoCmd.OpenForm "F002_サブ", acNormal, "", "", , acNormal

↑これがあるのでどういう状況なのか非常に迷います。

「メインフォームからサブフォームの新規レコードに移動」とあるので
サブフォームコントロール名にSetFocusしacNewRecすればいいはずです。

VBA

1Me.<サブフォームコントロール名>.SetFocus 2DoCmd.GoToRecord , , acNewRec

#検証
同じAccess2013でもエラーになるものと出ないものがあるようです。
windows server 2012R2の「15.0.4981.1001」では失敗。
windows10の「15.0.4963.1001」ではエラーが出ません。OSも違いますが
Accessのバージョンのせいかなと思います。

投稿2018/02/13 01:40

sousuke

総合スコア3828

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

フォーム名を書かれても中身がわからないとなんとも・・・
レコードソースに問題がないのであれば、SetFocusを挟んでみたらどうでしょう

投稿2018/02/13 00:02

Mustang32861341

総合スコア100

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

リンクフィールドのデータが正しく連結していない可能性が高いような気がします。

レコードソースはクエリーですか?
クエリーであれば、そのクエリーの最大レコード数の制限が入っていたりしませんか?

投稿2018/02/12 14:57

sazi

総合スコア25138

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問