Board logo

標題: [發問] 表單列印超過一頁範圍,可否在列印時單頁加總數值? [打印本頁]

作者: zhiling    時間: 2012-6-2 16:00     標題: 表單列印超過一頁範圍,可否在列印時單頁加總數值?

請問大大,
excel資料在預覽列印時超過一頁的範圍,可以在印出的每頁頁尾做數值的加總嗎?

例如:
A欄     B欄
大明   123
.......
老陳   325
小花   521
小王   456

資料預覽列印時,第一頁的最後一筆資料只能列印到老陳,想要加總B欄數值,並在第一頁頁尾秀出,
第二頁也是加總B欄,並在下方再加總第一頁與第二頁的B欄,請問excel可以這樣設定嗎?
作者: Hsieh    時間: 2012-6-2 17:52

回復 1# zhiling


    [attach]11230[/attach]
作者: register313    時間: 2012-6-3 15:53

本帖最後由 register313 於 2012-6-3 23:17 編輯

回復 1# zhiling
[attach]11242[/attach]
  1. Private Sub CommandButton1_Click()
  2. N = 10
  3. CommandButton2_Click
  4. ResetAllPageBreaks
  5. r = [A65536].End(xlUp).Row
  6. If r Mod N <> 0 Then m = r \ N + 1
  7. For i = m To 1 Step -1
  8.   k = i * N + 2
  9.   Rows(k & ":" & k + 1).Insert Shift:=xlDown
  10.   Cells(k, 1) = "小計"
  11.   Cells(k + 1, 1) = "累計"
  12.   Cells(k, 2) = Application.Sum(Range(Cells(k - N, 2), Cells(k - 1, 2)))
  13.   Cells(k + 1, 2) = Application.Sum(Range(Cells(3, 2), Cells(k - 1, 2)))
  14.   HPageBreaks.Add Before:=Range("A" & k + 2)
  15. Next i
  16. r = [A65536].End(xlUp).Row
  17. PageSetup.PrintTitleRows = Rows("1:2").Address
  18. PageSetup.PrintArea = "$A$2:$B$" & r
  19. End Sub

  20. Private Sub CommandButton2_Click()
  21. Dim Rng As Range
  22. r = [A65536].End(xlUp).Row
  23. For i = r To 1 Step -1
  24.   If Cells(i, 1) = "小計" Or Cells(i, 1) = "累計" Then
  25.     If Rng Is Nothing Then
  26.       Set Rng = Rows(i)
  27.     Else
  28.       Set Rng = Union(Rng, Rows(i))
  29.     End If
  30.   End If
  31. Next i
  32. If Not Rng Is Nothing Then Rng.Delete
  33. End Sub
複製代碼
  1. Private Sub CommandButton1_Click()               '加入分頁小計累計
  2. N = 10                                           '設定10筆資料一頁
  3. CommandButton2_Click
  4. ResetAllPageBreaks                               '重設所有分頁線
  5. r = [A65536].End(xlUp).Row
  6. If r Mod N <> 0 Then m = r \ N + 1               '共有幾個20的倍數
  7. For i = m To 1 Step -1
  8.   k = i * N + 2
  9.   Rows(k & ":" & k + 1).Insert Shift:=xlDown     '加入2列空白列
  10.   Cells(k, 1) = "小計"
  11.   Cells(k + 1, 1) = "累計"
  12.   Cells(k, 2) = Application.Sum(Range(Cells(k - N, 2), Cells(k - 1, 2)))  '小計
  13.   Cells(k + 1, 2) = Application.Sum(Range(Cells(3, 2), Cells(k - 1, 2)))  '累計
  14.   HPageBreaks.Add Before:=Range("A" & k + 2)     '水平分頁線
  15. Next i
  16. r = [A65536].End(xlUp).Row
  17. PageSetup.PrintTitleRows = Rows("1:2").Address   '設定標題列
  18. PageSetup.PrintArea = "$A$2:$B$" & r             '設定列印範圍
  19. End Sub

  20. Private Sub CommandButton2_Click()                 '移除分頁小計累計
  21. Dim Rng As Range
  22. r = [A65536].End(xlUp).Row
  23. For i = r To 1 Step -1
  24.   If Cells(i, 1) = "小計" Or Cells(i, 1) = "累計" Then
  25.     If Rng Is Nothing Then
  26.       Set Rng = Rows(i)
  27.     Else
  28.       Set Rng = Union(Rng, Rows(i))
  29.     End If
  30.   End If
  31. Next i
  32. If Not Rng Is Nothing Then Rng.Delete
  33. End Sub
