Microsoft Access 掲示板

views
4 フォロー
6,283 件中 4,961 から 5,000 までを表示しています。
1
hatena 2020/08/06 (木) 09:54:44 修正

レポート上のコントロールの位置やサイズ、フォントサイズが、レポート上の描画システムと、プリンタードライバーで、解釈に誤差があるのが原因だと思います。

ということで、デザインビューだけでなく、プレビューで結果を確認して、微調整する必要があります。
プリンタードライバーによっても微妙に異なる場合があるので、ある程度余裕をもってサイズや位置を設定する必要もあると思います。

画面上の結果と、印刷結果が異なるのは他のソフトでもありがちです。特にエクセルなんかは、Accessよりひどいです。

11
nokonoko 2020/08/06 (木) 09:39:32 653a6@54883

たくさんのご回答ありがとうございました。
問題の箇所になっているところの必要性も考え、別の方法で回避します。

1
hiroton 2020/08/05 (水) 18:26:43 5a9a8@f966d

運転日報の入力にフォームを使っているのであれば、フォームの挿入後処理が使えるので、追加クエリを発行すればいいと思います

が、単純にコピーするだけでいいのであればデータを2重で持つ意味はないのでコピーではなくユニオンクエリで必要なタイミングでデータを連結すればいいと思います

そもそもの話、同じ形式のデータになっているのであれば運転日報テーブルと出勤簿テーブルに分ける必要があるのかが疑問ですが

3
yoshima20618436 2020/08/05 (水) 13:18:53

お世話になります。

文字を入力する時だけ、下記のように指定するように設定しました。
    Me.テキスト114.Height = 1600

ありがとうございました。

2
yoshima20618436 2020/08/05 (水) 12:42:22

お世話になります。
早速ありがとうございました。

後ほど、確認と報告をさせて頂きます。

2
ニンジャ 2020/08/05 (水) 11:18:23 0029a@1c915

うまくいきました!ありがとうございました🙇‍♂️

1
hiroton 2020/08/05 (水) 10:23:02 5a9a8@f966d

たぶん

If IsNull(Me.txtテスト) Then
    MsgBox "先にテストを選んでください。"
    Exit Sub
End If

かな?

10
kitasue 2020/08/05 (水) 06:25:18 ce705@e9d43

DJoin関数を導入して、
https://web.archive.org/web/20150517052733/http://www.f3.dion.ne.jp/~element/msaccess/AcTipsVbaDJoin.html
コンボボックスのフォーカス取得時(?)に、
    Me.cmbF_ID.RowSourceType = "Value List"
    Me.cmbF_ID.RowSource = DJoin("Right([FV_ID],Len([FV_ID])-5)", "MT_F_ID", , , ";", True)
としては、いかがでしょうか。

9

もし、本当にコンボボックスの「値集合ソース」プロパティにクエリを設定しない場合はエラーがでないのなら、
「値集合タイプ」を「値リスト」に設定して、
db.OpenRecordset(strSQL, dbOpenSnapshot) という感じでレコードセットを開いて、ループさせて AddItem でリストを追加すればどうでしょうか。

8

コンボボックスcmbF_IDのレコードソースにMT_F_ID関連のクエリを組み込んで

コンボボックスの「値集合ソース」プロパティにクエリ名を設定しているということでしょうか。
(コンボボックスにレコードソースはない)

原理的に考えて、コンボボックスの値集合ソースの設定で、排他エラーがでるとは考えにくいです。

他にそのテーブルと連結しているテーブルとか、更新クエリを実行しているとか、別の処理で排他的に開いているとか、、、
があるとしか思えません。

提示されている情報からは、これ以上のアドバイスは無理です。

7
nokonoko 2020/08/04 (火) 17:48:09 653a6@54883

フォームのレコードソースが、M_F_ID またはそれを含むクエリになってませんか。

レコードソースは空欄です

提示のコード以外の部分で、M_F_ID を更新するような操作を行ってませんか。

更新はないと思います。MT_F_ID(M_F_IDは誤植でした)については
コンボボックスcmbVerのイベントがあって、一度参照しています。

Private Sub cmbVer BeforeUpdate(Cancel as integer)
(前略)
 strSQL = "SELECT * FROM[MT_F_ID]" & _
 "WHERE [FV_ID] = '" & Me.txtFV_ID & "'"
SET rs1 = db.OpenRecordset(strSQL, dbOpenSnapshot)
With rs1
 If .EOF then
