Excel 2010: Có cách nào để in các trang không đồng thời không?
Tính năng này đã có trong Excel 2003 nhưng tôi không thể tìm thấy nó trong Excel 2010. Trong Word 2010 nó vẫn đang được sử dụng.
Có khả năng in nhiều trang tính cùng một lúc" ( http://spr.ly/6010eQ96 ), nhưng không in được các trang không đồng thời của cùng một trang tính.
Excel 2003
Lời 2010
Tôi nghĩ đây là một bước lùi của Excel 2010 hoặc có thể tôi chưa tìm ra cách để thực hiện điều này?
Cảm ơn sự hỗ trợ!
Trân trọng,
Lode
Trả lời:
Thật kỳ lạ, khả năng in này dường như đã bị thu hồi kể từ Excel 2007. Mặc dù bạn có thể đặt Vùng in theo cách thủ công để loại trừ một số trang nhất định, nhưng bạn cũng có thể bắt chước quy trình bằng một trong các macro bên dưới. >
>Nhấn Alt+F11 và khi VBE mở ra, hãy sử dụng ngay các menu kéo xuống để Chèn, Mô-đun (ví dụ Alt+I,M ). Dán phần sau vào khung mới có tiêu đề như Book1 - Module1 (Code) . >
> >Sub Print_Odd_Pages() > Dim lAllPages As Long, lStartAt As Long, iPage As Integer > lAllPages = Application.ExecuteExcel4Macro("GET.DOCUMENT(50)") > lStartAt = 1 > Dành cho iPage = lStartAt To lAllPages Bước 2 > ActiveSheet.PrintOut From:=iPage, to:=iPage, Copies:=1, Collate:=True > Tiếp theo >Kết thúc phụ >
>Sub Print_Even_Pages() > Dim lAllPages As Long, lStartAt As Long, iPage As Integer > lAllPages = Application.ExecuteExcel4Macro("GET.DOCUMENT(50)") > lStartAt = 2 > For iPage = lStartAt To lAllPages Bước 2 > ActiveSheet.PrintOut From:=iPage, to:=iPage, Copies:=1, Collate:=True > Next >Kết thúc phụ >
>Sub Print_Some_Pages() > Dim v As Long, lAllPages As Long, vPages As Variant, iPage As Integer > lAllPages = Application.ExecuteExcel4Macro("GET.DOCUMENT(50)") > vPages = Array(1, 2, 3, 6, 7, 8, 12) 'thay đổi phần này để phù hợp với lệnh in của bạn > For v = LBound(vPages) To UBound(vPages) > If vPages(v) <= lAllPages Then > iPage = vPages(v) > ActiveSheet.PrintOut From:=iPage, to:=iPage, Copies:=1, Collate:=True > End If > Next >End Sub >
>Hai cái đầu tiên khá dễ hiểu từ tiêu đề của chúng. Dòng cuối cùng sử dụng một mảng số (dòng thứ 3) để in các trang không theo mẫu cụ thể. Ví dụ của tôi in các trang 1-3, 6-8 & 12. Bạn sẽ cần chỉnh sửa thủ công trang này cho mục đích riêng của mình. Nhấn Alt+Q để quay lại bảng tính của bạn, sau đó nhấn Alt+F8 để mở hộp thoại Macro và R bỏ macro.
Trả lời:
Cảm ơn rất nhiều! Tôi hy vọng Microsoft sẽ giới thiệu lại tính năng này trong phiên bản tiếp theo.
Trả lời:
Jeeped, câu hỏi về Print_SomePages()
Tôi tin điều đó
Application.ExecuteExcel4Macro("GET.DOCUMENT(50)")
chỉ trả về số trang được in từ một bảng tính chứ không phải toàn bộ sổ làm việc. Vì vậy, nếu ai đó chọn một nhóm trang tính (thậm chí tất cả chúng) thì điều khiển in ra vẫn chỉ áp dụng cho trang tính đang hoạt động. Tôi có sai không? Và có tùy chọn GET.DOCUMENT nào khác áp dụng cho toàn bộ sổ làm việc không? Tôi không nghĩ là có; xem http://www.j-walk.com/ss/excel/tips/tip65.htm
Điều buồn cười là tôi đã không bỏ lỡ tính năng này suốt thời gian qua - tuy nhiên bây giờ nó được coi là một tính năng bị thiếu, tôi nhận ra rằng đó là thứ thực sự cần phải quay lại Excel.
Trả lời:
@ JLLatham ; >
>Bạn đúng rằng macro chỉ cho phép dịch vụ in trên một trang tính duy nhất. Tôi kết hợp nó lại với nhau một cách hơi vội vàng và bỏ đi một số 'tính năng' như hộp nhập liệu để cung cấp 1-3, 6-8, 12 có thể được phân tích cú pháp thành mảng biến thể của mảng cuối cùng. Tôi đã đánh dấu chủ đề này vào bộ sưu tập Wikis tiềm năng của mình và hy vọng có thời gian để xem lại nó và giải quyết thỏa đáng hơn tùy chọn Trang bị thiếu trong chức năng in của Excel 2007-2013.
Trả lời:
Chúc may mắn với bộ sưu tập Wiki. Thực ra, tôi đang xây dựng một quy trình dựa trên mã của bạn để nhận thông tin đầu vào từ người dùng thông qua hộp nhập liệu, phân tích cú pháp và đưa nó vào vPages khi tôi gặp phải vấn đề về một trang tính. Và mặc dù tôi đã xử lý tất cả cho đầu vào của người dùng là "1, 2, 6, 99.104", tôi vẫn chưa xử lý các mục như "1, 3, 5-8,11-15,22" và chưa kể đến các đầu vào theo trình tự như "1, 3, 7, 5, 2"
Như tôi đã nói, chúc may mắn với dự án. Đây là đoạn mã tôi đã tổng hợp lại, có lẽ một số trong đó sẽ giúp nỗ lực của bạn dễ dàng hơn một chút:
Phụ ChoosePagesToPrint()
Dim v As Long, lAllPages As Long, vPages() As Variant, iPage As Integer
Làm mờ các lựa chọn của người dùng dưới dạng chuỗi
userChoices = inputBox("Nhập các trang cần in, phân cách bằng dấu phẩy: ", "Các trang cần in", "")
Nếu userChoices = "" Thì
Thoát phụ
Kết thúc nếu
ReDim vPages(1 Đến 1)
userChoices = userChoices & ","
Làm Trong khi Len(userChoices) > 1
MsgBox Val(Left(userChoices, InStr(userChoices, ",") - 1))
vPages(UBound(vPages)) = Left(userChoices, InStr(userChoices, ",") - 1)
userChoices = Right(userChoices, Len(userChoices) - InStr(userChoices, ","))
ReDim Bảo tồn vPages(1 Đến UBound(vPages) + 1)
Vòng lặp
Nếu UBound(vPages) > 1 thì
'xóa cái trống
ReDim Bảo tồn vPages(1 Đến UBound(vPages) - 1)
Kết thúc nếu
lAllPages = Application.ExecuteExcel4Macro("GET.DOCUMENT(50)")
Với v = LBound(vPages) Đến UBound(vPages)
Nếu Val(vPages(v)) > 0 Và Val(vPages(v)) <= lAllPages Thì
iPage = Val(vPages(v))
ActiveSheet.PrintOut Từ:=iPage, To:=iPage, Bản sao:=1, Đối chiếu:=True
Kết thúc nếu
Kế tiếp
Kết thúc phụ
Trước khi dọn dẹp, tôi cũng đã có sẵn mã để lưu tên của trang hiện đang hoạt động, chọn tất cả các trang, sau đó thực hiện phần GET.DOCUMENT(50) (rõ ràng là không có kết quả) thực hiện in và cuối cùng chọn lại trang bắt đầu ban đầu để tách chúng ra. Nhưng có lẽ sẽ tốt hơn nếu để người dùng chọn một hoặc nhiều trang tính rồi thực hiện công việc dựa trên (các) trang tính đã chọn. Và đó là lúc mọi chuyện trở nên thực sự phức tạp: trang số 5 thực sự được chọn dựa trên tổng số trang có thể được in trong toàn bộ sổ làm việc. Đối với điều đó, phần GET.DOCUMENT(50) thực sự có thể trở thành sự trợ giúp một lần nữa - nhưng khi bạn xem qua các trang tính, trang tuyệt đối trong toàn bộ sổ làm việc sẽ trở thành số trang tương đối cho bất kỳ trang tính nào. Đầu tôi quay cuồng - Bây giờ tôi sẽ ngủ trưa.
Comments
Post a Comment