ซ่อนเซลล์เมื่อพิมพ์ใน Excel


1

ฉันใช้ Excel 2007 ฉันมีแผ่นประมาณการซึ่งฉันจะใช้ในการติดตามข้อมูลลูกค้า มีข้อมูลระดับต่ำที่ลูกค้าไม่ควรเห็นในเอกสารเวอร์ชัน ฉันต้องการบรรลุผลดังต่อไปนี้:

เฉพาะแถวที่มีข้อมูลในเซลล์แรก "หมายเลขงาน" ในคอลัมน์ A จะแสดงเมื่อพิมพ์ วิธีที่ฉันเชื่อว่าสิ่งนี้สามารถทำได้คือสคริปต์ VBA เพื่อซ่อนแถวทั้งหมดโดยไม่มีข้อมูลในเซลล์แรกเมื่อพิมพ์และยกเลิกการซ่อนหลังจากนั้น

ลิงก์ไปยังเทมเพลตเอกสารใน Google เอกสาร

ถ้าเป็นไปได้ส่วนตรงกลางควรขยายได้เพื่อทำภารกิจเพิ่มเติมและถึงแม้ว่ามันอาจจะง่ายที่สุดเพียงแค่มี 100 เซลล์ในส่วนตรงกลางซึ่งปฏิบัติตามกฎการซ่อน

คำตอบ:


1

นี่คือรหัสที่คุณต้องการแทง การซ่อนและการซ่อนแถวเป็นเรื่องง่ายถ้าคุณรู้วิธี ฉันพิมพ์แผ่นงานโดยใช้ตัวบันทึกแมโครเพื่อให้คุณสามารถดูว่าคุณสามารถปรับแต่งการพิมพ์ได้อย่างไรหากคุณต้องการ ฉันจะตั้งค่าคีย์ลัดเพื่อเรียกใช้แมโครนี้

Option Explicit
Sub PrintNonBlankColA()

  Dim RowCrnt As Integer
  Dim RowLast As Integer

  ' Note: This operates on the active worksheet

  Application.ScreenUpdating = False

  RowLast = Cells.SpecialCells(xlCellTypeLastCell).Row

  ' Hide all rows with a used cell and column "A" empty
  For RowCrnt = 1 To RowLast
    If IsEmpty(Cells(RowCrnt, "A")) Then
      Range(RowCrnt & ":" & RowCrnt).EntireRow.Hidden = True
    End If
  Next

  ' For the following statements, I switched on the macro recorder,
  ' printed a sheet with all the headers and footers I wanted,
  ' switched off the macro recorder and copied the code out of the
  ' saved macro.
  ' Consider: .CenterHeader = "Activities for Acme Inc"
  ' If you name the worksheets for the client, the following would
  ' give you a heading for the appropriate client:
  ' .CenterHeader = "Activities for " & ActiveSheet.Name
  With ActiveSheet.PageSetup
      .PrintTitleRows = ""
      .PrintTitleColumns = ""
  End With
  ActiveSheet.PageSetup.PrintArea = ""
  With ActiveSheet.PageSetup
      .LeftHeader = ""
      .CenterHeader = "Activities for Acme Inc"
      .RightHeader = ""
      .LeftFooter = "&D"
      .CenterFooter = "Page &P of &N"
      .RightFooter = "Copyright Nadir Co."
      .LeftMargin = Application.InchesToPoints(0.75)
      .RightMargin = Application.InchesToPoints(0.75)
      .TopMargin = Application.InchesToPoints(1)
      .BottomMargin = Application.InchesToPoints(1)
      .HeaderMargin = Application.InchesToPoints(0.5)
      .FooterMargin = Application.InchesToPoints(0.5)
      .PrintHeadings = False
      .PrintGridlines = False
      .PrintComments = xlPrintNoComments
      .CenterHorizontally = False
      .CenterVertically = False
      .Orientation = xlPortrait
      .Draft = False
      .PaperSize = xlPaperA4
      .FirstPageNumber = xlAutomatic
      .Order = xlDownThenOver
      .BlackAndWhite = False
      .Zoom = 100
      .PrintErrors = xlPrintErrorsDisplayed
  End With
  ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True

  ' Unhide all rows
  Cells.EntireRow.Hidden = False

