標題:
[發問]
如何依據儲存格函數判斷列印範圍?
[打印本頁]
作者:
jackson7015
時間:
2014-4-8 16:40
標題:
如何依據儲存格函數判斷列印範圍?
想請問各位前輩們
如何依照指定儲存格的函數變化,來自動設定列印範圍
附件中若B3的數值有變化,則會依照數值做列印票數變化
[attach]17955[/attach]
作者:
yen956
時間:
2014-4-9 11:02
回復
1#
jackson7015
是不是這個意思?
[B3]出現20, PrintArea 設定為列印 第20套 五連單?
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim r1, r2 As Integer, rng As Range
Set rng = Worksheets("支票").[B3]
If Not Intersect(Target, rng) Is Nothing Then
r1 = [B3] * 22 + 22: r2 = [B3] * 22 + 43
ActiveSheet.PageSetup.PrintArea = _
"$I$" & r1 & ":$W$" & r2 & ",$Y$" & r1 & ":$AM$" & r2 & ",$AO$" & r1 & ":$BC$" & r2 _
& ",$BE$" & r1 & ":$BS$" & r2 & ",$BU$" & r1 & ":$CI$" & r2
ActiveSheet.PrintPreview '預覽列印
End If
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
試試看:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim r1, r2 As Integer, rng As Range
Set rng = Worksheets("支票").[B3]
If Not Intersect(Target, rng) Is Nothing Then
For i = 1 To [B3]
r1 = i * 22 + 22: r2 = i * 22 + 43
ActiveSheet.PageSetup.PrintArea = _
"$I$" & r1 & ":$W$" & r2 & ",$Y$" & r1 & ":$AM$" & r2 & ",$AO$" & r1 & ":$BC$" & r2 _
& ",$BE$" & r1 & ":$BS$" & r2 & ",$BU$" & r1 & ":$CI$" & r2
Next
End If
End Sub
複製代碼
作者:
GBKEE
時間:
2014-4-9 18:45
回復
3#
jackson7015
'支票 工作表模組 的程式碼
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Address = "$B$3" And [B3] > 0 Then
If MsgBox("印列 支票 " & Target & "筆", vbYesNo + vbInformation) = vbYes Then
Sheet_PageSetup
Sheet_PrintOut
End If
End If
End Sub
Private Sub Sheet_PageSetup() '印列的設定
With PageSetup
.PrintArea = "$I$44:$W$65" '印列範圍 "一張支票的範圍"
.CenterHorizontally = True '如果列印時頁面上的工作表是水平置中的則為 True
.CenterVertically = True '如果列印時頁面上的工作表是垂直置中的則為 True
.PaperSize = xlPaperB4 '設定紙張大小 '可看PaperSize 說明
.FitToPagesWide = 1 '設定頁寬=1頁
.FitToPagesTall = 1 '設定頁高=1頁
End With
End Sub
Private Sub Sheet_PrintOut()
For I = 1 To [B3]
[L50] = Cells(I + 6, "C")
[M50] = Cells(I + 6, "D")
[O50] = Cells(I + 6, "E")
[P50] = Cells(I + 6, "F")
[Q50] = Cells(I + 6, "G")
PrintOut Copies:=5 '"一張支票的範圍" 印列 五聯單
Next
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
[預覽列印] 可關閉它或是選擇印列,但無法傳回參數供程式作中斷印列或繼續印列的判斷.
且使用:使用視窗的檢視模式切換為分頁符號預覽 試試看
Sub Ex()
Dim Rng As Range, Ar(1 To 5), i As Integer, x As Integer
With Sheets("未到期支票標準")
If .Range("B3") = 0 Then
MsgBox "沒有資料可印列 ?"
Exit Sub
End If
ActiveWindow.View = xlPageBreakPreview '使用中視窗的檢視模式切換為分頁符號預覽
Ar(1) = "第一聯"
Ar(2) = "第二聯"
Ar(3) = "第三聯"
Ar(4) = "第四聯"
Ar(5) = "第五聯"
.ScrollArea = "I6:x27"
With .PageSetup
.PrintArea = "I6:x27" '印列範圍 "一張支票的範圍"
.CenterHorizontally = True '如果列印時頁面上的工作表是水平置中的則為 True
.CenterVertically = True '如果列印時頁面上的工作表是垂直置中的則為 True
.PaperSize = xlPaperA4 '設定紙張大小 '可看PaperSize 說明
.FitToPagesWide = 1 '設定頁寬=1頁
.FitToPagesTall = 1 '設定頁高=1頁
End With
For i = 1 To .[B3]
Set Rng = .Range("C6:g6").Offset(i)
.Range("L12") = Rng(1, 1) '票據號碼
.Range("M12") = Rng(1, 2) '金額
.Range("O12") = Rng(1, 3) '年
.Range("P12") = Rng(1, 4) '月
.Range("Q12") = Rng(1, 5) '日
.Range("X10") = Ar(1)
If MsgBox(.Range("L12") & " 印列", vbYesNo, "票據號碼") = vbYes Then
For x = 1 To 5
.Range("X10") = Ar(x)
.PrintOut Copies:=1 '一張支票的範圍印列五次
Next
End If
Next
.ScrollArea = ""
End With
ActiveWindow.View = xlNormalView
End Sub
複製代碼
作者:
jackson7015
時間:
2015-6-15 09:19
回復
14#
GBKEE
感謝GBKEE版主的詳細協助
讓小弟有個另個方向思考
原本想試試看使用MsgBox把所有要列印的份數資訊一次顯示,不過做不出來
就把版主所提供的單筆資訊做詳細整理
If MsgBox(" 票據號碼:" & Range("L12") & Chr(13) & " 日期:" & Range("O12") & " 年 " & Range("P12") & " 月 " & Range("Q12") & " 日 " & Chr(13) & " 金額:" & Range("M12") & " 元", vbYesNo, "票據明細") = vbYes Then
複製代碼
再次感謝幫忙~
歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)