Microsoft Access 掲示板

views
4 フォロー
6,283 件中 5,001 から 5,040 までを表示しています。
8
cerophan 2020/08/01 (土) 10:32:27 0029a@1c915

クエリに式を入れたらうまくいきました!
WEBスクレイピングの件も、調べてみます。ありがとうございました!!

7
cerophan 2020/08/01 (土) 10:13:01 0029a@1c915

メールテンプレを作成してみたのですが、
コントロールソースに
=Replace([メールタイトル],"【タイトル一部】",[タイトル一部])
と入れるとエラーになり、#Type!と表示されています。

ちなみに、
=Replace([メールタイトル],"【タイトル一部】","テスト")

[タイトル一部]
はうまくいきます。

1

ウィザードで作成するとテーブルの書式設定を引き継ぐと思いますが、自分で配置した場合は引き継がないので、自分で書式を設定する必要があります。

テキストボックスの書式プロパティにテーブルのフィールドに設定した書式と同じものを設定すればいいでしょう。

2
nishizw 2020/07/31 (金) 17:23:14 e15b7@029ad

もちろん、Accessだけでは難しいと思います。しかし、世の中にはAccessで作られたパッケージソフトが販売されていて、それらはライセンス認証をしないと使えないようになっています。おそらく別ソフト・システムが必要だと思うのですが、一体何を使っているのか、ご存じの方がおられれば、教えて頂きたいです。

6

あと、メーラーがWEBメールなら、WEBスクレイピングという方法で自動化できるかもしれません(セキュリティがきつく設定してあるとできない場合もありますが)。
「VBA WEBスクレイピング」で検索する解説ページがいろいろ見つかります。

5
cerophan 2020/07/31 (金) 15:45:01 0029a@1c915

なるほど…本当に勉強になります。素晴らしいですね!

4

Cc1, Cc2, Cc3 というフィールドがあるということなら、
Cc欄のテキストボックスのコントロールソースを下記のようにすればいいでしょう。

=[Cc1] & Format([Cc2],"\,&") & Format([Cc3],"\,&")
3
cerophan 2020/07/31 (金) 13:41:48 0029a@1c915

ごめんなさい、作成方法は今から確認しようと思いながら違う質問をしたつもりでしたが、同じことで対応できそうですね!すみません。確認します。

2
cerophan 2020/07/31 (金) 13:18:11 0029a@1c915

ありがとうございます!メーラーが会社の規定のもので、WEBメーラーなので送信にはつなげられないかもしれませんが、作成の部分は参考にさせていただき、今から作成していきます!
そこで1つ質問です。
差込印刷では以下のようなことが可能でした。アクセスで行うにはどうしたらよいでしょうか。
コントロールソースへの式?クエリの設定?悩んでいます・・

TO欄
To1&","&To2
Cc欄
Cc1&","&Cc2&","&Cc3

メールアドレス欄。複数の場合は間に","が必要。
Ccについて、例えばCc1とCc2しかなければ、Cc3のまえの","が不要となる。

1
hatena 2020/07/30 (木) 19:25:16 修正

パスワードでロックする仕様のソフトなら、パスワードが分かれなば、コピーし放題ですよね。

そのために、最近のソフトはネットを通じて認証するような仕組みになってますよね。
そのような仕組みをAccessだけで構築するのは難しいですね。

1

フォームにコンボボックスを作り、そのソースに[MT_F_ID]を指定したところ、

コンボボックスの値集合ソースに MT_F_ID を設定したということでしょうか。

前述のコード部分で実行時エラー 3008([MT_F_ID]が排他的どうこう)が出るようになりました。
エラーが出る原因はコンボボックスのソースにあることはわかりますが

コンボボックスの値集合ソースはスナップショット(読み取り専用)ですので、ほかに影響を与えることは原理的にないです。原因は別にあると思います。

まず、そのVBAはどこに記述してあり、どのタイミングで実行されるのか。
また、そのコードのプロシージャ全体(Sub から End Sub まで)を提示してください。

6

それぞれのフォームで連結しているテーブルも異なり、検索対象のフィールドも異なるなら、ポップアップフォームで共通化するのはなかなかの難易度かと思います。
仕様の詳細が不明なのでなんともいえませんが。

