Board logo

標題: [發問] 如何依據儲存格函數判斷列印範圍? [打印本頁]

作者: jackson7015    時間: 2014-4-8 16:40     標題: 如何依據儲存格函數判斷列印範圍?

想請問各位前輩們
如何依照指定儲存格的函數變化,來自動設定列印範圍

附件中若B3的數值有變化,則會依照數值做列印票數變化

[attach]17955[/attach]
作者: yen956    時間: 2014-4-9 11:02

回復 1# jackson7015
是不是這個意思?
[B3]出現20, PrintArea 設定為列印 第20套 五連單?
  1. Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  2.     Dim r1, r2 As Integer, rng As Range
  3.     Set rng = Worksheets("支票").[B3]
  4.     If Not Intersect(Target, rng) Is Nothing Then
  5.         r1 = [B3] * 22 + 22: r2 = [B3] * 22 + 43
  6.         ActiveSheet.PageSetup.PrintArea = _
  7.              "$I$" & r1 & ":$W$" & r2 & ",$Y$" & r1 & ":$AM$" & r2 & ",$AO$" & r1 & ":$BC$" & r2 _
  8.                    & ",$BE$" & r1 & ":$BS$" & r2 & ",$BU$" & r1 & ":$CI$" & r2
  9.        ActiveSheet.PrintPreview    '預覽列印
  10.     End If
  11. End Sub
複製代碼

作者: jackson7015    時間: 2014-4-9 16:05

回復 2# yen956

感謝yen956前輩的指導

想請教的是列印所有的部分
是否可以更改成[B3]=31的時候列印部分為1~31的五聯單 ?

因為好像會牽涉到頁數部分
就是列印出來的1~5頁是第一份五聯單、6~10頁為第二份五聯單...類推
所以不曉得該更改哪些部分

想請大大們幫忙一下,感激不盡~
作者: yen956    時間: 2014-4-9 16:47

回復 3# jackson7015
試試看:
  1. Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  2.     Dim r1, r2 As Integer, rng As Range
  3.     Set rng = Worksheets("支票").[B3]
  4.     If Not Intersect(Target, rng) Is Nothing Then
  5.         For i = 1 To [B3]
  6.             r1 = i * 22 + 22: r2 = i * 22 + 43
  7.             ActiveSheet.PageSetup.PrintArea = _
  8.                  "$I$" & r1 & ":$W$" & r2 & ",$Y$" & r1 & ":$AM$" & r2 & ",$AO$" & r1 & ":$BC$" & r2 _
  9.                        & ",$BE$" & r1 & ":$BS$" & r2 & ",$BU$" & r1 & ":$CI$" & r2
  10.         Next
  11.     End If
  12. End Sub
複製代碼

作者: GBKEE    時間: 2014-4-9 18:45

回復 3# jackson7015
  1. '支票 工作表模組 的程式碼
  2. Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  3.     If Target.Address = "$B$3" And [B3] > 0 Then
  4.        If MsgBox("印列 支票 " & Target & "筆", vbYesNo + vbInformation) = vbYes Then
  5.             Sheet_PageSetup
  6.             Sheet_PrintOut
  7.        End If
  8.     End If
  9. End Sub
  10. Private Sub Sheet_PageSetup()      '印列的設定
  11.     With PageSetup
  12.         .PrintArea = "$I$44:$W$65"  '印列範圍   "一張支票的範圍"
  13.         .CenterHorizontally = True  '如果列印時頁面上的工作表是水平置中的則為 True
  14.         .CenterVertically = True    '如果列印時頁面上的工作表是垂直置中的則為 True
  15.         .PaperSize = xlPaperB4      '設定紙張大小  '可看PaperSize 說明
  16.         .FitToPagesWide = 1         '設定頁寬=1頁
  17.         .FitToPagesTall = 1         '設定頁高=1頁
  18.     End With
  19. End Sub
  20. Private Sub Sheet_PrintOut()
  21.     For I = 1 To [B3]
  22.         [L50] = Cells(I + 6, "C")
  23.         [M50] = Cells(I + 6, "D")
  24.         [O50] = Cells(I + 6, "E")
  25.         [P50] = Cells(I + 6, "F")
  26.         [Q50] = Cells(I + 6, "G")
  27.         PrintOut Copies:=5    '"一張支票的範圍"  印列 五聯單
  28.     Next
  29. End Sub
複製代碼

作者: jackson7015    時間: 2014-4-10 15:33

本帖最後由 jackson7015 於 2014-4-10 15:41 編輯

回復 4# yen956
回復 5# GBKEE

感謝版大和前輩們的協助
今天研究了一天
愚鈍的我一直不曉得該把程式法放在哪個地方
有放置到工作表單1內的時候,可以動作
但是造成點擊到[B3]就會執行程式碼
其他試過放在物件、表單、模組..內的程式碼都沒有反應
且程式碼執行時,無法預覽列印
只有直接列印出來才能知道是否正確(花了蠻多張紙的...)

是否指導小弟該正確放在何處...感激不盡...:L
作者: GBKEE    時間: 2014-4-10 15:46

回復 6# jackson7015

支票 工作表模組 的程式碼

[attach]17974[/attach]
作者: jackson7015    時間: 2014-4-11 16:20

回復 7# GBKEE

