Private Sub btn案件NO検索_Click()
Dim ctl As Control
For Each ctl In Me.Controls
Select Case ctl.ControlType
Case acTextBox, acComboBox
If ctl.Name <> "txt案件NO検索" Then ctl.Value = Null
End Select
Next
DoCmd.OpenForm "F_案件", , "", "[案件NO]=[Forms]![F_メインメニュー]![txt案件NO検索]"
End Sub
Private Sub btn全チェック_Click()
Dim rs As DAO.Recordset
Set rs = Me.Recordset.Clone
rs.MoveFirst
Do Until rs.EOF
rs.Edit
rs!Fld1 = True
rs.Update
rs.MoveNext
Loop
Me.Recalc
End Sub
Private Sub btn全チェック外す_Click()
Dim rs As DAO.Recordset
Set rs = Me.Recordset.Clone
rs.MoveFirst
Do Until rs.EOF
rs.Edit
rs!Fld1 = False
rs.Update
rs.MoveNext
Loop
Me.Recalc
End Sub
あるいは、
Private Sub btn全チェック_Click()
CurrentDb.Execute "UPDATE Tbl1 SET Tbl1.Fld1 = True;"
Me.Requery
End Sub
Private Sub btn全チェック外す_Click()
CurrentDb.Execute "UPDATE Tbl1 SET Tbl1.Fld1 = False;"
Me.Requery
End Sub
クエリに式を入れたらうまくいきました!
WEBスクレイピングの件も、調べてみます。ありがとうございました!!
メールテンプレを作成してみたのですが、
コントロールソースに
=Replace([メールタイトル],"【タイトル一部】",[タイトル一部])
と入れるとエラーになり、#Type!と表示されています。
ちなみに、
=Replace([メールタイトル],"【タイトル一部】","テスト")
や
[タイトル一部]
はうまくいきます。
ウィザードで作成するとテーブルの書式設定を引き継ぐと思いますが、自分で配置した場合は引き継がないので、自分で書式を設定する必要があります。
テキストボックスの書式プロパティにテーブルのフィールドに設定した書式と同じものを設定すればいいでしょう。
もちろん、Accessだけでは難しいと思います。しかし、世の中にはAccessで作られたパッケージソフトが販売されていて、それらはライセンス認証をしないと使えないようになっています。おそらく別ソフト・システムが必要だと思うのですが、一体何を使っているのか、ご存じの方がおられれば、教えて頂きたいです。
あと、メーラーがWEBメールなら、WEBスクレイピングという方法で自動化できるかもしれません(セキュリティがきつく設定してあるとできない場合もありますが)。
「VBA WEBスクレイピング」で検索する解説ページがいろいろ見つかります。
なるほど…本当に勉強になります。素晴らしいですね!
Cc1, Cc2, Cc3 というフィールドがあるということなら、
Cc欄のテキストボックスのコントロールソースを下記のようにすればいいでしょう。
ごめんなさい、作成方法は今から確認しようと思いながら違う質問をしたつもりでしたが、同じことで対応できそうですね!すみません。確認します。
ありがとうございます!メーラーが会社の規定のもので、WEBメーラーなので送信にはつなげられないかもしれませんが、作成の部分は参考にさせていただき、今から作成していきます!
そこで1つ質問です。
差込印刷では以下のようなことが可能でした。アクセスで行うにはどうしたらよいでしょうか。
コントロールソースへの式?クエリの設定?悩んでいます・・
TO欄
To1&","&To2
Cc欄
Cc1&","&Cc2&","&Cc3
メールアドレス欄。複数の場合は間に","が必要。
Ccについて、例えばCc1とCc2しかなければ、Cc3のまえの","が不要となる。
パスワードでロックする仕様のソフトなら、パスワードが分かれなば、コピーし放題ですよね。
そのために、最近のソフトはネットを通じて認証するような仕組みになってますよね。
そのような仕組みをAccessだけで構築するのは難しいですね。
コンボボックスの値集合ソースに MT_F_ID を設定したということでしょうか。
コンボボックスの値集合ソースはスナップショット(読み取り専用)ですので、ほかに影響を与えることは原理的にないです。原因は別にあると思います。
まず、そのVBAはどこに記述してあり、どのタイミングで実行されるのか。
また、そのコードのプロシージャ全体(Sub から End Sub まで)を提示してください。
それぞれのフォームで連結しているテーブルも異なり、検索対象のフィールドも異なるなら、ポップアップフォームで共通化するのはなかなかの難易度かと思います。
仕様の詳細が不明なのでなんともいえませんが。
もし少し仕様を明確にする方がいいでしょう。それがきまってなければ共通化しようがありません。
例えば「検索」(全件表示したまま該当レコードへ移動する)なのか「抽出」(フィルターをかける)なのか。
抽出結果は別フォームを開いて表示するのか、帳票フォームのヘッダーに条件を入力してそのフォームに抽出結果を表示するのか。
複数条件を設定する必要があるのか、ないのか。
とりあえず、「フォームフィルター」機能を使えば抽出機能(フィルターをかける機能)は簡単に実現できます。
■T'sWare Access Tips #590 ~フォームフィルタの使い方~
>hatena様
ありがとうございます!時間を取って確認しながら導入したいと思っております。
>hiroton様
なるほど、そこを変えた方がいいですね。現在はトップメニューと、
それぞれ中に入ったところにも手軽に検索できるように、ヘッダーに複数の検索ボックスを置いていました。
ポップアップで表示するように、検討してみたいと思います。
ありがとうございます。
「検索」という機能があちこちに分散している上に、それに使う値も「検索」機能のあるフォーム(ページ)とは違う場所から持ってきているんですか?
「検索」機能で本当にやりたいことがよくわかりませんが、インターフェースの設計を見直したほうがいい気がします
「検索」用のフォームを独立してつくり、各ページにサブフォームとして埋め込むとか、「検索」フォームのポップアッププロパティを「はい」にして開くとかすれば、検索機能を何回も作る必要はなくなります
やろうと思えばできますよ。
T_メールテンプレート
「本文」フィールドに下記のような感じでテンプレート文を入力します。
送信データテーブルは下記とします。
T_メール送信
クエリを作成して T_メール送信 と T_メールテンプレート を テンプレートID で結合します。
これをレコードソースとするフォームを作成して、テキストボックスを配置してコントロールソースを下記のように設定します。
これでフィールドのデータが差し込まれた本文が表示されます。
あとは、下記のような方法でメール送信できます。
■T'sWare Access Tips #463 ~既定のメールソフトで新規メールにデータを添付する方法~
AccessからVBAでメールを送信する2つの方法|アズビーパートナーズ
こんな方法があったんですね。うまくいきました!ありがとうございました。
クエリの設計が分からないということですね。
現状のクエリに、担当者のマスターテーブルを追加してあると思いますが、同じテーブルを複数追加することができます。
同じテーブルを追加していくと「担当者マスター_1」「担当者マスター_2」・・・と別名が付いていきますので、
担当者1、担当者2、担当者3 フィールドと各々のテーブルを結合していけばいいでしょう。
合体できない=一つのフィールドのみの条件という仕様にするなら、下記のようなコードにすればいいでしょう。
このようなフォーム、コントロールが多数あるというなら、汎用関数にしてそれを各フォームから呼び出すという方法にもできますが、まずは上記のコードを理解してからですね。
複数の抽出条件を設定したいということなら、下記を参考にしてください。
複数条件の抽出フォームの設計 その1 - hatena chips
上記はヘッダーに条件コントロールを配置して自身のフォームにフィルターをかけてますが、別のフォームを開く場合は、
生成された抽出条件(strFilter)を DoCmd.OpenForm のWhere条件引数に渡せばいいだけです。
こちらの件で引き続きの質問です。
フォームに担当者を選択するためのコンボボックスを4つ並べ、選択できる状態にはできました。
しかし、すべてID情報を取得するように設定すると、それをテキストボックスで表示する際
リレーションシップの問題で、複数のボックスに表示ができません。
(変なことを言ってたり、わかりづらければ申し訳ありません。)
直接表示させたいものを取得すれば複数でも可能ですが、
IDを取得して変換するのは無理でしょうか?(IDを取得して、ほかの情報もひっぱりたいため…)
ほかのボックスに検索条件が残っていると、
条件を合体できていると勘違いされそうなので、
どこかのタイミングで自動で消えるようにしたいと考えていました。
いずれは、検索条件を合体させたい(検索した結果から新たに絞り込みできる)
とも考えていたのですが複雑になりそうでしょうか。
いろんなページに複数の検索ボックスを配置しているので、あまり複雑なら
クリアボタン1個配置にとどめようかと考えています。
検索ボックスの1つは以下になります。
Private Sub btn案件NO検索_Click()
DoCmd.OpenForm "F_案件", , "", "[案件NO]=[Forms]![F_メインメニュー]![txt案件NO検索]"
End Sub
この検索はどのようにしてますか。VBAでしょうか。もし、そうならそのVBAを提示してください。
ただ、どのような検索条件の結果なのか確認するためにも、条件入力用コントロールの値は残っていた方がいいのよう思いますが。
検索条件クリアボタンを配置しておいて、そのクリックで条件入力用コントロールの値を消して、抽出も解除するようにすべきだと思います。
望み通りの結果が得られました。ありがとうございました。
なるほど。更新クエリでもよいですね。勉強になりました!ありがとうございます。
間違ってます。
②のモジュールはレポートのモジュールに記述してください。
具体的にはレポートのデザインビューでリボンの[デザイン]タブ-[ツール]セクション-[コードの表示]をクリックすると表示されます。
結局、全レコードを更新するということは、連結しているテーブルの全レコードを更新するということになりますので、レコードセットを移動しながら更新するか、更新クエリで一気に更新するかに、なりますね。
仮定いただいたとおり、前者のパターンでした。しかし、こんなに複雑なVBAになるとは。
軽く考えておりました。。ありがとうございました。
帳票フォームで表示されている全レコードのチェックボックスのチェックをON/OFFする(=連結フィールドのValueを更新にする。)ということでしょうか。
それとも単票フォームあるいは非連結フォームに複数のチェックボックスか配置されていて、そのすべてのチェックボックスのチェックを外すということでしょうか。
とりあえず前者の方だと仮定して回答します。
フォームのレコードソースのテーブル名を「Tbl1」、
チェックボックスのコントロールソースのフィールド名を「Fld1」と仮定します。
あるいは、
後者の場合は処理後に先頭レコードへ移動します。
申し訳ありません!!教えていただいたかっこの位置について、訂正したつもりが、
自分の勝手な解釈が入っていたようで、違う場所に移動していました。
きちんと教えていただいた場所に移動することで、結果的にうまく動くようになりました。
本当にありがとうございました。
ごめんなさい。下の部分(単純なリンク部分)はいつの間にかうまく動いていたようです。
上の部分が、相変わらず新しいフォームが開いてしまう状況です。
もうしばらく沼にはまってみます…
>7785世代
ミスをただしたつもりがまだミスがあり、申し訳ありません。(事情がありコピペできないのでミスってしまいました…)
ダブルクォーテーションでくくっておりましたがうまくいきません。
DoCmd.OpenForm "F_特別案件", , , "案件番号='" & Me!txt案件番号 & "'", , acDialog
正しく動いているものとの違いは、リンク元リンク先のフォームが同じクエリを参考しているものと、違うクエリを参考しているものになります。
大元のコントロールソースが違うということは関係ありますか?
(今、コントロールソースをあわせてみましたが、関係ないようですね…)
あっ、ミスってますね。ご指摘ありがとうございます。
F_特別案件 をしっかり"(ダブルクォーテーション)でくくってもダメでしょうか?
誤りがありごちゃついてきましたので、書き直します。
DoCmd.OpenForm "F_案件詳細", , , "案件番号='" & Me!txt案件番号 & "'", , acDialog
↑正常に動いているボタン。
DoCmd.OpenForm "F_特別案件, , , "案件番号='" & Me!txt案件番号 & "'", , acDialog
↑今回の、正常に動かないボタン。(案件が1つもひっかからない。)
txt案件NO
↑間違いです。こちらも案件番号としています。
ご確認ありがとうございました。
エラーは出なくなったのですが、どうもうまくいきません。
案件が1つもない状態で表示されます。
試しに、式の下の部分だけ試してみましたが、やはりうまくいきません。
フォーム上で、隣に似たようなボタンがあり、こちらは案件詳細ページに飛ぶことに成功しています。
どちらも行先のフィールド名を同じ(案件番号)にしているのが問題がありますでしょうか。
DoCmd.OpenForm "F_案件詳細", , , "案件番号='" & Me!txt案件番号 & "'", , acDialog
DoCmd.OpenForm "F_保守", , , "案件番号='" & Me!txt案件NO & "'", , acDialog
失礼、かぶってました
横から申し訳ありません、
> 引用テキスト Me.txt案件番号) & "'"
閉じカッコの位置はコチラでよろしいのでしょうか。
多分、修正されたらすぐに走るかと思います。
Dcountの括弧の閉じ位置がおかしいですね
「案件番号」というのは実際のフィールド名ですか。
とりあえず下記で試してみてください。
ありがとうございます。
早速試したところ、(案件番号はテキストです)
実行時エラー 3075
クエリ式'案件番号='12345'の文字列の構文エラーです。
とでました。(12345は任意の案件番号)
わたしの指定に間違いがあるのかと思いますが、思い当たりません…
もし、どのようなミスがあるのか見当がつけば、教えていただけると助かります。