ایجاد سوال
dark_mode
0 دوستدار 0 امتیاز منفی
15 visibility
موضوع: آفیس توسط:

کریستن یک کاربرگ دارد که حاوی هزاران ردیف داده است. در ستون B نام خانوادگی شخص در هر ردیف است و ردیف ها با استفاده از این نام خانوادگی به عنوان کلید اصلی مرتب می شوند. وقتی کریستن کاربرگ را چاپ می کند، خوب است اگر پاورقی بتواند نام خانوادگی آخرین فردی را که در آن صفحه چاپ شده است، در سمت راست نشان دهد. این به او این امکان را می دهد که پرینت را به دقت بررسی کند و به راحتی صفحه مورد نیاز خود را شناسایی کند.

هیچ قابلیت داخلی برای انجام این کار با اکسل وجود ندارد، اما می توانید یک ماکرو برای انجام آن ایجاد کنید. بخش دشوار این است که بفهمید صفحه بریکه در کجا قرار دارد تا ماکرو شما بتواند آخرین سلول ستون B را برای صفحه بگیرد. ماکرو زیر را در نظر بگیرید که یکی از راه های تشخیص بریک صفحه را پیاده سازی می کند:

Sub PrintNamesInRightFooter()
    Dim iLNCol As Integer
    Dim lPage As Long
    Dim lPr As Long
    Dim iFirstRow As Integer
    Dim iLastRow As Integer
    Dim sPrintArea As String

    iLNCol = 2      Column from which to grab name

    With ActiveSheet
        sPrintArea = .PageSetup.PrintArea

        For lPage = 1 To .PageSetup.Pages.Count
            lPr = ((lPage - 1) Mod (.HPageBreaks.Count + 1))
            If lPr = 0 Then
                iFirstRow = 1
                If sPrintArea > "" Then
                    iFirstRow = .Range(sPrintArea).Cells(1).Row
                End If
            Else
                iFirstRow = .HPageBreaks(lPr).Location.Row
            End If
            If (lPr + 1) > .HPageBreaks.Count Then
                iLastRow = .Cells(iFirstRow, iLNCol).End(xlDown).Row
            Else
                iLastRow = .HPageBreaks(lPr + 1).Location.Row - 1
            End If
            .PageSetup.RightFooter = .Cells(iLastRow, iLNCol)
            .PrintOut From:=lPage, To:=lPage
        Next
    End With
End Sub

ماکرو از هر صفحه در کاربرگ فعال عبور می کند و آخرین ردیف را با استفاده از مجموعه .HPageBreaks محاسبه می کند. هر یک از اعضای مجموعه را می توان برای تعیین ردیف اول هر صفحه استفاده کرد، اما منطق در ماکرو از ردیف قبل از آن استفاده می کند تا نام مورد نظر را بگیرد و آن را در قسمت سمت راست پاورقی صفحه قرار دهد. از آنجایی که پاورقی برای هر صفحه در حال تغییر است، هر بار فقط یک صفحه از کاربرگ چاپ می شود.

لازم به ذکر است که در برخی شرایط استفاده از مجموعه .HPageBreaks می تواند باعث ایجاد خطا در VBA شود. مایکروسافت این موضوع را در این URL طولانی مضحک توضیح می دهد:

https://support.microsoft.com/en-us/topic/you-receive-a-subscript-out-of-range-error-message-when-you-use-hpagebreaks-or-vpagebreaks-location-in-excel-ec4a8e22-9b58-349d-b160-f7a4f561c809

اگر ماکرو را اجرا کنید و با خطا مواجه شدید (همان چیزی که در URL بالا توضیح داده شده است)، می توانید درست بعد از خط "With ActiveSheet" موارد زیر را اضافه کنید:

        .Cells(.UsedRange.Rows.Count + .UsedRange.Row - 1, _
          .UsedRange.Columns.Count + .UsedRange.Column - 1).Select
اگر خواستی، با این لینک از ما حمایت کن

پاسخ شما

looks_5نام شما برای نمایش - اختیاری
حریم شخصی : آدرس ایمیل شما محفوظ میماند و برای استفاده های تجاری و تبلیغاتی به کار نمی رود
عدد چهار رقمی در تصویر را وارد کنید

برای جلوگیری از این تایید در آینده, لطفا وارد شده یا ثبت نام کنید.
اگر حساب گوگل دارید به راحتی وارید شوید

0 پاسخ وجود دارد

سوال مشابهی یافت نشد

برای دسترسی راحت به مطالب سایت ، اپلیکیشن سایت را نصب کنید
و لطفا بعد از نصب امتیاز دهید. با تشکر از حمایت شما

23.2k سوال

8.5k پاسخ

608 دیدگاه

9.7k کاربر

79 نفر آنلاین
0 عضو و 79 مهمان در سایت حاضرند
بازدید امروز: 20279
بازدید دیروز: 23384
بازدید کل: 15271176
...