感謝GBKEE版大的指導
原本以為是會以Workbook_BeforePrint,所以才搞混了
重新查看了一遍網站上的舊文,慢慢瞭解編譯的方式了

巨集運作得很完美,再次感謝版上的大大們的幫忙
謝謝~
作者: jackson7015    時間: 2015-6-5 08:46

回復 7# GBKEE

不好意思,想再請GBKEE大大幫忙看一下

因之前都直接手KEY,最近才開始使用此程式
發現了一些問題

列印範圍的部份有錯誤
第一聯要從J:X;第二聯要從Y:AN;類推..

列印部分變成第一聯的J:W有五份
應該要1~5聯各一份,每聯的列印範圍為22R*16C

執行列印前無法先執行ActiveSheet.PrintPreview    '預覽列印
  
再請大大幫忙看看要更改哪些部分
作者: GBKEE    時間: 2015-6-7 14:54

回復 9# jackson7015
列印範圍的部份有錯誤
第一聯要從J:X;第二聯要從Y:AN;類推..
列印部分變成第一聯的J:W有五份
應該要1~5聯各一份,每聯的列印範圍為22R*16C

你1樓的附檔,資料只有A:H 欄有資料可以重新附檔說明看看嗎.
作者: jackson7015    時間: 2015-6-8 08:15

回復 10# GBKEE

感謝GBKEE版主回覆

附檔資料在第44列開始還有資料,共到791列
因每聯沒有標註聯號,所以要在最後欄位標註聯號,共計五聯
在依據票數資料來決定列印份數,每份五聯

最後附上新的格式,一樣是第44列開始有格式
[attach]21128[/attach]
作者: GBKEE    時間: 2015-6-8 15:24

回復 11# jackson7015


試試看

    [attach]21132[/attach]
作者: jackson7015    時間: 2015-6-9 17:02

回復 12# GBKEE

感謝GBKEE版主幫忙
測試6.7次後,皆可正常運作

不過1.2次會發生公式沒有帶入的情況,內容會出現000000的狀況
研究了一下程式的部分,好像不好帶入預覽列印的部分

   再次感謝大大的幫忙:D
作者: GBKEE    時間: 2015-6-11 15:28

回復 13# jackson7015
[預覽列印] 可關閉它或是選擇印列,但無法傳回參數供程式作中斷印列或繼續印列的判斷.

且使用:使用視窗的檢視模式切換為分頁符號預覽 試試看
  1. Sub Ex()
  2.     Dim Rng As Range, Ar(1 To 5), i As Integer, x As Integer
  3.     With Sheets("未到期支票標準")
  4.         If .Range("B3") = 0 Then
  5.             MsgBox "沒有資料可印列 ?"
  6.             Exit Sub
  7.         End If
  8.         ActiveWindow.View = xlPageBreakPreview  '使用中視窗的檢視模式切換為分頁符號預覽
  9.         Ar(1) = "第一聯"
  10.         Ar(2) = "第二聯"
  11.         Ar(3) = "第三聯"
  12.         Ar(4) = "第四聯"
  13.         Ar(5) = "第五聯"
  14.         .ScrollArea = "I6:x27"
  15.         With .PageSetup
  16.             .PrintArea = "I6:x27"  '印列範圍   "一張支票的範圍"
  17.             .CenterHorizontally = True  '如果列印時頁面上的工作表是水平置中的則為 True
  18.             .CenterVertically = True    '如果列印時頁面上的工作表是垂直置中的則為 True
  19.             .PaperSize = xlPaperA4      '設定紙張大小  '可看PaperSize 說明
  20.             .FitToPagesWide = 1         '設定頁寬=1頁
  21.             .FitToPagesTall = 1         '設定頁高=1頁
  22.         End With
  23.         
  24.         For i = 1 To .[B3]
  25.             Set Rng = .Range("C6:g6").Offset(i)
  26.             .Range("L12") = Rng(1, 1)  '票據號碼
  27.             .Range("M12") = Rng(1, 2)  '金額
  28.             .Range("O12") = Rng(1, 3)  '年
  29.             .Range("P12") = Rng(1, 4)  '月
  30.             .Range("Q12") = Rng(1, 5)  '日
  31.             .Range("X10") = Ar(1)
  32.             If MsgBox(.Range("L12") & " 印列", vbYesNo, "票據號碼") = vbYes Then
  33.                 For x = 1 To 5
  34.                     .Range("X10") = Ar(x)
  35.                     .PrintOut Copies:=1      '一張支票的範圍印列五次
  36.                 Next
  37.             End If
  38.         Next
  39.         .ScrollArea = ""
  40.     End With
  41.     ActiveWindow.View = xlNormalView
  42. End Sub
複製代碼

作者: jackson7015    時間: 2015-6-15 09:19

回復 14# GBKEE

感謝GBKEE版主的詳細協助
讓小弟有個另個方向思考
原本想試試看使用MsgBox把所有要列印的份數資訊一次顯示,不過做不出來
就把版主所提供的單筆資訊做詳細整理
  1. If MsgBox(" 票據號碼:" & Range("L12") & Chr(13) & " 日期:" & Range("O12") & " 年 " & Range("P12") & " 月 " & Range("Q12") & " 日 " & Chr(13) & " 金額:" & Range("M12") & " 元", vbYesNo, "票據明細") = vbYes Then
複製代碼
再次感謝幫忙~




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