もし少し仕様を明確にする方がいいでしょう。それがきまってなければ共通化しようがありません。

例えば「検索」(全件表示したまま該当レコードへ移動する)なのか「抽出」(フィルターをかける)なのか。

抽出結果は別フォームを開いて表示するのか、帳票フォームのヘッダーに条件を入力してそのフォームに抽出結果を表示するのか。

複数条件を設定する必要があるのか、ないのか。

とりあえず、「フォームフィルター」機能を使えば抽出機能(フィルターをかける機能)は簡単に実現できます。

■T'sWare Access Tips #590 ~フォームフィルタの使い方~

5
cerophan 2020/07/30 (木) 12:36:57 0029a@1c915

>hatena様
ありがとうございます!時間を取って確認しながら導入したいと思っております。

>hiroton様
なるほど、そこを変えた方がいいですね。現在はトップメニューと、
それぞれ中に入ったところにも手軽に検索できるように、ヘッダーに複数の検索ボックスを置いていました。
ポップアップで表示するように、検討してみたいと思います。
ありがとうございます。

4
hiroton 2020/07/30 (木) 09:22:05 6f154@f966d

いろんなページに複数の検索ボックスを配置している

    DoCmd.OpenForm "F_案件", , "", "[案件NO]=[Forms]![F_メインメニュー]![txt案件NO検索]"

「検索」という機能があちこちに分散している上に、それに使う値も「検索」機能のあるフォーム(ページ)とは違う場所から持ってきているんですか?
「検索」機能で本当にやりたいことがよくわかりませんが、インターフェースの設計を見直したほうがいい気がします

「検索」用のフォームを独立してつくり、各ページにサブフォームとして埋め込むとか、「検索」フォームのポップアッププロパティを「はい」にして開くとかすれば、検索機能を何回も作る必要はなくなります

1

本当はアクセス内で解決したいですが、メールの長文の中に名前を差込むようなワードの差込印刷のような機能はありませんよね…?

やろうと思えばできますよ。

T_メールテンプレート

  • テンプレートID 数値型 主キー
  • タイトル テキスト型
  • 本文 テキスト型

「本文」フィールドに下記のような感じでテンプレート文を入力します。

【氏名】様

ご注文の【品名】の入荷予定日は【入荷予定日】です。
価格は【価格】円です。

株式会社 〇〇
担当 【担当者名】

送信データテーブルは下記とします。

T_メール送信

  • テンプレートID
  • 送信日
  • メールアドレス
  • 氏名
  • 品名
  • 入荷予定日
  • 価格
  • 担当者名

クエリを作成して T_メール送信 と T_メールテンプレート を テンプレートID で結合します。

これをレコードソースとするフォームを作成して、テキストボックスを配置してコントロールソースを下記のように設定します。

=Replace(Replace(Replace(Replace(Replace([本文], "【氏名】", [氏名]), "【品名】", [品名]), "【入荷予定日】", [入荷予定日]), "【価格】", [価格]), "【担当者】", [担当者])

これでフィールドのデータが差し込まれた本文が表示されます。

あとは、下記のような方法でメール送信できます。

■T'sWare Access Tips #463 ~既定のメールソフトで新規メールにデータを添付する方法~

AccessからVBAでメールを送信する2つの方法|アズビーパートナーズ

5
cerophan 2020/07/29 (水) 20:28:56 0029a@1c915

こんな方法があったんですね。うまくいきました!ありがとうございました。

4

しかし、すべてID情報を取得するように設定すると、それをテキストボックスで表示する際
リレーションシップの問題で、複数のボックスに表示ができません。

クエリの設計が分からないということですね。

現状のクエリに、担当者のマスターテーブルを追加してあると思いますが、同じテーブルを複数追加することができます。
同じテーブルを追加していくと「担当者マスター_1」「担当者マスター_2」・・・と別名が付いていきますので、
担当者1、担当者2、担当者3 フィールドと各々のテーブルを結合していけばいいでしょう。

3
hatena 2020/07/29 (水) 17:17:16 修正

条件を合体できていると勘違いされそうなので、
どこかのタイミングで自動で消えるようにしたいと考えていました。

