|
▼ニャンソ さん:こんにちは〜〜
>>それで、次に、 こちらが 知りたいのは
>>
>>Step 1. と Step 2. は どのようなコードを書いて成功されたのでしょうか?
返信ありがとうございます。
コードを詳細には読んでないのと、検証用にダミーのサンプルデータを作って
ないので、コメントできませんが、
>
>Option Explicit
>
>Private Book4 As Workbook
>Private Book5 As Workbook
>Private Book6 As Workbook
>
> With Book6.Worksheets("Temp") 'Temp Sheetに必要データだけ転記
> .UsedRange.Clear
> '列見出しのコピー
> .Cells(nRow, 1) = "Group番号" 'あとで Book3より引用
> .Cells(nRow, 2) = shtA.[C4].Value '県名
> .Cells(nRow, 3) = shtA.[D4].Value '地区★
> .Cells(nRow, 4) = shtA.[F4].Value '従業員番号-----+
> .Cells(nRow, 5) = shtA.[G4].Value '従業員氏名 |印刷項目
> .Cells(nRow, 6) = shtA.[Y4].Value '申請金額 |
> .Cells(nRow, 7) = shtA.[Z4].Value '実金額 -------+
> With shtA
> Set cc = .Range("C4", .Cells(.Rows.Count, "C").End(xlUp))
> End With
> cc.Resize(, 24).AdvancedFilter xlFilterCopy, _
> CriteriaRange:=c, _
> CopyToRange:=.Cells(nRow, 2).Resize(, 6) '別シートに抽出
>kanabunさんに考えて頂いたコードを
>
>Book1=Book4
>Book2=Book5
>Book3=Book6
>G1=DT1
>Book4の見出し行が「4」
>
>に変更しました。
のように、ご自分で変数とセル位置を入れ替えておられるのは、コードの
理解のために、とっても良い方法だと思います。
>'>5.合計金額(申請金額・実金額それぞれ)を算出 (数式入力)
> '----------- 集計行が不明なので割愛 ------------
> '印刷します
> shtP.PrintPreview '⇒ 実用時には .PrintOut に変更
>
>のところを
>
> shtP.PrintOut '⇒ 実用時には .PrintOut に変更
>
>と変更したのですが、印刷されず…
>Step 2.で実行が完了してしまいます。
>
>特にエラー等出ないので、何故なのか良く分かりません。
むむ、、、
これはですねぇ、エラーが出ないということは、
グループ番号(1〜12) で Autofilterかけて 1行も抽出されていないからじゃ
ないですか?
コードを追ってくと、
>'>3.グループ番号・従業員番号順に並び変え
> With c.CurrentRegion
> .Sort Key1:=.Columns(1), Key2:=.Columns(4), _
> Header:=xlYes
> End With
> .Columns(6).Insert '「申請日」列を挿入 空白
> Set cc = c.CurrentRegion.Resize(, 8) '8列
> '◆A:Group番号 D:従業員NB E:員名 F:申請日 G:申請金額 H:実金額
ここまででBook6(マクロの書いてあるBook)の[Temp]シートに ↑の列番号に
必要なデータが集積されることになっています。
A列はグループ番号です。数値で 1〜12 の範囲が書き込まれているはずです。
ここまでは OK ですか?
いや、たぶん、大丈夫ではないんでしょう。
グループ番号がA列に書き込まれていなかったり、書き込まれていても 1〜12
までの「数値」でなかったりすると、
>' 4.グループ番号(1〜12)別に 印刷シート[B8]へ 値のみ転記・印刷する
> For i = 1 To 12
> cc.Columns(1).AutoFilter 1, i
◆↑ ここで、A列に 1〜12 の数値でAutofilterをかけています。
これが
A列にグループ番号が書き込まれていなかったり、書き込まれていても 1〜12
までの「数値」でなかったりすると、何も抽出されず、
↓次の行のIf分で 「可視行が見出し行を加えて2行以上あれば 印刷する」
> If cc.Columns(1).SpecialCells(xlVisible).Count > 1 Then
という判断をしています。これは、もともと、いつもグループ番号1〜12 に
対応するデータがあるとは限らないので、あるグループ番号がなければ、
印刷をスキップするためです。いちども PrintPreview されないということ
は、1〜12までの番号が [Temp]シートのA列にひとつもない、ということだか
ら、ではないでしょうか?
(他にも原因は考えられるかもしれませんが、コードを読んでいて真っ先に
思いついたのは 上記のAutofilterでキーとなるA列のデータのことでした)
なお、
> shtP.PrintPreview '⇒ 実用時には .PrintOut に変更
のところを .PrintOut にするのは ちゃんと動くようになって(印刷したい
内容がプレヴューできるようになって)からでいいですよ。(^^)
紙がもったいない。
マクロブックの[Temp]シートのA列に書き込むデータは
同じマクロブックの[List]シートに書いてあるグループ番号リスト(対応表)
で、グループ番号は従業員番号(?)と対応している --- こういう想定をして
いましたが、この前提は いまでも有効ですか?
そのあたり、もういちど、[Temp]シート [List]シートを見ながら、チェック
お願いします。
#(私用で、2日間、掲示板にアクセスできません m(_ _)m)
|
|