(以下レコードがない場合はExit sub、
ある場合は、非連結テキストボックスに対して、
Me.txtPCardDate=.Fields("PCard_date")とデータを入れただけ)

コンボボックスcmbF_IDのレコードソースにMT_F_ID関連のクエリを組み込んでいないときはエラーが出ませんので、それ以外の部分で更新の影響が出ていることはないと(勝手に)考えております。

1

マウスクリックより、フォーカス取得時とフォーカス喪失時に設定するのがいいと思います。

Private Sub テキスト5_Enter()
    Me.テキスト5.Height = Me.テキスト5.Height * 2 '高さを2倍に
End Sub

Private Sub テキスト5_Exit(Cancel As Integer)
    Me.テキスト5.Height = Me.テキスト5.Height / 2 '高さを元に戻す
End Sub
6

フォームのレコードソースが、M_F_ID またはそれを含むクエリになってませんか。
あるいは、提示のコード以外の部分で、M_F_ID を更新するような操作を行ってませんか。

5
nokonoko 2020/08/04 (火) 10:20:43 653a6@54883

Set rs1 = db.OpenRecordset (strSQL, dbOpendynaset, dbDenyWrite, dbPessimistic)
の行です。

エラーメッセージは下記のとおりです。

Run-time error '3008'

The table'M_F_ID' is already opened exclusively by another user, or it is already open through the user interface and cannot manipulated programmatically.

4

On Error GoTo ErrorHandler
の行をコメントアウトして実行してみると、どの行でエラーがでますか。
また、その時の、エラーメッセージも提示してください。

5
cerophan 2020/08/03 (月) 17:57:48 f1ed8@29cdf >> 3

そうだとうれしいです。お言葉ありがとうございます!

3
nokonoko 2020/08/03 (月) 14:57:57 修正 653a6@54883

Access英語版です。

cmbF_IDがあり、Property SheetにてRow Sourceを
 Select Right([FV_ID],Len([FV_ID])-5)
 From MT F_ID
 Group By Right([FV_ID],Len([FV_ID])-5)
としています。

ボタンbtn001を押すイベント内で
テキストボックスの入力状態の確認がなされた後、

If fncUpdateMasterTables = False then Exit sub
End If

があって、関数で更新処理を行います。

Private Function fncUpdateMasterTables() As Boolean
On Error GoTo ErrorHandler
 Dim ws As DAO.Workspace
 Dim db as DAO.Database
 Dim rs1 as DAO.Recordset
 (変数宣言中略)

 DoCmd.Hourglass True

 Set ws = DBEngine.Workspaces(0)
 Set db = CurrentDb

 strSQL = "SELECT * FROM[MT_F_ID]" & _
 "WHERE [FV_ID] = '" & Me.txtFV_ID & "'"

 Set rs1 = db.OpenRecordset (strSQL, dbOpendynaset, dbDenyWrite, dbPessimistic)

  中略(レコードセットrs2を参照した後、フォーム内のデータをrs1とrs2で更新)

 ErrorHandler:
 DoCmd.Hourglass False
 Msgbox Err.number & ": " & Err.Description,vbcritical, _
 "Running Error(" & Me.Name & .fncUpdateMasterTables)"

 Resume Exit_fncUpdateMasterTables
End Function

以上です。よろしくお願いいたします

23
cerophan 2020/08/03 (月) 12:27:05 0029a@1c915 >> 21

Format関数についてもご解説いただき、よく理解できました。今後も活用していきたいと思います!貴重な知識を、ありがとうございました。

22
cerophan 2020/08/03 (月) 12:23:52 0029a@1c915 >> 21

>MSのドキュメントを読んで一発で理解できことは稀です。一応読んでみて、実際にやってみて理解するという繰り返しですね。

MSのドキュメントは理解できなかったため、今までwebの検索結果からMSのドキュメントは、ほぼ避けて通ってきました。検索結果から、他の方のブログ等を参考にするようにしてきました。
hatenaさんのアドバイスに気づかされました。今後はMSのドキュメントをもっと理解する努力をしていきたいと思います。(とは言いつつ今後も質問させていただくことが多いかと思います…申し訳ありません。宜しくお願いいたします。)

4

あっ、そうでした。DCountはNullはカウントしないのでした。
すぐ、それに気づいたということは、cerophanさん、確実にスキルアップしてますね。

21

今更ですが、「"\,&") 」これの意味がわかりきれておりません。

Format関数の設定は、書式プロパティの設定と同じですので、理解しておくと応用が効きます。