End Sub

การโหลดโค้ดด้านบนไปยังโมดูล

จากภายใน Excel:

  • เลือกToolsแล้วนั้นMacro หรือคลิกVisual Basic Editor Alt+F11คุณอาจจะเห็น Project Explorer อยู่ทางซ้ายมือหน้าต่างทันทีที่ด้านล่างโดยมีสีเทาเป็นส่วนใหญ่ของหน้าจอ
  • เลือกแล้วInsert Moduleส่วนสีเทาจะเป็นสีขาว
  • คัดลอกและวางรหัสของฉันลงในส่วนสีขาวทันที ขณะนี้สามารถเรียกใช้แมโครกับชีตใดก็ได้

การใช้มาโคร

  • สลับเป็น Excel
  • เลือกToolsแล้วนั้นMacro หรือคลิกMacros... Alt+F8หน้าต่างแมโครขนาดเล็กจะปรากฏขึ้น คุณจะมีมาโครเพียงตัวเดียวดังนั้นจึงจะถูกเลือกและRunปุ่มจะทำงาน

คุณสามารถเรียกใช้แมโครได้โดยคลิกAlt+F8แล้วEnterแต่คุณอาจพบว่าสะดวกกว่าต่อไปนี้

  • Optionsจากหน้าต่างแมโครเลือก ตอนนี้คุณจะเห็นหน้าต่างตัวเลือกแมโครขนาดเล็ก
  • ใส่ตัวอักษร (ฉันมักจะใช้ด) ลงในช่องเล็ก ๆ น้อย ๆ OKและคลิก
  • ปิดหน้าต่างแมโคร

ตอนนี้คุณสามารถสลับไปยังแผ่นงานของลูกค้าที่เหมาะสมและคลิกCtrl+qเพื่อเรียกใช้แมโคร

ปรับแมโครให้เหมาะกับความต้องการของคุณ

กลางรหัสของฉันคือความคิดของฉันของวิธีคุณอาจตั้งค่ารายงานด้วย "กิจกรรมสำหรับ Acme Inc" ที่ด้านบนและวันที่หมายเลขหน้าและลิขสิทธิ์ที่ด้านล่าง

แทนที่รหัสนี้ดังนี้:

  • จาก Excel เลือกToolsแล้วนั้นMacro Record New macroคุณเห็นหน้าต่างบันทึกแมโครขนาดเล็ก
  • ตรวจสอบให้แน่ใจว่ากล่องข้อความภายใต้ "เก็บแมโครใน:" พูดว่า "สมุดงานนี้"
  • OKคลิก หน้าต่างจะหายไป คุณอาจเห็นหน้าต่างเล็ก ๆ ที่มีปุ่มรูปสี่เหลี่ยมกำกับการบันทึกหยุด หากหน้าต่างนี้ปรากฏขึ้นให้ข้ามไปครู่หนึ่ง
  • พิมพ์รายงานลูกค้าด้วยส่วนหัวท้ายกระดาษระยะขอบ ฯลฯ ที่คุณต้องการ
  • หากคุณเห็นหน้าต่างเล็ก ๆ ให้คลิกมัน หากคุณไม่สามารถดูได้เลือกToolsแล้วนั้นMacroStop Recording
  • สลับไปยัง Visual Basic Editor จะมีโมดูลใหม่ คลิกที่มันในหน้าต่างโครงการ Explorer
  • คุณจะเห็นงบทั้งหมดที่จะพิมพ์รายงานลูกค้าในแบบที่คุณชอบและSub Macro1()End Sub
  • คัดลอกข้อความเหล่านั้น (ไม่ใช่แบบย่อยและแบบปลาย) และวางไว้ด้านบนของข้อความเทียบเท่าในแมโครของฉัน

หากคุณไม่รวมชื่อลูกค้าในหัวกระดาษและท้ายกระดาษรายงานมาโครของคุณจะพร้อมใช้งาน ฉันให้ตัวอย่างหนึ่งในรหัสของฉันซึ่งฉันใช้ชื่อแผ่นงานเป็นส่วนหัวของรายงาน โดยไม่ทราบข้อกำหนดที่แน่นอนของคุณฉันไม่สามารถแม่นยำมากขึ้น แต่ฉันหวังว่านี่จะช่วยให้คุณเริ่มต้น


