返回列表 上一主題 發帖

[發問] 請教表頭跟表尾列印

Sub zz()
Application.ScreenUpdating = 0
Application.DisplayAlerts = 0
Dim usedH, hd As Range, fn As Range, pd As Range
Set hd = Range(您的頁頭)
Set fn = Range(您的頁尾)
Set pd = ActiveSheet.UsedRange
'usedH 將所需列印高度累加
For Each r In hd.Rows
  usedH = usedH + r.RowHeight
Next
For Each r In fn.Rows
  usedH = usedH + r.RowHeight
Next
'avh 一頁能列印高度
avh = 710 - Int(usedH) '此處我不懂自動計算, 請老師指導
'bodyS 內容開始行, bodyE  內容結尾行
bodyS = hd.Rows.Count + 1
bodyE = pd.Rows.Count - fn.Rows.Count
zc = pd.Columns.Count
Sheets.Copy
Range(Cells(bodyS, 1), Cells([a65536].End(3).Row, 1)).EntireRow.Delete
'pr1 列印內容第一行
pr1 = bodyS
For i = bodyS To bodyE
    n = n + pd.Rows(i).RowHeight
    If n >= avh Then
        Range(pd.Cells(pr1, 1), pd.Cells(i, zc)).Copy Range("a" & [a65536].End(3).Row + 1)
        fn.Copy Range("a" & [a65536].End(3).Row + 1)
        pr1 = i + 1
        n = 0
        ActiveSheet.PrintOut Copies:=1
        Range(Cells(bodyS, 1), Cells([a65536].End(3).Row, 1)).EntireRow.Delete
    End If
Next
ActiveWorkbook.Close 0
Application.ScreenUpdating = 1
Application.DisplayAlerts = 1
End Sub

TOP

忘了說明這是我的想法是.
您的問題可能衹有VBA才可解決
1. 先計算列印頁的高上限(即在一頁內所能列印的所有行高總和),這裡我不懂自動計算, 請老師指導
2. 求出頁頭總行高的和
3. 求出頁腳總行高的和
4. 度出列印資料的高
5. 進行每頁列印重組

VBA 程序大致為在 4# 所寫

TOP

剛才試了一下有欠,現修正如下:

Sub zz()
Application.ScreenUpdating = 0
Application.DisplayAlerts = 0
Dim usedH, hd As Range, fn As Range, pd As Range
Set hd = Range(您的頁頭)
Set fn = Range(您的頁尾)
Set pd = ActiveSheet.UsedRange
'usedH 將所需列印高度累加
For Each r In hd.Rows
  usedH = usedH + r.RowHeight
Next
For Each r In fn.Rows
  usedH = usedH + r.RowHeight
Next
'avh 一頁能列印高度
avh = 710 - Int(usedH) '此處我不懂自動計算, 請老師指導
'bodyS 內容開始行, bodyE  內容結尾行
bodyS = hd.Rows.Count + 1
bodyE = pd.Rows.Count - fn.Rows.Count
zc = pd.Columns.Count
Sheets.Copy
Range(Cells(bodyS, 1), Cells([a65536].End(3).Row, 1)).EntireRow.Delete
'pr1 列印內容第一行
pr1 = bodyS
For i = bodyS To bodyE
    n = n + pd.Rows(i).RowHeight
    If n >= avh Then
        Range(pd.Cells(pr1, 1), pd.Cells(i, zc)).Copy Range("a" & [a65536].End(3).Row + 1)
        fn.Copy Range("a" & [a65536].End(3).Row + 1)
        pr1 = i + 1
        n = 0
        ActiveSheet.PrintOut Copies:=1
        Range(Cells(bodyS, 1), Cells([a65536].End(3).Row, 1)).EntireRow.Delete
    End If
Next
If n Then
    Range(pd.Cells(pr1, 1), pd.Cells(i, zc)).Copy Range("a" & [a65536].End(3).Row + 1)
    fn.Copy Range("a" & [a65536].End(3).Row + 1)
    ActiveSheet.PrintOut Copies:=1
    Range(Cells(bodyS, 1), Cells([a65536].End(3).Row, 1)).EntireRow.Delete
End If
ActiveWorkbook.Close 0
Application.ScreenUpdating = 1
Application.DisplayAlerts = 1
End Sub

TOP

假設您的頁頭是由 A1:K7
修改 Set hd = Range(您的頁頭) 為 Set hd = Range("A1:K7")
如此類推 修改 Set fn = Range(您的頁尾)
一般A4 一頁能容行高 710, 如 超出一頁, 請修改 avh = 710  為 avh = 700 或更少

TOP

很抱歉,由於我的權限未能下載, 請在模組中按F8遂步執行至問題處,把問題顯示再查下。

TOP

        靜思自在 : 有心就有福,有願就有力,自造福田,自得福緣。
返回列表 上一主題