簡體   English   中英

如何使用復選框將工作表作為一個文件打印為Excel VBA

[英]How to use Checkbox to print worksheets as one file Excel VBA

我在Excel工作簿中有11個工作表(Sheet1,Sheet2,Sheet3等)的列表。 我需要能夠從該列表中選擇一組要作為一個文件打印的圖紙。 工作表的名稱不會更改。

因此,如果我想一次打印所有11個,我會輸入:

ThisWorkbook.Sheets(Array("Sheet1", "Sheet2", "Sheet3", "Sheet4","Sheet5","Sheet6","Sheet7","Sheet8","Sheet9","Sheet10","Sheet11",).PrintOut

但我要選擇11的任意組合以打印出來。

ThisWorkbook.Sheets(Array("Sheet3", "Sheet5", "Sheet7,"Sheet9","Sheet11").PrintOut

我的目標是使工作簿變得易於使用,因此我設置了復選框,如果復選框控制單元為TRUE,則將取消隱藏這些特定工​​作表。 快速說明:

If Sheets("ControlSheet").Range("A1").Value = TRUE then
Sheets("Sheet1").Visible = TRUE

'where ControlSheet Range A1 is the cell linked to the checkbox for that sheet. 

我希望能夠使用這些相同的復選框來選擇要打印的紙張。

  • 迄今為止,我已經能夠單獨打印每張紙,但是我希望它們將所有文件打印為一個文件。
  • 我試圖根據控制單元格的值設置字符串名稱或變量數組,並在我的VBA中將其引用為打印數組,但出現“下標超出范圍”錯誤

我的特定問題:我想基於工作表中的單元格值在VBA中生成一個動態數組,並能夠使用該數組將特定的工作表打印為一個文件。

如果您認為我可能對我的需求過於復雜,可以接受其他建議。 感謝所有幫助!

因此,僅打印該11張清單中的非隱藏圖紙?

Sub PrintVisibleSheets()

    Dim arr, s, lst, sep

    arr = Array("Sheet1", "Sheet2", "Sheet3", "Sheet4", "Sheet5", _
          "Sheet6", "Sheet7", "Sheet8", "Sheet9", "Sheet10", "Sheet11")

    For Each s In arr
        If ThisWorkbook.Sheets(s).Visible Then
            lst = lst & sep & s
            sep = "|" 'add separator after first pass
        End If
    Next s

    'any visible sheets?
    If Len(lst) > 0 Then ThisWorkbook.Sheets(Split(lst, "|")).PrintOut

End Sub

最終代碼如下! 希望這可以幫助別人!

Sub PrintVisibleSheets()

If Sheets("ControlSheet").Range("C32").Value = True Then

   Sheets("Sheet1").Visible = True

   End If

'next

If Sheets("ControlSheet").Range("C33").Value = True Then

   Sheets("Sheet2").Visible = True
   End If

'next

   If Sheets("ControlSheet").Range("C34").Value = True Then

   Sheets("Sheet3").Visible = True

   End If

'next

   If Sheets("ControlSheet").Range("C35").Value = True Then

   Sheets("Sheet4").Visible = True

    End If

'next

   If Sheets("ControlSheet").Range("C36").Value = True Then

   Sheets("Sheet5").Visible = True

   End If


'next

   If Sheets("ControlSheet").Range("C37").Value = True Then

   Sheets("Sheet6").Visible = True

   End If

'next

   If Sheets("ControlSheet").Range("C38").Value = True Then

   Sheets("Sheet7").Visible = True

   End If

   'next




''''''''''''
'''''''''''''''''''''''''''''''''
''''''''''''''''''''''''''''''''''''''''''''''''
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''


 'Hide Sheets if False




   If Sheets("ControlSheet").Range("C32").Value = True Then

   Sheets("Sheet1").Visible = True

   End If




'next

If Sheets("ControlSheet").Range("C33").Value = False Then

   Sheets("Sheet2").Visible = False
   End If



'next

   If Sheets("ControlSheet").Range("C34").Value = False Then

   Sheets("Sheet3").Visible = False

   End If

'next

   If Sheets("ControlSheet").Range("C35").Value = False Then

   Sheets("Sheet4").Visible = False


    End If

'next

   If Sheets("ControlSheet").Range("C36").Value = False Then

   Sheets("Sheet5").Visible = False


   End If


'next

   If Sheets("ControlSheet").Range("C37").Value = False Then

   Sheets("Sheet6 ").Visible = False


   End If

'next


   If Sheets("ControlSheet").Range("C42").Value = False Then

   Sheets("Sheet7").Visible = False


   End If



   Dim arr, s, lst, sep

   arr = Array("Sheet1", "Sheet2", "Sheet3", "Sheet4", "Sheet5", "Sheet6", "Sheet7")

   For Each s In arr
       If ThisWorkbook.Sheets(s).Visible Then
               lst = lst & sep & s
               sep = "|"
               End If

               Next s

               If Len(lst) > 0 Then


               Application.Dialogs(xlDialogPrinterSetup).Show
               ThisWorkbook.Sheets("Sheet1").PageSetup.PrintQuality = 600
               ThisWorkbook.Sheets("Sheet2").PageSetup.PrintQuality = 600
               ThisWorkbook.Sheets("Sheet3").PageSetup.PrintQuality = 600
               ThisWorkbook.Sheets("Sheet4").PageSetup.PrintQuality = 600
               ThisWorkbook.Sheets("Sheet5").PageSetup.PrintQuality = 600
               ThisWorkbook.Sheets("Sheet6").PageSetup.PrintQuality = 600
ThisWorkbook.Sheets("Sheet7").PageSetup.PrintQuality = 600

                            ThisWorkbook.Sheets(Split(lst, "|")).PrintOut

               End If

End Sub

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM