Microsoft Access 掲示板

申請出来るものと不備のもの一緒に印刷したい

19 コメント
views
4 フォロー

hatena様無沙汰をしております。ご指導のほどお願いいたします。
listSupplierから自動車会社を選択するようにして
申請に不備がなく、申請中を販社連絡のレポートを印刷するようにしています。
さらに不備があり申請出来ないものを、不備として印刷するようにしています。
これらは過去haena様よりご教示頂いたもので感謝申し上げます。

さてこれらについて申請中のレポートに、不備欄を設け申請中のもの未申請のもの(申請日がnull)
として販社連絡レポートに一緒に印刷したいのですがご教示お願いします。

Dim stFilter As String
Dim stFilter2 As String
Dim stFilter3 As String
Dim varItm As Variant
Dim varItm2 As Variant
Dim varItm3 As Variant
    With Me.listSupplier
        For Each varItm In .ItemsSelected
            stFilter = stFilter & "," & .ItemData(varItm)
        Next
    End With
    If stFilter = "" Then
        MsgBox "本店を選択してください。"
    Else
        stFilter = "本部 In(" & Mid(stFilter, 2) & ")And ([申請日]=#" & [TXT申請] & "#) )"
        On Error Resume Next
        DoCmd.OpenReport "販社連絡", acViewPreview, , stFilter
         On Error GoTo 0
    With Me.listSupplier
        For Each varItm3 In .ItemsSelected
            stFilter3 = stFilter3 & "," & .ItemData(varItm3)
        Next
    End With   
    If stFilter3 = "" Then
        MsgBox "本店を選択してください。"
    Else
        stFilter3 = "本部 In(" & Mid(stFilter3, 2) & ")And  [不備] =true"
        
        On Error Resume Next
        DoCmd.OpenReport "販社連絡不備", acViewPreview, , stFilter3
       On Error GoTo 0 
    
    End If
    End If
DoCmd.Close acForm, "F車庫証明台帳"

End Sub
tokinaito
作成: 2019/04/08 (月) 10:23:05
最終更新: 2019/04/08 (月) 12:05:08
通報 ...
1

さてこれらについて申請中のレポートに、不備欄を設け申請中のもの未申請のもの(申請日がnull)
として販社連絡レポートに一緒に印刷したいのですがご教示お願いします。

ひとつのレポートに 申請中 のものと 未申請 のものを表示したいということでしょうか。
2つのレポートが同じレイアウトなら、
レコードソースのクエリに、下記の演算フィールドを設けて、

申請中: Not [申請日] Is Null

レポートのグループ化の機能で、このフィールドでグループ化すればいいでしょう。

2
tokinaito 2019/04/09 (火) 14:33:08 bb5c2@2f12b

hatena様早速のお返事ありがとうございます。おっしゃるとおりにしましたが
申請日がないものについて表示されません。
上記の式のなかで
stFilter = "本部 In(" & Mid(stFilter, 2) & ")And ([申請日]=#" & [TXT申請] & "#) )"

stFilter = "本部 In(" & Mid(stFilter, 2) & ")And ([申請日]=#" & [TXT申請] & "#) )
OR 本部 In(" & Mid(stFilter, 2) & ")And ([申請日]=" & IS NULL([TXT申請]) & ") )"
なんて素人考えでやってますがうまくいきません。

やりたいことはレポートに中からTXT申請日に記入のある申請日と 申請日の記入がない申請日を
選びたいのですが。宜しくご教示のほどお願いします。

3

やりたいことはレポートに中からTXT申請日に記入のある申請日と 申請日の記入がない申請日を
選びたいのですが。

stFilter に下記のような条件文が格納されるように考えましょう。