合体できない=一つのフィールドのみの条件という仕様にするなら、下記のようなコードにすればいいでしょう。

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

このようなフォーム、コントロールが多数あるというなら、汎用関数にしてそれを各フォームから呼び出すという方法にもできますが、まずは上記のコードを理解してからですね。

いずれは、検索条件を合体させたい(検索した結果から新たに絞り込みできる)
とも考えていたのですが複雑になりそうでしょうか。

複数の抽出条件を設定したいということなら、下記を参考にしてください。

複数条件の抽出フォームの設計 その1 - hatena chips

上記はヘッダーに条件コントロールを配置して自身のフォームにフィルターをかけてますが、別のフォームを開く場合は、
生成された抽出条件(strFilter)を DoCmd.OpenForm のWhere条件引数に渡せばいいだけです。

3
cerophan 2020/07/29 (水) 16:51:35 0029a@1c915

こちらの件で引き続きの質問です。
フォームに担当者を選択するためのコンボボックスを4つ並べ、選択できる状態にはできました。
しかし、すべてID情報を取得するように設定すると、それをテキストボックスで表示する際
リレーションシップの問題で、複数のボックスに表示ができません。
(変なことを言ってたり、わかりづらければ申し訳ありません。)
直接表示させたいものを取得すれば複数でも可能ですが、
IDを取得して変換するのは無理でしょうか?(IDを取得して、ほかの情報もひっぱりたいため…)

2
cerophan 2020/07/29 (水) 16:34:21 0029a@1c915

ほかのボックスに検索条件が残っていると、
条件を合体できていると勘違いされそうなので、
どこかのタイミングで自動で消えるようにしたいと考えていました。

いずれは、検索条件を合体させたい(検索した結果から新たに絞り込みできる)
とも考えていたのですが複雑になりそうでしょうか。
いろんなページに複数の検索ボックスを配置しているので、あまり複雑なら
クリアボタン1個配置にとどめようかと考えています。

検索ボックスの1つは以下になります。

Private Sub btn案件NO検索_Click()
    DoCmd.OpenForm "F_案件", , "", "[案件NO]=[Forms]![F_メインメニュー]![txt案件NO検索]"
End Sub

1

また、検索した瞬間にも消えてほしいです。

この検索はどのようにしてますか。VBAでしょうか。もし、そうならそのVBAを提示してください。

ただ、どのような検索条件の結果なのか確認するためにも、条件入力用コントロールの値は残っていた方がいいのよう思いますが。

検索条件クリアボタンを配置しておいて、そのクリックで条件入力用コントロールの値を消して、抽出も解除するようにすべきだと思います。

2
肩こり慢性 2020/07/29 (水) 13:33:08 0029a@1c915

望み通りの結果が得られました。ありがとうございました。

5
肩こり慢性 2020/07/29 (水) 13:10:53 0029a@1c915

なるほど。更新クエリでもよいですね。勉強になりました!ありがとうございます。

1

まず、①と②は同じモジュール内に置かないといけない、という認識。

間違ってます。
②のモジュールはレポートのモジュールに記述してください。

具体的にはレポートのデザインビューでリボンの[デザイン]タブ-[ツール]セクション-[コードの表示]をクリックすると表示されます。

3

結局、全レコードを更新するということは、連結しているテーブルの全レコードを更新するということになりますので、レコードセットを移動しながら更新するか、更新クエリで一気に更新するかに、なりますね。

2
肩こり慢性 2020/07/29 (水) 11:40:33 0029a@1c915

仮定いただいたとおり、前者のパターンでした。しかし、こんなに複雑なVBAになるとは。
軽く考えておりました。。ありがとうございました。

1
hatena 2020/07/29 (水) 11:29:29 修正

帳票フォームで表示されている全レコードのチェックボックスのチェックをON/OFFする(=連結フィールドのValueを更新にする。)ということでしょうか。
それとも単票フォームあるいは非連結フォームに複数のチェックボックスか配置されていて、そのすべてのチェックボックスのチェックを外すということでしょうか。

とりあえず前者の方だと仮定して回答します。

フォームのレコードソースのテーブル名を「Tbl1」、
チェックボックスのコントロールソースのフィールド名を「Fld1」と仮定します。

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