สวัสดีฉันไม่ได้เก่งขนาดนั้นด้วย excel ฉันคลิกขวาที่โค้ดมุมมองแท็บและป้อนสิ่งนี้ลงในเวิร์กชีทเพื่อทดสอบดูเหมือนว่าจะทำสิ่งที่ฉันต้องการ แต่ฉันไม่รู้ว่าแมโคร explorer คืออะไรและฉันจะตั้งค่าอย่างไร
เจอราร์ด

เมื่ออยู่ในแผ่นงานที่ใช้งานอยู่ให้กดALT + F8เพื่อเปิดหน้าต่างมาโคร เลือกPrintNonBlankColAแล้วคลิกปุ่มRUN
CharlieRB

1
คุณลบสำเนาของแมโครที่คุณบันทึกไว้กับแผ่นงานหรือไม่ หากคุณเก็บสำเนานั้นแล้วคัดลอกแผ่นงานนั้นคุณจะพบว่ามีมาโครสองชุด หากคุณตั้งค่า Ctrl + q เพื่อเรียกใช้สำเนาแรกตอนนี้คุณจะมีมาโครสองตัวที่จะเรียกใช้ด้วย Ctrl + q และจะไม่เรียกใช้อย่างใดอย่างหนึ่ง หากคุณคลิกAlt+F8คุณจะเห็นรายการมาโคร คุณเห็น: Sheet2.PrintNonBlankColA, Sheet4.PrintNonBlankColA, PrintNonBlankColA หรืออะไรที่คล้ายกัน ถ้าเป็นเช่นนั้น Excel จะไม่รู้ว่าต้องทำอะไร
Tony Dallimore

1
หากคุณทำการเปลี่ยนแปลงคุณต้องตัดสินใจว่าเวอร์ชันใดเป็นเวอร์ชันหลัก เปิดเอกสาร NotePad ที่ว่างเปล่าและคัดลอกเวอร์ชันต้นแบบไป ลบมาโครทั้งหมดออกจากชีตทั้งหมดและโมดูลทั้งหมด คัดลอกเวอร์ชันต้นแบบจาก NotePad ไปที่โมดูล 1 กำหนดคีย์ "พิมพ์" อีกครั้ง ฉันหวังว่าจะแก้ไขปัญหา
Tony Dallimore

1
เมื่อฉันเขียนแมโครฉันจะทดสอบจากโปรแกรมแก้ไข เมื่อฉันลองทำมาโครซ้ำฉันเรียกใช้จาก Excel ที่ฉันสังเกตเห็นว่ากะพริบในระหว่างการพิมพ์ ฉันละเว้นApplication.ScreenUpdating = Falseซึ่งฉันได้เพิ่มไว้ที่ด้านบนสุดของแมโครเพื่อแก้ไขปัญหานี้
Tony Dallimore

0

ดังนั้นคำถามคืออะไร หาก"ฉันจะซ่อนเซลล์ / แถวเมื่อพิมพ์" ได้อย่างไรคำตอบคือใช้Workbook_BeforePrintเหตุการณ์เพื่อตั้งค่าแผ่นสำหรับการพิมพ์เรียกใช้งานการพิมพ์จากนั้นเรียกคืนมุมมองก่อนหน้า


สคริปต์สูตร / VBA ใดที่จะตรวจสอบเพื่อดูว่างานมีตัวเลขหรือไม่หากไม่ปรากฏแถวนั้นจะถูกซ่อนเมื่อฉันพิมพ์เอกสารโดยอัตโนมัติ
เจอราร์ด

0

คุณสามารถลองเลือกเซลล์ที่คุณต้องการซ่อนไปที่การจัดรูปแบบแล้วการป้องกันแล้วซ่อน จากนั้นเลือกแท็บบทวิจารณ์ปกป้องแผ่นงาน เก็บรหัสผ่านว่างไว้จากนั้นพิมพ์

เมื่อคุณต้องการเซลล์กลับมาเพียงแค่กดแผ่นป้องกัน

น่าเบื่อไปหน่อยแล้วก็ทำมันด้วยมาโคร แต่ก็ง่ายขึ้นในเวลาเดียวกัน

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.