Microsoft Access 掲示板

views
4 フォロー
6,283 件中 2,681 から 2,720 までを表示しています。
2

hirotonさんが言われるように、ページフッタで代用するということになりますね。

何を表示させたいのか不明ですが、
例えば、グループ集計を表示させたいなら、
グルーブヘッダー(またはグループフッタ)に下記のテキストボックスを配置しておきます。

コントロールソース =Sum([数量])
名前 数量計

ページフッターにテキストボックスを配置してコントロールソースで集計テキストボックスを参照します。

コントロールソース =[数量計]

数量は実際のフィールド名にしてください。

1
hiroton 2022/03/10 (木) 15:27:58 d6038@f966d

基本的には無理です。ページフッターを使ってそれっぽくするのが限界でしょう


レポート出力の仕組みにあるのは、「印刷領域が無くなったら次のページに移る」です
新しいページに移ったときは印刷領域が十分にあるのでヘッダーの『セクション繰り返し』は常に問題なく実行できますが、「印刷領域が無くなったら次のページに移る」のタイミングではグループフッターを配置するスペースはすでにありません
なので、グループフッターに『セクション繰り返し』はありません

9
りんご 2022/03/10 (木) 15:04:41 07313@0e907

 取り敢えず、qf.sqlやbaseSQLやその他SQLの中身が期待通りになっているか、要所要所で再度チェックしておくのはどうでしょう。例えば。

If Not 別モジュール.IsNullOrEmpty(baseSQL) Then
 Debug.print qf.sql
 Debug.print baseSQL
qf.sql = baseSQL
End If
8

hirotonさん
コメントありがとうございます。恐れ入ります。

運用について、
<エラー発現状況>の2にある社内共有フォルダが
開発者ではアクセス権がない部署内フォルダのため、
試用期間の今は開発者から確認者1へメール送付したACCESSを
確認者1と確認者2が確認してくださっている状況なのですが、

本動作不具合解消後の本運用移行はその社内共有フォルダに
アクセスできる確認者1と確認者2が共有使用する形となります。

現在同ACCESSの別作業のため単一ACCESSで色々しておりますが、
ACCESSを共有する以上壊れる可能性が高いため、
最終的には分割化してバッチでフロントをコピー・起動したものを
各ユーザーに操作してもらう形を視野に入れております。

7
hiroton 2022/03/10 (木) 14:22:57 d6038@f966d

謎の現象が謎のままなのは歯がゆいですが

・検証ケースについて、
 開発者→確認者1→確認者1(続けてもう一度)と
 開発者→確認者2→確認者2(続けてもう一度)のケースは
 上手くいくとの報告でした。

そもそもメールでACCESSファイルを盥回しにする?という運用は改善できないんでしょうか?(あまりいい運用方法とは思えません)

6

りんご様
コメントありがとうございます…!

りんご様のお察しの通り、SQLを上書きするコードを組み込んでおりました。
これは別箇所で条件を書き加えたいケースに対応するために入れたものでした。
以下クラスのファンクション抜粋(変数宣言略)
====================
【1】
 Public Sub SetQuery(ByVal strQue As String)

     Set qf = CurrentDb.QueryDefs(strQue)

     ' クエリSQL取得(元)
     baseSQL = qf.sql

 End Sub
【2】
 Public Sub Execute()

     ' クエリ実行
     qf.Execute

     ' SQL文を元に戻す
     If Not 別モジュール.IsNullOrEmpty(baseSQL) Then
         qf.sql = baseSQL
     End If

 End Sub
【3】
 Public Sub ObjClose()

     Set qf = Nothing: Close
     baseSQL = ""

 End Sub
====================

baseSQLはString型で、元のSQL文は3652文字です。

開発者→確認者1→確認者1(続けてもう一度)と
開発者→確認者2→確認者2(続けてもう一度)のケースは
上手くいくとの報告でした。

両確認者の方が丁度予定が多忙となっており、
昨日から同環境での検証が進んでおらず非常に歯がゆいです。
検証のアドバイスを頂いている中、恐縮です。

5
りんご 2022/03/10 (木) 10:24:02 c564b@0e907 >> 4

不完全なSQLに書き換えられてしまっているためであることが分かりました。
 
 クエリのSQLを上書きするコードがあって、何かの原因でSELECT〜FROM句が抜けちゃうという事でしょうか?
 開発者→確認者1→確認者2という事ですが、開発者→確認者1→確認者1(続けてもう一度)は試しましたか?

3

66666であればテーブルAのオペコードが831018のレコードを抽出
77777であればテーブルAのオペコードが832039のレコードを抽出

ここの法則性がいまいち分かりません。

委託者コードオペコード
66666831018
77777832039

例えば上記のような区分テーブルを見て識別しているのでしょうか?

2
りんご 2022/03/09 (水) 10:06:20 c564b@0e907

テーブルをまとめないの?

口座番号日付オペコード委任者コード
4

hiroton様
とんでもございません。
コメント・ご指摘いただけるだけでも非常にありがたく思います。
コメントくださりありがとうございます。

ACCESS終了時はプロセスの終了を確認してもらっています。
EXCEL出力機能を使わないでファイルを回した場合については、
先日一度、手順4の後、確認者2が別機能を使用時
同様の現象が起こったことがありました。

(1)両確認者とも別機能使用した場合についてと、
(2)新規にACCESSファイルを作成し、オブジェクトをすべてインポートした場合
については、未検証のため両確認者の都合がつき次第検証したい所存です。

当質問お目通し下さりありがとうございます。

3

りんご様
至らぬ質問にお言葉下さり、ありがとうございます。

自動最適化設定について、OFF/ONどちらも試してみたのですが、
同様の現象となってしまいます。
また、ACCESSは現状、単一ファイルで使用しております。
ご助言いただいたとおり、追加情報についても追記2で記載したいと思います。
お目通しくださりありがとうございます。

2
hiroton 2022/03/09 (水) 08:41:11 9aecf@f966d

現象を知っているわけではありません。

「完全終了」はタスクマネージャーにプロセスが残っていないのも確認していますか?
新規にACCESSファイルを作成し、オブジェクトをすべてインポートしてみるとどうですか?
EXCEL出力機能を使わないでファイルを回した場合は正常に動作していますか?

1
だいきち 2022/03/09 (水) 06:28:38

仕事で困ってます。
よろしくお願いします

1
りんご 2022/03/08 (火) 21:18:44 c564b@0e907

 当て推量ですが、自動最適化をOFFにするとどうなりますか?
 追加情報があると、回答がつき易いかもしれません。フロントエンドとバックエンドに分割していますか?

14
ワッフル 2022/03/07 (月) 12:41:38 f1914@318ee

先ほど、お教えいただいた、
サンプルシステムを再度いじっていて
Opt月のありかが分かりました。

ちょっと前に進めそうな気がしました。
ありがとうございます。

13
ワッフル 2022/03/07 (月) 12:35:38 f1914@318ee

返事が遅れてすみません。
Accsessをいじれない曜日があるので。

サンプルが素晴らしかったので、
本当に搭載したいです。

32
りんご 2022/03/07 (月) 03:23:08 c564b@0e907

>> 30
 業者に依頼したり、カレンダーアプリを探したりするほうが、幸せになれると思いますよ?

31
りんご 2022/03/07 (月) 03:05:51 c564b@0e907

例えば、2分割、オブジェクトを2つ作成。

例えば、6分割、オブジェクトを6つ作成。

たぶん、こんな感じではないかと思います。

Do Until rs.EOF
Me("ラベル" & rs!日付 - FirstDay & “予定” & rs!予定番号 & “の時刻”).Caption = rs!時刻
Me("ラベル" & rs!日付 - FirstDay & “予定” & rs!予定番号 & “の案件”).Caption = rs!案件
Me("ラベル" & rs!日付 - FirstDay & “予定” & rs!予定番号 & “の担当者”).Caption = rs!担当者
 If rs!案件の条件 = “ほにゃらら“ Then
 Me("ラベル" & rs!日付 - FirstDay & “予定” & rs!予定番号 & “の担当者”).ForeColor = 8388608
 End If