"\,&" ですが、コピーしてVBEとか書式プロパティに貼り付けると "¥,&" となります。(ブラウザ上では¥ は \ に変換されるので)
紛らわしいのでいちおう理解しておいてください。

書式プロパティの設定(=Format関数の設定)では、¥ の後に記述したテキストはそのまま表示されます。
例えば日付などは、
yyyy¥年mm¥月dd¥日 と設定しますよね。¥ の後の年、月、日 はそのまま表示されます。

¥, とするとカンマがそのまま表示されます。 & の箇所にはフィールドのテキストが表示されます。

書式は ; でセクションを2つにわけることができて、
一番目のセクションにテキストがある場合の書式を設定して、
2番目に長さ 0 の文字列か Null値のフィールドの書式を設定します。
2番目のセクションを省略した場合は、テキストがないとき("" または Null)の時は何も表示されません。

¥,& という設定は、テキストがあれば、テキストの前にカンマ、テキストがない(""またはNull)の時は何も表示しないという意味になります。

テキストフィールドの書式を設定する - Access

MSのドキュメントは非常に分かりにくいので、一応読んで実際にいろいろ設定してみて結果を確認して初めてそういうことを言っているかと理解できます。
MSのドキュメントを読んで一発で理解できことは稀です。一応読んでみて、実際にやってみて理解するという繰り返しですね。

3
cerophan 2020/08/03 (月) 11:12:25 0029a@1c915 >> 1

DCountでよかったのですね。。
簡単な方法にすぐ結び付けず、教えていただいてたすかります。
ちなみに、
DCount("メールテンプレID",
とすると、メールテンプレIDがNullのせいか、中止が適用されなかったため
DCount("チェック",
にしたところ、うまく作動し、数も数えてくれました。
ありがとうございました!

20
cerophan 2020/08/03 (月) 10:27:22 0029a@1c915 >> 17

hiroton さん
+と&の違いは気になっていたところでした。詳しく教えていただきありがとうございます。
確かに、IIfだとわたしでも理解できました。
Format関数の解説もありがとうございます。あとでじっくり確認させていただきます。

4
nishizw 2020/08/03 (月) 10:26:23 e15b7@029ad

アドバイスありがとうございます。
最低限必要な設定は大変参考になりました。
まずは試しみたいと思います。

19
cerophan 2020/08/03 (月) 10:24:15 0029a@1c915

=[Cc1] & Format([Cc2],"\,&") & Format([Cc3],"\,&")

今更ですが、「"\,&") 」これの意味がわかりきれておりません。
解説ページを探すのですが、検索できず…

その他、①nullについて②""の使い方←SQLのWHEREと関係ある??
がなかなか理解できず困っております。

18
cerophan 2020/08/03 (月) 10:11:56 0029a@1c915 >> 16

ありがとうございます。こちらを使わせていただきます!
nullは難しいですね…
説明を読んでも未だ、理解しきれておりません。
空白だったら…の条件を設定する際はいつも悩んでしまいます。

17
hiroton 2020/08/03 (月) 09:44:15 46c09@f966d

このQA面白いですね。とても勉強になります

buf = "a" & "1"  'a1'
buf = "a" + "1"  'a1'
buf = "a" & 1    'a1'
buf = "a" + 1    'エラー'
buf = "a" & Null 'a'
buf = "a" + Null 'Null'
buf = "a" & ""   'a'
buf = "a" + ""   'a'

buf = Format("a", "追加文字&")   '追加文字a'
buf = Format("", "追加文字&")    '(空文字)'
buf = Format(Null, "追加文字&")  '(空文字)'

kitasueさん、cerophanさん
VBAは文字列の連結に「+」を許容しますが、特別な理由がない限り「&」を使うべきです。Nz()関数は評価値がNullであることを条件に特別な処理をする関数ですが、評価値の最初にChr(13)がある時点で、これがNullになることがあるのか?と疑問に思ってしまいます。条件分岐で処理をするなら

IIf([添付2案件]<>"",Chr(13) & Chr(10) & [添付2案件])

とするほうが、何をしているのかわかるコードになります。hatenaさん指摘のとおり、データ形式によってはうまく動作しないことも考えられます

Format 関数
改めて眺めていましたが難しい関数ですね。

1 セクションのみ 書式はすべての文字列データに適用されます。
2 セクション 最初のセクションは文字列データに適用され、第 2 のセクションは Null 値と長さ 0 の文字列 ("") に適用されます。

Nullはまだしも「長さ0の文字列("")」は「すべての文字列データ」に該当しないんですねぇ
何もしないためにFormat()関数を使うのはかなり高等テクニックだと思います。さすがhatenaさんですね

2

ちなみに、チェックするだけなら、下記のように DCont関数でチェックすることもできます。

Din cnt As Long
cnt = DCount("メールテンプレID","T_送付","チェック= True AND メールテンプレID Is Null")) 
If cnt > 0 Then
    MsgBox "チェックしたデータの中にメールテンプレを選択していないものが" & cnt & "件あります。"
    Exit Sub '中止
