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

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

این در واقع بسیار آسان برای انجام است. ترفند این است که به یاد داشته باشید که باید با شی VisibleRange که متعلق به شی ActiveSheet است کار کنید. می توانید از مجموعه .Columns برای شی VisibleRange استفاده کنید و سپس از متد .Count برای آن مجموعه استفاده کنید. چیزی که در نهایت به آن می رسید تعداد ستون ها است، به این ترتیب:

Sub VisibleColCount()
    Dim sTemp As String

    sTemp = "There are "
    sTemp = sTemp & ActiveWindow.VisibleRange.Columns.Count
    sTemp = sTemp & " columns visible."
    MsgBox sTemp
End Sub

ساده به نظر می رسد، درست است؟ مشکل این است که متد .Count تعداد ستون‌های مجموعه را خواه مخفی‌شده باشند یا نه، برمی‌گرداند. به عنوان مثال، اجازه دهید بگوییم که به صفحه نگاه می‌کنید و می‌بینید که ستون‌های C تا H را نشان می‌دهد. این به این معنی است که 6 ستون نمایش داده می‌شود، و این همان چیزی است که روش .Count در ماکرو بالا برمی‌گرداند. اگر ستون F را مخفی کنید، اکنون ستون های C تا I نمایش داده می شوند. به جای .Count که هنوز 6 را برمی گرداند (نماینده ستون های C، D، E، G، H، و I)، اکنون 7 را برمی گرداند که شامل ستون پنهان است، حتی اگر قابل مشاهده نباشد.

راه حل این وضعیت بررسی ویژگی .Hidden هر ستون در مجموعه .Columns است. تنها در صورتی که خاصیت .Hidden False باشد، باید ستون را به عنوان قابل مشاهده بشمارید، به این ترتیب:

Sub VisibleColCount()
    Dim c As Range
    Dim iCount As Integer
    Dim sTemp As String

    iCount = 0
    For Each c In ActiveWindow.VisibleRange.Columns
        If Not c.Hidden Then iCount = iCount + 1
    Next c

    sTemp = "The active window includes "
    sTemp = sTemp & ActiveWindow.VisibleRange.Columns.Count
    sTemp = sTemp & " columns. Of those columns, "
    If iCount = ActiveWindow.VisibleRange.Columns.Count Then
        sTemp = sTemp & "all "
    Else
        sTemp = sTemp & "only "
    End If
    sTemp = sTemp & iCount & " are visible."
    MsgBox sTemp
End Sub

یک مشکل دیگر با این رویکرد وجود دارد: تا جایی که به VBA مربوط می شود، یک ستون تا زمانی که فقط یک تکه از آن ستون نشان داده شود قابل مشاهده است. همچنین، اگر پیش‌بینی می‌کنید که از پنجره‌ها در صفحه نمایش اکسل خود استفاده کنید، ممکن است بخواهید شی ActivePane را به ترکیب اضافه کنید. اساساً، یک تغییر ساده در ماکروهای بالا انجام می شود: هر جایی که شی ActiveWindow را می بینید، آن را با ActivePane دنبال کنید، مشابه این:

    For Each c In ActiveWindow.ActivePane.VisibleRange.Columns

این تضمین می کند که ماکرو شما در هنگام شمارش فقط به صفحه فعلی در پنجره نگاه می کند.

اگر خواستی، با این لینک از ما حمایت کن

پاسخ شما

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

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

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

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

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

23.2k سوال

8.5k پاسخ

613 دیدگاه

10.8k کاربر

184 نفر آنلاین
0 عضو و 184 مهمان در سایت حاضرند
بازدید امروز: 13500
بازدید دیروز: 13001
بازدید کل: 19467793
...