rs.MoveNext
Loop

(日付別)予定番号と案件の条件をテーブルに作成。
※オブジェクトの数を超えて表示出来ないので、1日に何件までと上限を設ける事になりそう。

30
CROSS 2022/03/05 (土) 23:35:30 c7455@d523b

今回の件は課員からの要望が多いので形にさせてください。よろしくお願いいたします。

29
CROSS 2022/03/05 (土) 18:40:08 c7455@b5450

Hatena様

色々調べているのですが、分割が解らす困っています。
ラベルを改行前に細工をする感じになりますか?
もう少しヒントいただけたら幸いです。

1

レポートの幅には制限かあります。(最大約55cm)
レポートの自動生成だと表形式(フィールドが横並び)なので、横に配置できるコントロール数には当然制限があります。

レポートウィザードで表形式以外で作成するか、それが希望のレイアウトでなければ、ウィザードは使わずにデザインビューで自分でレイアウトしてください。

2
takeo22 2022/03/04 (金) 08:50:20 9a839@14790

ありがとうございます!できました!感謝です!

1

提示のテーブル名を「T_売上」と仮定して回答します。

下記のテーブルを作成してください。
テーブル名「T_連番」
フィールド 連番 数値型

下記のように連番を入力します。

連番
1
2
3
4
5
6
7
8
9
10

SQLビューに下記のSQLを記述します。

SELECT T_売上.商品, T_売上.数量, T_連番.連番 AS 個口番号
FROM T_売上, T_連番
WHERE T_連番.連番<=[数量]
ORDER BY T_売上.商品, T_連番.連番;

上記のクエリの出力結果

商品数量個口番号
A21
A22
B31
B32
B33
C41
C42
C43
C44
12
りんご 2022/03/01 (火) 20:12:32 c564b@0e907

サンプルを解凍した時は、きっちり動いています。

 解決ですね、おめでとう。

搭載しようとするとエラーに。うまく応用できないみたいです。

 別の質問を立てたらどうでしょう。具体的なエラーメッセージを添えて。

11
ワッフル 2022/03/01 (火) 13:43:06 f1914@318ee

お世話になっております。

サンプルを解凍した時は、
きっちり動いています。

搭載しようとすると
エラーに。うまく応用できないみたいです。

10

サンプルファイルを解凍して、そのまま実行した場合もエラーになりますか。

9
ワッフル 2022/02/27 (日) 15:44:00 f1914@318ee

お返事が遅くなってすみません。
サンプルのデーターを
自分のシステムに置き換えているという感じです。

4

できました!
三日三晩悩んでいました。やっと安らかに眠れます。
本当にどうもありがとうございました!

3

ありがとうございます!参考にさせていただきます。

2
hiroton 2022/02/25 (金) 08:46:08 9e337@f966d

DoCmd.OpenReport "外注預", acViewPreview, , "[仕入先コード]=" & rs!仕入先コード

パラメータの入力の下のA020050は仕入先コードです、手入力で一つ一つ仕入先コードを入れると正しくPDFが作られます。

ちゃんと読んでませんが

WHERE "[仕入先コード]=" & rs!仕入先コード
↓
WHERE "[仕入先コード]=A020050"

となるならパラメータ要求されて当然です
仕入先コードが文字列なら

"[仕入先コード]='" & rs!仕入先コード & "'"

"[仕入先コード]=" & rs!仕入先コード

"[仕入先コード]='" & rs!仕入先コード & "'"

とする必要があります

手入力でうまくいく場合のWHERE句を確認してみてください

1
りんご 2022/02/25 (金) 00:45:47 c564b@0e907

 ググっただけですが、参考になれば幸いです。