複製代碼

作者: zhiling    時間: 2012-6-3 16:13

感謝大大的回覆,又學了一招,

不好意思,應該是我表達的不夠清楚,
所以還是有問題要再請教,

1、我要加總小計的數值共有40筆,預覽列印一頁可以看到25筆,可以在這一頁(前25筆數值)下方小計,
        在第二頁下方的小計另外後面15筆數值,並在第二頁小計下方再加總第一頁與第二頁的小計嗎?

2、我在一個excel檔案中用了好幾個vlookup(大約7.8個),結果存檔時,檔案要跑比較久,有辦法改善嗎?
       (其中有5個vlookup只是為了把另一個sheet的數值整個搬到另一個sheet,但是要比對名稱,
        因為不知道有沒有其他比較快的方式,目前只會使用vlookup一個一個比對)
[attach]11243[/attach]

不好意思,最近才開始試著把excel的函數應用在工作上,之前只會加總的函數而已,所以如果問題比較笨,
請各位大大多多包涵,謝謝!!
作者: Baracuda    時間: 2012-6-4 18:17

因為每台印表機設定一頁有幾個 Rows 是不一定
所以就算先在現在做好了,下一台印表機的設定也不一定可用。

如果要跑的比較快
1.換電腦
2.公式化為值
作者: zhiling    時間: 2012-6-5 07:06

感謝諸位大大的回覆與說明,我再試看看,
確實換一台電腦儲存速度就好多了,謝謝!!
作者: GBKEE    時間: 2012-6-5 09:57

回復 6# zhiling
因為每台印表機設定一頁有幾個 Rows 是不一定
這裡試試看
  1. Option Explicit
  2. Sub Ex()
  3.     Dim Msg As String, xi As Integer
  4.     With ActiveSheet
  5.         If Application.CountA(.Range("a1").CurrentRegion) = 0 Then
  6.             MsgBox "範圍內沒有資料可印列"
  7.             Exit Sub
  8.         End If
  9.         ActiveWindow.View = xlPageBreakPreview
  10.         .PageSetup.PrintArea = .Range("a1").CurrentRegion.Address
  11.         .PageSetup.PrintTitleRows = "$1:$1"
  12.         .PageSetup.LeftFooter = "&14&N 頁-  &P"
  13.         '頁尾右邊:   &14-> 字體Size =14, &N->總頁數,  &P->第幾頁
  14.         For xi = 0 To .HPageBreaks.Count
  15.             Msg = "&14 小計: "                   '&14:  字體Size =14
  16.             If xi = 0 Then
  17.                 Msg = Msg & Application.Sum(.Range([b2], .HPageBreaks(1).Location.Cells(0, 2)))
  18.             ElseIf xi > 0 And xi < .HPageBreaks.Count Then
  19.                 Msg = Msg & Application.Sum(.Range(.HPageBreaks(xi).Location.Cells(1, 2), .HPageBreaks(xi + 1).Location.Cells(0, 2)))
  20.                 Msg = Msg & Chr(10) & "累計: " & Application.Sum(.Range([b2], .HPageBreaks(xi + 1).Location.Cells(0, 2)))
  21.             Else
  22.                 Msg = Msg & Application.Sum(.Range(.HPageBreaks(.HPageBreaks.Count).Location, .[b2].End(xlDown)))
  23.                 Msg = Msg & Chr(10) & "累計: " & Application.Sum(.Range("B:B"))
  24.             End If
  25.         .PageSetup.RightFooter = Msg                        '頁尾左邊:
  26.          .PrintOut From:=xi + 1, To:=xi + 1, Copies:=1      '一頁一頁印列
  27.         Next
  28.         .DisplayPageBreaks = False                          '取消分頁線
  29.     End With
  30.     ActiveWindow.View = xlNormalView
  31.     MsgBox "印列 完成"
  32. End Sub
複製代碼
應用在 3# 檔案 如圖的資料中

[attach]11257[/attach]
作者: ccp    時間: 2012-6-8 16:50

如何能顯示出 千分位數值格式?
作者: register313    時間: 2012-6-8 17:00

回復 8# ccp

一般操作:
格式/儲存格 數值 勾選千分位

工作表函數:
=TEXT(數值,"0,000")

VBA:
Format(數值, "0,000")




歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)