本部 In(1,2) And ([申請日] Is Null Or [申請日]=#2019/04/01#)

上記の意味は、(本部が1か2) かつ (申請日が未入力 または 申請日が2019/04/01)
ということです。() 内が優先順位が高いということを利用します。

ということで、下記でどうでしょう。

stFilter = "本部 In(" & Mid(stFilter, 2) & ") And ([申請日] Is Null Or [申請日]=#" & Me.TXT申請 & "#)"
4
tokinaito 2019/04/10 (水) 09:51:28 bb5c2@2f12b

hatena様有り難うございます。
ご指摘のようにしましたが、抽出条件でデータ型が一致しませんと出ます。
宜敷お願いします。
>>申請中: Not [申請日] Is Null
レポートのグループ化の機能で、このフィールドでグループ化すればいいでしょう。
以上のように対応はしています。

5

確認ですが、「申請日の記入がない」と「不備のもの」というのはイコールですか。

6
tokinaito 2019/04/10 (水) 10:24:09 bb5c2@2f12b

早々に有り難うございました。
申請日の記入がないものは不備ということでコントロールに
自動的に記入になるようにしています。
今後はこういう形に持って行こうと思ってます。
宜敷お願いします。
Dim stFilter As String
Dim stFilter2 As String
Dim stFilter3 As String
Dim varItm As Variant
Dim varItm2 As Variant
Dim varItm3 As Variant
    With Me.listSupplier
        For Each varItm In .ItemsSelected
            stFilter = stFilter & "," & .ItemData(varItm)
        Next
    End With

    If stFilter = "" Then
        MsgBox "本店を選択してください。"
    Else
        stFilter = "本部 In(" & Mid(stFilter, 2) & ") And ([申請日] Is Null Or [申請日]=#" & Me.TXT申請 & "#)"

        On Error Resume Next
        DoCmd.OpenReport "販社連絡", acViewPreview, , stFilter
         On Error GoTo 0

    End If
DoCmd.Close acForm, "F車庫証明台帳"

End Sub

7

エラーの原因の特定のために下記の手順でコードを順に実行して試してみてください。

On Error の行はデバッグ中はコメントアウトします。
stFilter の条件式をシンプルなものから少しずつ足していく。
エラーが出た直前に足して条件式が原因と特定できる。
Debug.Print でイミディエイトウィンドにstFilterの内容を出力して
それが条件式として問題ないか確認する。
1.

        stFilter = "本部 In(" & Mid(stFilter, 2) & ")"
        Debug.Print stFilter
        'On Error Resume Next 
        DoCmd.OpenReport "販社連絡", acViewPreview, , stFilter
        'On Error GoTo 0

2.

        stFilter = "本部 In(" & Mid(stFilter, 2) & ") And ([申請日]=#" & [TXT申請] & "#)"
        Debug.Print stFilter
        'On Error Resume Next 
        DoCmd.OpenReport "販社連絡", acViewPreview, , stFilter
        'On Error GoTo 0

3.

        stFilter = "本部 In(" & Mid(stFilter, 2) & ") And ([不備]=true Or [申請日]=#" & [TXT申請] & "#)"
        Debug.Print stFilter
        'On Error Resume Next 
        DoCmd.OpenReport "販社連絡", acViewPreview, , stFilter
        'On Error GoTo 0
8
tokinaito 2019/04/11 (木) 09:05:25 bb5c2@2f12b

お世話になります。
1では全申請日が表示されます。
2ではtxt申請日分だけ表示されます。
3では抽出条件でデータ型が一致しませんと出ます。
宜敷お願いします。

9
hatena 2019/04/11 (木) 09:41:15 修正

それでは、下記ではどうですか。

stFilter = "本部 In(" & Mid(stFilter, 2) & ") And ([申請日] Is Null Or [申請日]=#" & [TXT申請] & "#)"
10
tokinaito 2019/04/11 (木) 10:03:59 bb5c2@2f12b

お世話になります。
3でお示しされたものと一緒ですね。
抽出条件でデータ型が一致しませんと出ます。
何ででしょうかね。
宜敷お願いします。

11
tokinaito 2019/04/11 (木) 10:18:50 bb5c2@2f12b

クエリーで申請日無しを設け 申請日無し: IIf([不備]=-1,"不備")
stFilter = "本部 In(" & Mid(stFilter, 2) & ") And ([申請日無し] ="不備" Or [申請日]=#" & [TXT申請] & "#)"
としましたが受け付けてくれません。

12
tokinaito 2019/04/11 (木) 11:47:56 bb5c2@2f12b

すみません。修正です。
stFilter = "本部 In(" & Mid(stFilter, 2) & ") And [申請日無し]='" & "不備" & "'or ( [申請日]=#" & [TXT申請] & "#)"
やはり抽出条件でデータ型が一致しませんと出ます。

13

エラーが出たあと、イミディエイトウィンドウに出力されている条件式をコピーしてここに貼り付けてもらえますか。

あと、エラーだ出た時に、エラーダイアログの[デバッグ]ボタンをクリックしたときに反転表示されるコードはどこですか。

14
tokinaito 2019/04/11 (木) 15:03:05 bb5c2@2f12b

お世話になります。
イミディエイトウィンドウにでるのは次です。
本部 In(2) And ([不備]=true Or [申請日]=#2019/04/10#)
デバッグは次です
オートフォントサイズプログラムの8行目です。
Str = Nz(Ctr.Value, "") 'ここでエラーが出る場合は、Str = Nz(Ctr.Value,"")
ちなみに当該レポートでオートフォントサイズを使わなければうまくいくようです。
オートフォントサイズプログラムここでも重宝しています。
こういう調べ方もあるんですね。勉強になります。

15

エラーがでるのはそこでしたか。先にそれを確認すべきでした。

stFilter = "・・・・" の部分はまったく関係ないですね。

Str = Nz(Ctr.Value,"")
か原因というのは特定できましたが、なぜそうなるかはわからないですね。
コントロールの値が Null だとしても、Nz関数で "" に変換しているだけなので、エラーになるはずがないのてすが。

その前後10行分のコードを張り付けてもらえますか。

16
tokinaito 2019/04/12 (金) 09:01:42 bb5c2@2f12b

お世話になります。
AutoFontSizeには大変重宝しており感謝申し上げます。
ところで下記項目を縮小で対応しており
この中で出来日を縮小から外せばクレームはないようです。
当面出来日は縮小から外しても支障はありませんので
外して対応しようかと思います。

Private Sub 詳細_Format(Cancel As Integer, FormatCount As Integer)
AutoFontSize Me.支店名, 10
AutoFontSize Me.販社本部, 10
AutoFontSize Me.備考, 10
AutoFontSize Me.申請者, 10
AutoFontSize Me.支店名, 10
AutoFontSize Me.登録予定日, 10
AutoFontSize Me.出来日, 10
AutoFontSize Me.管轄署, 10
End Sub

出来日は申請日と下記のように関連していますので、このあたりに
関係しているのかなと素人考えではありますが。

でもご教示頂いたもので充分でございますので感謝申し上げます。

Public Function 許可日(申請日 As Date) As Date
    Dim 営業日 As Long
    許可日 = 申請日
    Do
        許可日 = 許可日 + 1
        Select Case Weekday(許可日)
        Case vbMonday To vbFriday
            If IsNull(DLookup("祝日名", "T_祝日", "日付=#" & 許可日 & "#")) Then
                営業日 = 営業日 + 1
            End If
        End Select
    Loop Until 営業日 = 2
End Function

クエリーで 出来日:許可日([申請日])

17
tokinaito 2019/04/12 (金) 09:02:40 bb5c2@2f12b

活用させて頂いているAutoFontSizeプログラム
Public Sub AutoFontSize(Ctr As Control, IniFontSize As Integer)
    Const MinFontSize = 4 '最小のフォントサイズ
    Const d = 53 'うまく収まらずに改行されてしまう場合はここの数値を増やす
    Dim rpt As Report, Str As String, W As Long
    Dim arStr, i As Integer, H As Long
    Set rpt = CodeContextObject
With rpt
    If Ctr.ControlType = acTextBox Then
      Str = Nz(Ctr.Value, "") 'ここでエラーが出る場合は、Str = Nz(Ctr.Value,"")
    ElseIf Ctr.ControlType = acLabel Then
        Str = Ctr.Caption
    Else
        Exit Sub
    End If
    If Str = "" Then Exit Sub
    .FontName = Ctr.FontName

18
hatena 2019/04/12 (金) 13:16:54 修正

Function 許可日 が原因の可能性があります。
下記ように変更してください。

Public Function 許可日(申請日 As Variant) As Variant
    Dim 営業日 As Long
    許可日 = 申請日
    If IsNull(許可日) Then Exit Function 
    Do
        許可日 = 許可日 + 1
        Select Case Weekday(許可日)
        Case vbMonday To vbFriday
            If IsNull(DLookup("祝日名", "T_祝日", "日付=#" & 許可日 & "#")) Then
                営業日 = 営業日 + 1
            End If
        End Select
    Loop Until 営業日 = 2
End Function
19
tokinaito 2019/04/12 (金) 14:52:14 bb5c2@2f12b

このたびはお時間をとらせて申し訳ありませんでした。
おかげさまで完璧でございます。
大変有り難うございました。