VBA MS Access OpenReport with Where clause issue
I have an issue with my VBA code. I tried to use Where condition in a OpenReport to filter in my table all my mice alives. The code I used: DoCmd.OpenReport "E_G_Mouse", acViewReport,, [...
Stack Overflow

19

hiroton 様

非常に細かくCurrentSectionTopの仕組みまで分析していただきありがとうございます。
15単位で四捨五入され、解像度の話まで発展するとは想像すらしませんでした‥

正確なdpiの取得をしないと成り立たない繊細な動作をしたいわけではなく、
また CurrentSectionTop を取得する際は必ずカレントレコードが表示エリア内に存在している作りにはなっているので
15単位で補正するやり方でいきたいと思います。
(単純にwindows apiを使った手法が一番とは思いますが…)

accessは奥が深いですね。まだまだ勉強不足を痛感させられます。
hatena様 hiroton様 この度はご教授いただきありがとうございました。大変助かりました。

2
TOKINAITO 2022/02/24 (木) 11:20:56 871c7@2ebde

助かりました。大変ありがとうございました。

18

この方法の問題点

dpiによって結果が変わる

ほぼ決め打ちでも問題ないところですが、正確を期すならdpiの取得が必要です。そこまでするとACCESSの埒外になってしまいます・・・

または、実際にレコードを移動させてCurrentSectionTopを取得し、差を吸収するような仕組み(表示上の詳細セクションの高さを求める仕組み)が必要でしょう

>> 15の回避策は大雑把ながら見どころの有る方法だと思います

96dpi(1Pixel=15Twip)の場合のずれは±7で20レコードあれば最大140Twipずれる可能性があるということになります。このとき、詳細セクションの高さが300Twip程度あれば140Twipずれても四捨五入で欲しいレコードの位置を求めることができます

Macのdpiは72だそうです(古い情報ですが)。この場合同様に考えるとずれは最大±10で20レコードだと200Twipずれる可能性があり、高さが300Twipの場合、高さの半分以上の誤差がでるので四捨五入すると1レコード以上の差になってしまいます。しかしながら、この計算でも14レコードまでであれば正確なレコード数になります

限定された範囲では確からしいことが保証できるので

まるめ = Int(先頭レコード + 0.5) '表示が15レコードくらいまでなら大丈夫

のような感じで対応してしまうのも無くはないかなと思います

カレントレコードが変わる

コード以前の問題ですが、CurrentSectionTopの仕様としてカレントレコードが表示エリア内に存在しないとちゃんとした数値が得られません。カレントレコードを変えたくない場合(編集中の場合・レコード移動時イベントを不用意に発生させたくない場合)や、またはカレントレコードを元に戻す手間などが問題になるかもしれません

windows apiを使った手法はこの問題に悩むことがないのもいいですね

17

どうやらCurrentSectionTopはセクションの高さに応じて補正が入るようです。今回得られた補正量は高さに応じて

セクション高さ実際の高さ補正量
340345+5
454450-4
553555+2
893900+7

これは、一見ばらばらのようですが「15」単位で四捨五入されています
ACCESSは各セクションの高さをTwipで保持していますが、画面の表示はPixel単位でなければなりません。windowsの標準dpiは96なので、Pixel単位(1Pixel=15Twip)で四捨五入されているわけですね

>> 9のずれるパターンもこの計算を当てはめれば

ツールチップの値:9/100
実際に見える先頭レコードの番号:9
curRecNum = Me.CurrentRecord      '値:17
curTop = Me.CurrentSectionTop      '値: 3570
Me.Section("フォームヘッダー").Height  '値:454
Me.Section("詳細").Height        '値: 397

(3570 - Int(454 / 15 + 0.5) * 15) / Int(397 / 15 + 0.5) * 15 = 8
17 - 8 = 9

正しく結果が得られます


以上のことから

Dim TPP As Long 'Twip/Pixel
TPP = 15 'dpiによって変化する

描画ヘッダ高さ = Int(ヘッダ高さ / TPP + 0.5) * TPP
描画詳細高さ = Int(詳細高さ / TPP + 0.5) * TPP

先頭レコード = (描画詳細高さ * 現在レコード - (curTop - 描画ヘッダ高さ)) / 描画詳細高さ

のように、正しく補正を入れれば間違いのない答えが得られます

16
hiroton 2022/02/24 (木) 08:49:05 3cb46@f966d

下記コードにて検証してみました

Dim curHeight As Long
Dim curTop As Long
Dim oldHeight As Long
Dim oldCurTop As Long

curHeight = IIf(Me.Section(acHeader).Visible, Me.Section(acHeader).Height, 0)
curTop = 0
oldHeight = curHeight
oldCurTop = 0

Debug.Print curTop; curHeight

Me.AllowAdditions = True
DoCmd.GoToRecord , , acFirst
Do Until Me.NewRecord
    curHeight = Me.Section(acDetail).Height
    curTop = Me.CurrentSectionTop
    
    Debug.Print curTop; curHeight; curTop - oldCurTop; curTop - oldCurTop - oldHeight
    
    oldHeight = curHeight
    oldCurTop = curTop
    
    If Me.NewRecord Then Exit Do
    DoCmd.GoToRecord , , acNext
Loop

ヘッダー無し、詳細高さ1.575cmの場合

 0  0 
 0  893  0  0 
 900  893  900  7 
 1800  893  900  7 
 2700  893  900  7 
 3600  893  900  7 

ヘッダー高さ0.975cm、詳細高さ1.575cmの場合

 0  553 
 555  893  555  2 
 1455  893  900  7 
 2355  893  900  7 
 3255  893  900  7 
 4155  893  900  7 

ヘッダー高さ0.6cm、詳細高さ1.575cmの場合

 0  340 
 345  893  345  5 
 1245  893  900  7 
 2145  893  900  7 
 3045  893  900  7 
 3945  893  900  7 

ヘッダー高さ0.801cm、詳細高さ1.575cmの場合

 0  454 
 450  893  450 -4 
 1350  893  900  7 
 2250  893  900  7 
 3150  893  900  7 
 4050  893  900  7 

ヘッダー高さ0.6cm、詳細高さ2cmの場合

 0  340 
 345  1134  345  5 
 1485  1134  1140  6 
 2625  1134  1140  6 
 3765  1134  1140  6 
 4905  1134  1140  6 

ヘッダー高さ0.801cm、詳細高さ2cmの場合

 0  454 
 450  1134  450 -4 
 1590  1134  1140  6 
 2730  1134  1140  6 
 3870  1134  1140  6 
 5010  1134  1140  6 

ヘッダー高さ0.801cm、詳細高さ0.801cmの場合

 0  454 
 450  454  450 -4 
 900  454  450 -4 
 1350  454  450 -4 
 1800  454  450 -4 
 2250  454  450 -4 

うーん、これは予想しない(困った)結果に・・・

8

Opt年がサブフォームの名前までは
分かったんですが、
opt月はどこにあるのか?とか。

Opt年 opt月 はオプショングループの名前です。

現状はどの状態でしょうか。
サンプルファイルのフォームを内容を確認している状況でしょうか。
サンプルファイルで実行するとエラーになるということですか。

1

左上の[ファイル]から →[オプション]→[文書校正]→[オートコレクトのオプション]→「2文字目を小文字にする」のチェックを外せば大文字のままになると思います。

7
ワッフル 2022/02/22 (火) 14:01:24 f1914@318ee

お世話になっております。

ただいま設置中だったんですが、
    Me.Opt年.Value = Year(Date)
    Me.opt月.Value = Month(Date)
のあたりでエラーが出ます。

Opt年がサブフォームの名前までは
分かったんですが、
opt月はどこにあるのか?とか。

.Valueはなぜ、エラーになるのか?
とか、分からないことだらけです。

お手数かとは存じますが、
御指南宜しくお願い致します。