サブフォーム内のコード
Public Sub Form_AfterUpdate()
Me.Requery
Dim maxDate
maxDate = DMax("年月日", "T管理", "管理ID=" & Me!txt管理ID)
If Me.Parent!年月日new = maxDate Then
Else
Me.Parent!new = maxDate
End If
End Sub
set mya=createobject("adodb.connection")
myb="接続先フルパス"
with createobject("excel.applcation")
set myc=.workbooks.add.activesheet.range("a1")
.visible=true
end with
mya 接続文字列
.open
set myd=.execute("クエリ名")
myc.copyfromrecordset myd
end with
SQL文を拝見しましたが、特に問題はなさそうです。
こうなると、デバッグ作業をすることになりますが、実ファイルのないこちらでは無理です。
下記のリンク先を参考にステップ実行によるデバッグ作業を行ってください。
最も基本的なステップ実行 - Excel VBA
テーブルにしてみたところ、リンクが切れている部分についてのエラーは出ましたが、それ以外のエラーは出ませんでした。SQL文ですが、そのまま掲載するのもちょっとあれなので、お送りさせていただきますね。ありがとうございます。
クエリのデザインビューで下記のように設定してください。
あるいは、
前者は[tgl_生死]が押されてないときに、
「生死」がNullのレコードが、前者は表示されますが、後者は表示されません。
エラーメッセージから推測すると、サブフォームのレコードソースのクエリに問題があるように思えます。
サブフォームのレコードソースをクエリではなくテーブルにしたらどうなりますか。
それでエラーが出ないなら、クエリに問題があるということになります。
その場合は、現状のクエリのSQL文を提示してください。
ありがとうございました。解決しました。
ありがとうございます。再確認しました。サブフォームコントロール名で間違いありません。サブコントロール名とサブフォームコントロール名が同じものに設定されていたので、試しにさぼフォームコントロール名を変更して試してみましたが、エラー発生状況は同じでした。
おっしゃるとおり、デバックボタンを押すと該当の行が反転される状況です。
はい、その通りです。
Windowmode:=acDialog を指定して(ダイアログモードで)開くと、開いたフォームを閉じるまで次のコードに進みません。
閉じた後に次のコードが実行されます。
「実行時エラー2471 クエリパラメーターとして指定した式でエラー'年月日'が発生しました」というエラーが出たときに、デバッグボタンをクリックするとその行が反転表示されるのですか。
念のために確認ですが、上記の「Fサブ管理」というのはサブフォームコントロール名ですか。
サブフォーム名とサブフォームコントロール名は別物です。
サブフォームとサブフォームコントロールの違いとは? - hatena chips
ご教示ありがとうございます。今回の件は、メインのパソコンから手動で操作します。システム移管中でして少しの間だけの対処法でしたので。また、宜しくお願い致します。
ご確認ありがとうございます。
エラーが出るコードはここになります。
ありがとうございます。そこまで考えが及びませんでした。
スミマセン、F管理を閉じるとき、F管理総合をrequeryしないといけないと思っていたのですが、教えていただいた内容だとF管理を開くときにrequeryしているようです。
ダイアログだと閉じるときrequeryになるということでしょうか?
Forms!F管理総合 と 他フォームが同時に開いていることがないということが保障されていればいいですが、
もし、同時に開いていて、他フォームから「F管理」を呼び出したとき、意図しない動作になる恐れがあります。
現状、同時に開くことがなくても、将来、機能を追加したり、仕様変更でそうならないとも限りません。
自分がするなら、「F管理」をダイアログモードで開いて、「F管理総合」の方で自身を再クエリするという方法を使いますね。
「F管理総合」のモジュール
「F管理」のモジュール
ご参考までに。
そのエラーがでるコードはどこですか。
On Error Resume Nextを使えばいいですね。解決しました。
ありがとうございます。大変参考になりました。
しかし、今回のコードのせいかエラーが出ます。
「実行時エラー2471 クエリパラメーターとして指定した式でエラー'年月日'が発生しました」
エラーを発生させない方法はありますでしょうか。
サブフォームのモジュールの
の
Private
をPublic
に修正メインフォームのコマンドボタンのクリック時を下記のように記述
リボンの[ファイル]→[オプション]クリックで[Accessのオプション]ダイアログが開く。
[クライアントの設定]→[フィールド移動の動作]で
[フィールドの先頭に移動]または[フィールドの最後に移動]を選択すればいいでしょう。
なるほど!背面に置く発想がありませんでした。また、わかりやすいように背景色を統一するのも参考にさせていただきます。教えていただき感謝です。
Djoin("従業員名","T_従業員","部署ID=" & Nz([T_従業員]![部署ID],-1))
でどうでしょうか。-1 は存在しないIDならなんでもいいです。
関連するコントロール(参照しているコントロール)の近くの空いている所に配置してます。
隙間がないとき、「最背面に移動」で関連するコントロールの背面に隠してます。
関連するものがないときは、適当に空いている所に配置します。
また、非表示コントロールが分かりやすいように背景色を薄いピンクにしてます。
ちなみにcount関数は値の数を数えるので、今月のデータ数を数えるのであればsumのほうが良いと思うのですが。
Count関数
また、集計関数を使う場合、ヘッダーやフッターに設定している他の集計関数でエラーがあると
まとめてすべて「#エラー」と表示されるようなのでご注意ください。
(サンプル作っててALLエラーが出ると思ったらこれでしたorz
なるほど。フィールド名にしていたつもりでしたが、テキストボックスと同一になっており、テキストボックス名を見に行っていたようです。
テキストボックス名を変更したらうまくいくようになりました。ありがとうございました。
[月] はレコードソースに含まれるフィールド名ですか。
テキストボックス名だとエラーになります。
集計関数の引数の式は、フィールド名を含まないとエラーになります。
(フィールドを対象に集計するものなので)
WEB検索すればサンプルコードは見つかると思いますので、試してみては。
あるいは、
手動でそのMDBへのリンクテーブルを作成することはとできますか。
できるなら、DoCmd.TransferDatabase メソッドでリンクテーブルを作成すればどうでしょうか。
いろいろ、試してみてダメな場合、
ネットワーク環境に依存する問題だと思いますので、同じ環境を用意できないこちらからはこれ以上のアドバイスは難しいですね。
たまたま、同じようなエラーを経験した人が見てればヒントは出せるかもしれませんが。
この件について、改めて質問させていただきたく投稿致します。
「F管理」を「F管理総合」から開くときと、直接他フォームの履歴から開くパターンがあります。
他フォームから開くときは「F管理総合」を開いていないのでエラーが起きるのですが、
「F管理総合」から開くときもあるので下記コードは残したいです。
条件分岐できますでしょうか。
大変申し訳有りません。今日手動でいじってみた所odbc に接続が失敗しました、というエラーが出て開けませんでした。一台のパソコンからのみ開く事が出来る様です。開けたのは旧システムのmdbファ
イルでした。この状態は、どう言う状態でしょうか?
オンラインの状態のmdbファイルです。属性n、オフラインでの使用不可になっています。プロパティの詳細です。セキュリティタブが無かったためフルアクセスは、無理そうです。daoだと接続出来ますか?ご教示お願い致します。
daoは分かりません。どの様な情報が足りないでしょうか?宜しくお願い致します。
その情報だけからは、ちょっと原因は分からないです。
DAOでやってみる。
リンクテーブルにしてみる。
SQLでIN句で接続してみる。
など、他の方法も試してみては。
set mya=createobject("adodb.connection")
myb="接続先フルパス"
with createobject("excel.applcation")
set myc=.workbooks.add.activesheet.range("a1")
.visible=true
end with
mya 接続文字列
.open
set myd=.execute("クエリ名")
myc.copyfromrecordset myd
end with
此れがコードです。スマホで書いています。すみません
確かに、言われてみると新規フォームではないですよね。。
今後は正確な用語をお伝えするよう、気を付けます。ご指摘ありがとうございます。
お騒がせいたしました。
なるほど。。全く別の種類の会社データなのでまとめるという発想が全くありませんでした。
検討してみます!ご提案ありがとうございます。
企業情報が格納されているテーブルが2つあるということでしょうか。
ユニオンクエリで一つの纏めることはできます。
フィールド構成が同じなら、クエリのSQLビューで下記のように記述します。
できれば、分けずに最初から一つのテーブルに纏めておいた方がいいです。
ユニオンクエリは重いし、更新できないなど、制限がありますので。
一つに纏めておいて、分割したデータが欲しいときはクエリの抽出条件で分けるようにします。
そのエラーがでるコードを提示してください。
「新規フォームを作って移動してしまうことがある」というのは、ひょっとして
「新規レコードへ移動してしまうことがある」という意味のつもりだったのかな?
だとしたら既定の動作ですね。
このような言葉だけでやりとりする場合は、用語は正確に使うというのは重要ですので、まずは正確な用語を理解して使うように意識しましょう。
それが目的なら、「新規追加禁止」にするのがベストな解決策ですね。
ありがとうございます。おたずねするまで、特殊な事例とは思わず深く考えていなかったのですが
結局、データを増やしたくないフォームだったので、勝手にレコードが増えたりして不便だったため
(本当は全部非連結にしたいが、レポート作成のため連結にしているフォーム)
新規追加禁止で対応し、解決しました。
別で同じような事例が起きた場合、改めてご報告させていただくかもしれません。
ネット上には残らないので安心してください。私のところだけにメールで届きます。
特に変わった設定をしたつもりはないのですが…。
ちなみに参考までにファイルをお送りした場合、ネット上にずっと残る形になりますか?
別にまずいデータが入っているわけではないんですが、なんとなく。
そんなことがあるのですか。
Enterだけで新規フォームを作ってしまうのですか。
通常の設定ではそんなことはないと思いますが。
どのような設定をしているのですか。
おそらく「F管理総合」フォームを開いていなかったようです・・そういうことですね。
ありがとうございました。