後者の場合は処理後に先頭レコードへ移動します。

14
coffee 2020/07/28 (火) 18:19:42 0029a@1c915

申し訳ありません!!教えていただいたかっこの位置について、訂正したつもりが、
自分の勝手な解釈が入っていたようで、違う場所に移動していました。
きちんと教えていただいた場所に移動することで、結果的にうまく動くようになりました。
本当にありがとうございました。

13

ごめんなさい。下の部分(単純なリンク部分)はいつの間にかうまく動いていたようです。
上の部分が、相変わらず新しいフォームが開いてしまう状況です。

もうしばらく沼にはまってみます…

12
coffee 2020/07/28 (火) 17:53:18 0029a@1c915

>7785世代
ミスをただしたつもりがまだミスがあり、申し訳ありません。(事情がありコピペできないのでミスってしまいました…)
ダブルクォーテーションでくくっておりましたがうまくいきません。

DoCmd.OpenForm "F_特別案件", , , "案件番号='" & Me!txt案件番号 & "'", , acDialog

正しく動いているものとの違いは、リンク元リンク先のフォームが同じクエリを参考しているものと、違うクエリを参考しているものになります。
大元のコントロールソースが違うということは関係ありますか?
(今、コントロールソースをあわせてみましたが、関係ないようですね…)

11

あっ、ミスってますね。ご指摘ありがとうございます。

10
7785世代 2020/07/28 (火) 15:32:54 20aee@38a3b

F_特別案件 をしっかり"(ダブルクォーテーション)でくくってもダメでしょうか?

9
coffee 2020/07/28 (火) 15:28:24 0029a@1c915

誤りがありごちゃついてきましたので、書き直します。

DoCmd.OpenForm "F_案件詳細", , , "案件番号='" & Me!txt案件番号 & "'", , acDialog

↑正常に動いているボタン。

 DoCmd.OpenForm "F_特別案件, , , "案件番号='" & Me!txt案件番号 & "'", , acDialog

↑今回の、正常に動かないボタン。(案件が1つもひっかからない。)

8

txt案件NO
↑間違いです。こちらも案件番号としています。

7
coffee 2020/07/28 (火) 15:01:55 0029a@1c915

ご確認ありがとうございました。
エラーは出なくなったのですが、どうもうまくいきません。
案件が1つもない状態で表示されます。

試しに、式の下の部分だけ試してみましたが、やはりうまくいきません。
フォーム上で、隣に似たようなボタンがあり、こちらは案件詳細ページに飛ぶことに成功しています。
どちらも行先のフィールド名を同じ(案件番号)にしているのが問題がありますでしょうか。

DoCmd.OpenForm "F_案件詳細", , , "案件番号='" & Me!txt案件番号 & "'", , acDialog

 DoCmd.OpenForm "F_保守", , , "案件番号='" & Me!txt案件NO & "'", , acDialog

6
7785世代 2020/07/28 (火) 14:29:14 20aee@38a3b

失礼、かぶってました

5
7785世代 2020/07/28 (火) 14:28:34 20aee@38a3b

横から申し訳ありません、
 > 引用テキスト Me.txt案件番号) & "'"

閉じカッコの位置はコチラでよろしいのでしょうか。
多分、修正されたらすぐに走るかと思います。

4
hiroton 2020/07/28 (火) 14:26:50 1eeaf@f966d >> 3

Dcountの括弧の閉じ位置がおかしいですね

If DCount("[案件番号]", "[T_特別案件]", "[案件番号]='" & Me.txt案件番号 & "'") = 0 Then
3

「案件番号」というのは実際のフィールド名ですか。

とりあえず下記で試してみてください。

If DCount("[案件番号]", "[T_特別案件]", "[案件番号]='" & Me.txt案件番号) & "'" = 0 Then
2
coffee 2020/07/28 (火) 14:13:34 0029a@1c915

ありがとうございます。
早速試したところ、(案件番号はテキストです)

実行時エラー 3075
クエリ式'案件番号='12345'の文字列の構文エラーです。

とでました。(12345は任意の案件番号)

わたしの指定に間違いがあるのかと思いますが、思い当たりません…
もし、どのようなミスがあるのか見当がつけば、教えていただけると助かります。