Board logo

標題: [發問] 關於預覽列印或直接列印 [打印本頁]

作者: av8d    時間: 2023-10-27 23:27     標題: 關於預覽列印或直接列印

[attach]36914[/attach]

目前進度:勾選預覽列印後,會自動選取最後一個工作表以外的工作表
進入預覽列印,份數2
但是這部分無法實現,搜尋了沒有結果
只搜尋到直接列印,但是不知道如何下指令,請問是否有前輩知道,謝謝!
作者: Andy2483    時間: 2023-10-28 11:09

回復 1# av8d


    謝謝前輩發表此主題與範例,後學藉此帖學習自訂表單
自訂表單是另一領域學問,初學的練習範例,請前輩參考
表單控制得不好,請各位前輩指教

[attach]36915[/attach]

點選核取方塊>跳出表單:
[attach]36916[/attach]

選取清單 總表 項做預覽列印:
[attach]36917[/attach]

選取清單 工作表1 項做預覽列印:
[attach]36918[/attach]
作者: av8d    時間: 2023-10-28 14:00

回復 2# Andy2483

[attach]36919[/attach]

受到前輩多次提攜與幫助,裡面包含許多元素都是我需要學習的,我已改寫成可以複選的功能(感謝前輩已鋪路)
希望前輩有空的時候能過目及提點,萬分感謝。
作者: Andy2483    時間: 2023-10-28 14:26

回復 3# av8d


    主題是要全部印 (最後一個工作表以外的工作表),所以表單中的複選功能不會改變全部印的結果
如果 清單選取的工作表名 才需要印? 需要再斟酌一下
作者: av8d    時間: 2023-10-28 14:50

回復 4# Andy2483

謝謝前輩提醒,的確是有一個不印,因為要當操作用的頁面(未來會有很多按鈕),祝順心。
作者: 准提部林    時間: 2023-10-28 15:32

不管單選/複選/全選...要迴圈針對選取列印, 否則沒意義
作者: av8d    時間: 2023-10-28 18:34

回復 6# 准提部林

謝謝准大,目前無印表機可測,但是前輩有寫在列印按鈕中
  1. Dim i%, j%
  2. If Val(TextBox1) = 0 Then MsgBox "請輸入列印份數": Exit Sub
  3. Unload Me
  4. For j = 1 To Val(TextBox1)
  5.    For i = 1 To UBound(A)
  6.       Sheets(A(i)).PrintOut
  7.    Next
  8. Next
複製代碼

作者: Andy2483    時間: 2023-10-29 07:33

本帖最後由 Andy2483 於 2023-10-29 08:10 編輯

回復 7# av8d
A是陣列(工作表名),不是清單選取項目,視需求做修改
建議做兩個表單:
1.先複選或全選要印的工作表名 確認(螢幕中間)
A陣列裝這些清單選取的工作表名

2.再跳出要後學2樓預覽列印表單操作(螢幕右下)
作者: 准提部林    時間: 2023-10-29 11:13

單選/複選/全選...其實都同一件事
[attach]36927[/attach]
作者: av8d    時間: 2023-10-29 12:46

本帖最後由 av8d 於 2023-10-29 13:13 編輯

回復 9# 准提部林

原來還能多選一次預覽,讓我所學又更進一步,陣列真的我的弱點。
准大寫得非常淺顯易懂,尤其是這個是我完全想不到的
ListBox1.Selected(i) = CheckBox1.Value
SN = SN & "/" & ListBox1.List(i)
SR = Split(Mid(SN, 2), "/")
很多巧思,謝謝准大的用心,萬分感謝!
作者: av8d    時間: 2023-10-29 15:40

回復 9# 准提部林


研究了一下,有個地方想請教准大,
For Each A In SR
    Sheets(A & "").PrintOut Copies:=PG
Next

這段的""的意思,感謝准大抽空解題,我也會在網上持續找答案的。
作者: 准提部林    時間: 2023-10-29 16:43