End If
1

strSQL = "SELECT チェック, メールテンプレID FROM T_送付 WHERE チェック= True AND メールテンプレID Is Null)"

上記の部分の最後の ) が余分です。削除するか、; に変更してください。

2
コロコロなるままに 2020/08/03 (月) 08:52:53 0029a@1c915 >> 1

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

そういうことだったんですね。よくわかりました。
ありがとうございました。

16

"{添付2}", Format([添付2案件], Chr(13) & Chr(10) & "&")),
"{添付3}", Format([添付3案件], Chr(13) & Chr(10) & "&")),
"{添付4}", Format([添付4案件], Chr(13) & Chr(10) & "&")) _

だと、[添付2案件] が Null でも "" でもOKです。

15
cerophan 2020/08/02 (日) 12:25:24 0029a@1c915

kitasue様

うまくいきました!ありがとうございました。

14
kitasue 2020/08/02 (日) 11:11:00 ce705@e9d43

"{添付2}", Nz(Chr(13) + Chr(10) + [添付2案件], "")),
"{添付3}", Nz(Chr(13) + Chr(10) + [添付3案件], "")),
"{添付4}", Nz(Chr(13) + Chr(10) + [添付4案件], "")) _
でいかがでしょうか。

13
cerophan 2020/08/02 (日) 10:16:44 0029a@1c915

>空欄がない場合は
⇒空欄の場合は・・の間違いです・・

12
cerophan 2020/08/02 (日) 10:15:29 0029a@1c915

ありがとうございます。
後者を使いたいのですが、空欄が出る欄については空欄がない場合は改行をしたくないという条件を付けたく思っています。そこで、下記の式を作りましたが、データがあってもなくても改行してしまいます…なぜでしょうか。

勉強のため、大変でなければ、Replaceでの正解も教えていただけると助かります。

"{添付2}", Nz(Chr(13) + Chr(10) & [添付2案件], "")),
"{添付3}", Nz(Chr(13) + Chr(10) & [添付3案件], "")),

"{添付4}", Nz(Chr(13) + Chr(10) & [添付4案件], "")) _

3
hatena 2020/08/02 (日) 09:57:42 修正

まずは、最低限下記の設定を行っておきます。

ライセンス認証に関しては、その機能を提供てくれるソフトやシステムがあるかどうかは私は知りません。(さくっと検索してみましたが見つけることかできなかった)
自前で作成するなら、サーバーを用意して、データベースとサーバーサイトシステムでユーザー管理をすることになると思いますが、それに関しては、Accessとはまた別の話になりますので、ここで質問するより、別の適切な掲示板で質問したほうが情報は得やすいと思います。

11
hatena 2020/08/01 (土) 23:24:30 修正

どうもフィールドが空のところを追加するとエラーが出るようでした。

Nz関数をつかう。
Replace([本文], "【氏名】", Nz([氏名],""))

あるいは、
テーブルのデザインビューでフィールドの「値要求」プロパティを「はい」に、「空文字列の許可」を「はい」に設定する。

上記の2つの対策のどちらかをしてください。
後者の方がお勧めです。

10
cerophan 2020/08/01 (土) 23:04:33 0029a@1c915

VBAでイミディエイトウィンドウでテストしてみたところ、どうもフィールドが空のところを追加するとエラーが出るようでした。解決方法を探ってみることにします。

9
cerophan 2020/08/01 (土) 22:14:21 0029a@1c915

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

↑この式を使って、クエリに入力してタイトルはうまくいったのですが、メール本文の式が長すぎてエラーが出ます。
VBAに組み込みたいと思ったのですが、どうやって組み込んだらいいか、答えが見つからない状況です…
方法はありますでしょうか。

3
oGFzgtnIStrl6D0 2020/08/01 (土) 14:37:36

返信が遅れて申し訳ありません。。
kitasueさんのご回答内容を元に出来ました。
感謝致します。