回復 11# av8d


A 無法指定"型態" , 加 & "", 即變成"文字型態", 與 cstr(A) 相同,
工作表"名稱"須強制為文本, 否則無法正確運行, 雖然 split 出來的本身就是文字型態, 但還是謹慎!!!

sheets(1),  sheets("1"), 是不同意思~~
作者: av8d    時間: 2023-10-29 17:06

本帖最後由 av8d 於 2023-10-29 17:23 編輯

回復 12# 准提部林


    原來如此,受益良多,萬分感謝~所以使用""是為了準確列印以工作表名稱的頁面,
    准大的寫法算是對於不擅長陣列的我很能看懂,陣列可以簡短撰寫的長度,這是我不足必須去進修的。
作者: Andy2483    時間: 2023-10-30 10:38

本帖最後由 Andy2483 於 2023-11-3 09:46 編輯

回復 9# 准提部林


    謝謝前輩指導,後學學習結果與心得註解如下,請前輩再指導

按鈕跳出自訂表單:
[attach]36928[/attach]

全部選取:
[attach]36929[/attach]

預覽:
[attach]36930[/attach]


表單模組:
Dim SN$, SR
'↑宣告變數:SN是模組字串變數,SR是通用型變數
Private Sub CheckBox1_Click()
Dim i%
'↑宣告i是短整數變數
For i = 0 To ListBox1.ListCount - 1
'↑設順迴圈!i從0 到清單數量-1
    ListBox1.Selected(i) = CheckBox1.Value
    '↑令清單選取清單i索引號項目
Next i
End Sub

'預覽
Private Sub CommandButton1_Click()
Call 選取工作表群組: If SN = "" Then Exit Sub
'↑令執行副程式 選取工作表群組
'↑如果SN變數是空字元!就結束程序執行

UserForm1.Hide
'↑令表單隱藏
Sheets(SR).PrintPreview
'↑令SR陣列(工作表名) 執行預覽,集中在同一個預覽功能做分頁預覽,
'以滑鼠滾動(或按下一頁)查閱,以ESC鍵(或按關閉預覽)結束預覽

UserForm1.Show 0
End Sub

'列印
Private Sub CommandButton2_Click()
Dim A, PG%
'↑宣告A是通用型變數,PG是短整數變數
Call 選取工作表群組: If SN = "" Then Exit Sub
'↑令執行副程式 選取工作表群組
'↑如果SN變數是空字元!就結束程序執行

PG = Val(TextBox1)
'↑令PG這短整數變數是 輸入窗輸入文字轉化的數值
If PG = 0 Then MsgBox "請輸入列印份數!  ": Exit Sub
'↑如果PG變數是0!就跳出提視窗 "請輸入列印份數!  "
For Each A In SR
'↑設逐項迴圈!令A變數是 SR陣列裡的一陣列值
    Sheets(A & "").PrintOut Copies:=PG
    '↑令工作表(A變數轉化為文字的工作表名)列印 PG變數 份數
Next
Unload Me
End Sub

Sub 選取工作表群組()
Dim i%
'↑宣告i是短整數變數
SN = "": SR = ""
'↑令SN這模組字串變數是 空字元,令SR這模組通用變數是 空字元
For i = 0 To ListBox1.ListCount - 1
'↑設順迴圈!i從0 到清單數量-1
    If ListBox1.Selected(i) = True Then SN = SN & "/" & ListBox1.List(i)
    '↑如果清單的i索引號項被選取!就令SN變數連接 "/" 再連接該被選取項目,
    '成為新字串

Next i
If SN = "" Then MsgBox "尚未選取項目!  ": Exit Sub
'↑如果SN變數是 空字元!就跳出提示窗 "尚未選取項目!  ",結束程序執行
SR = Split(Mid(SN, 2), "/")
'↑令以"/"字元分割(SN變數取第2字開始的右方字串),
'令SR這模組變裝盛一維陣列

End Sub


一般模組:
Sub 列印表單()
Dim xS As Worksheet, S$
'↑宣告xS變數是工作表變數,S變數是字串變數
For Each xS In Sheets
'↑設逐項迴圈!令xS變數是本活頁簿的一工作表
   If xS.Name <> "系統檔" Then S = S & "/" & xS.Name
   '↑如果xS變數(工作表)名不是 "系統檔"字串!
   '就令S變數是 自身連接"/",再連接 xS變數(工作表)名的組合新字串

Next
With UserForm1
'↑以下是關於 自訂表單(名:UserForm1)的程序
   .StartUpPosition = 0
   '↑令表單顯示初始位置是 未指定初始設定
   https://learn.microsoft.com/zh-t ... upposition-property
   .Top = Application.Top + 100
   '↑令表單顯示位置下移
   https://learn.microsoft.com/zh-t ... cel.application.top
   .Left = Application.Left + Application.Width - .Width - 20
   '↑令表單顯示位置再右移
   https://learn.microsoft.com/zh-t ... el.application.left
   https://learn.microsoft.com/zh-t ... l.application.width
   With .ListBox1
   '↑以下是關於清單的程序
        .Clear
        '↑令清除
        .List = Split(Mid(S, 2), "/")
        '↑令以陣列值(以"/"字元分割(S變數取第2字開始的右方字串))帶入清單中
        .MultiSelect = fmMultiSelectMulti
        '↑令清單複選
   End With
   .Show 0
   '↑令顯示清單 (不鎖定)
   .CheckBox1 = False
   '↑令核取方塊是 為非選取狀態
   .TextBox1.SetFocus
   '↑令游標置於輸入窗中
   .TextBox1 = 1
   '↑令輸入窗中顯示 1
End With
End Sub
作者: av8d    時間: 2023-10-30 20:57

本帖最後由 av8d 於 2023-10-30 21:04 編輯

回復 14# Andy2483


    謝謝前輩的用心,這註解我受用無窮,讓我的知識領域更進一步(絕對不止一步),
    這些超級詳細的註解,讓原本懵懵懂懂的我,更為精進許多,由衷感謝!
    前輩的雪中送炭真的是非常感謝。
作者: Andy2483    時間: 2023-11-3 16:09

謝謝論壇,謝謝各位前輩
後學藉此帖練習將範例應用於並排顯示,練習方案如下:
[attach]36948[/attach]

按鈕跳出自訂表單:
[attach]36949[/attach]

按並排:
[attach]36950[/attach]
作者: av8d    時間: 2023-11-4 15:57

本帖最後由 av8d 於 2023-11-4 16:01 編輯

回復 16# Andy2483

前輩您好,我剛好有用到,單純使用下,不知道錯在哪裡,還請前輩提示,謝謝

[attach]36951[/attach]

開啟活頁簿1時,會自動開啟活頁簿2,並將兩個活頁簿垂直並排顯示。
但是垂直並排顯示並沒有成功。(預計希望活頁簿1在左邊,活頁簿2在右邊)
作者: Andy2483    時間: 2023-11-4 19:47

本帖最後由 Andy2483 於 2023-11-5 05:00 編輯

回復 17# av8d
後學練習的方案是同一個活頁簿 不同工作表的並排顯示,後學也想學這方面的知識
並排顯示的需求與此主題不同
建議前輩另開新話題請教前輩們
作者: av8d    時間: 2023-11-4 23:13

本帖最後由 av8d 於 2023-11-4 23:28 編輯

回復 18# Andy2483

已另外發問,並持續在尋找答案中,
前輩精益求精的學習方式,讓我從中受益無窮,由衷感謝您的分享!

112/11/4 23:27 已解答(代碼如下)
  1. Application.Windows.Arrange ArrangeStyle:=xlArrangeStyleTiled
複製代碼





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