نمایش نتایج: از شماره 1 تا 9 , از مجموع 9

موضوع: دستور مخفی کردن sheet در VB

  1. #1


    آخرین بازدید
    2019/11/06
    تاریخ عضویت
    January 2016
    محل سکونت
    کرمان
    نوشته ها
    40
    امتیاز
    42
    سپاس
    152
    سپاس شده
    32 در 12 پست
    تعیین سطح نشده است

    دستور مخفی کردن sheet در VB

    با سلام و احترام
    ممنونم از پاسخگویی و کمک شما دوست عزیز (البته استاد من محسوب میشوید)
    مقدمه:
    من یک دستور ساده نوشته ام که تمام شیت ها را بجز چند شیت مخفی میکند. که نمونه دستور در زیر ارائه شده است.
    سوال:
    1) آیا این دستور امکان خلاصه شدن را دارد؟ (مثلاً تمام شیط ها را مخفی کند بجز چند شیط خاص)
    2) آیا بطور کلی خلاصه کردن دستورات تاثیری بر روی سرعت انجام دستورات دارد؟
    نمونه دستور:
    Sub formhide()
    Sheet7.Visible = xlSheetVisible
    Sheet3.Visible = xlSheetVisible
    Sheet4.Visible = xlSheetVisible
    Sheet5.Visible = xlSheetVisible
    Sheet1.Visible = xlSheetVisible
    Sheet6.Visible = xlSheetHidden
    Sheet10.Visible = xlSheetHidden
    Sheet8.Visible = xlSheetHidden
    Sheet11.Visible = xlSheetHidden
    Sheet9.Visible = xlSheetHidden
    Sheet12.Visible = xlSheetHidden
    Sheet13.Visible = xlSheetHidden
    Sheet15.Visible = xlSheetHidden
    Sheet14.Visible = xlSheetHidden
    Sheet1.Visible = xlSheetHidden
    Sheet16.Visible = xlSheetHidden
    Sheet17.Visible = xlSheetHidden
    Sheet21.Visible = xlSheetHidden
    Sheet22.Visible = xlSheetHidden
    Sheet23.Visible = xlSheetHidden
    Sheet21.Visible = xlSheetHidden
    Sheet19.Visible = xlSheetHidden
    Sheet24.Visible = xlSheetHidden
    Sheet18.Visible = xlSheetHidden
    Sheet20.Visible = xlSheetHidden
    Sheet7.Activate
    End Sub
    اخطار: این یک موضوع قدیمی است
    به دلیل قدیمی بودن موضوع، ممکن است برخی فایل های ضمیمه به درستی کار نکنند. لطفا در صورت عدم ضرورت، از بالا آوردن موضوعات قدیمی خودداری نمایید.
    پاسخ مورد نظر براي اين تاپيك ارسال شده است.
    ویرایش توسط 2009tv : 2016/06/27 در ساعت 10:49

  2.  

  3. #2


    آخرین بازدید
    6 ساعت پیش
    تاریخ عضویت
    September 2013
    محل سکونت
    بچه محل آقا امام رضا
    نوشته ها
    4,472
    امتیاز
    12316
    سپاس
    8,923
    سپاس شده
    10,587 در 3,746 پست
    سطح اکسل
    100.00 %

    سلام دوست عزیز
    یک قاعده کلی رو همیشه تو ذهنتون داشته باشید. وقتی یک کار مشابهی داره چندین بار تکرار میشه مطمئن باشید یک حلقه میشه جایگزین تکرار کرد

    این یک نمونه کد خدمت شما:
    کد:
    Sub HideSheets()
    Dim sht As Worksheet
    For Each sht In ActiveWorkbook.Worksheets
        If sht.Name <> "Sheet2" Then sht.Visible = False
    Next sht
    End Sub


  4. #3


    آخرین بازدید
    6 ساعت پیش
    تاریخ عضویت
    September 2013
    محل سکونت
    بچه محل آقا امام رضا
    نوشته ها
    4,472
    امتیاز
    12316
    سپاس
    8,923
    سپاس شده
    10,587 در 3,746 پست
    سطح اکسل
    100.00 %

    من الان دقت کردم دیدم شما چند تا شیت رو ویزیبل کردین چندتا رو اینویزیبل
    برای اینکار من کد زیر رو پیشنهاد میدم:
    کد:
    Sub HideSheets()
    Dim sht As Worksheet
    For Each sht In ActiveWorkbook.Worksheets
        visibles = Array("sheet1", "sheet2")
        If IsError(Application.Match(sht.Name, visibles, False)) Then
            sht.Visible = xlSheetHidden
        Else
            sht.Visible = xlSheetVisible
        End If
    Next sht
    End Sub


  5. #4


    آخرین بازدید
    2019/11/06
    تاریخ عضویت
    January 2016
    محل سکونت
    کرمان
    نوشته ها
    40
    امتیاز
    42
    سپاس
    152
    سپاس شده
    32 در 12 پست
    تعیین سطح نشده است

    عالی و آموزنده بود!

    اما دستور عنوان شده دوم برای من خطا میدهد:
    آیا تابع شرط را می توان بصورتی ساده تر نوشت که نسبت به حالات خاص کمتر حساس باشه!

    ممنونم. مثل همیشه برادرانه و مانند یه استاد راهنمایی ام کردید.
    در پناه خدا
    ویرایش توسط 2009tv : 2016/06/27 در ساعت 13:14

  6. سپاس ها (1)


  7. #5


    آخرین بازدید
    6 ساعت پیش
    تاریخ عضویت
    September 2013
    محل سکونت
    بچه محل آقا امام رضا
    نوشته ها
    4,472
    امتیاز
    12316
    سپاس
    8,923
    سپاس شده
    10,587 در 3,746 پست
    سطح اکسل
    100.00 %

    خواهش میکنم
    حل کردن تاپیک یادتون نره

  8. #6


    آخرین بازدید
    2019/11/06
    تاریخ عضویت
    January 2016
    محل سکونت
    کرمان
    نوشته ها
    40
    امتیاز
    42
    سپاس
    152
    سپاس شده
    32 در 12 پست
    تعیین سطح نشده است

    میشه لطف کنید راهنمایی کنید که تابع شرط را کمی ساده تر و یا بشکلی دیگر بنویسم که خطا ندهد چون این دستور برای من خطا میدهد.
    (مثلاً تابع شرط عنوان کند اگر نام شیت ها شامل نام های موجود در آرایه بود، آشکار شوند و در غیر اینصورت مخفی شوند)

  9. #7


    آخرین بازدید
    6 ساعت پیش
    تاریخ عضویت
    September 2013
    محل سکونت
    بچه محل آقا امام رضا
    نوشته ها
    4,472
    امتیاز
    12316
    سپاس
    8,923
    سپاس شده
    10,587 در 3,746 پست
    سطح اکسل
    100.00 %

    نقل قول نوشته اصلی توسط 2009tv نمایش پست ها
    میشه لطف کنید راهنمایی کنید که تابع شرط را کمی ساده تر و یا بشکلی دیگر بنویسم که خطا ندهد چون این دستور برای من خطا میدهد.
    (مثلاً تابع شرط عنوان کند اگر نام شیت ها شامل نام های موجود در آرایه بود، آشکار شوند و در غیر اینصورت مخفی شوند)
    چه خطایی دریافت میکنین دوست عزیز؟
    الان شرطی که نوشتم دقیقا همین چیزی که شما گفتین رو بررسی میکنه

    بجای تابع MATCH که گذاشتم میتونین اینطوری هم استفاده کنید:

    کد:
    Sub HideSheets()
    Dim sht As Worksheet
    For Each sht In ActiveWorkbook.Worksheets
        visibles = Array("Sheet1", "Sheet2")
        If UBound(Filter(visibles, sht.Name)) < 0 Then
            sht.Visible = xlSheetHidden
        Else
            sht.Visible = xlSheetVisible
        End If
    Next sht
    End Sub

  10. سپاس ها (2)


  11. #8


    آخرین بازدید
    2019/11/06
    تاریخ عضویت
    January 2016
    محل سکونت
    کرمان
    نوشته ها
    40
    امتیاز
    42
    سپاس
    152
    سپاس شده
    32 در 12 پست
    تعیین سطح نشده است

    دوباره اخطار داد فکر کنم مشکل از فایل خودم است.
    حال می خواهم دستور را بصورتی ساده تر بنویسم.
    مثلاً اینطوری دستور را به vb معرفی کنم:
    x شامل تمام شیت ها
    y آرایه ای شامل نام چند شیت (مثلاً "sheet7", "sheet3", "sheet4", "sheet5", "sheet1" )
    z شامل تمام شیط های x به غیر از شیط های عنوان شده در y
    حالا دستور وارد کنیم:
    y.Visible = xlSheetVisible
    z.Visible = xlSheetHidden
    اگر امکانش هست برای همچین دستوری راهنماییم کنید! (البته میدونم خیلی سطحی و ساده است)
    *متاسفم برای یک سوال خیلی وقتتان را گرفتم*
    در ضمن نگفتید خلاصه کردن دستورات آیا تاثیری در سرعت دارد؟ (مثلاً همین دستور)
    ممنونم

  12. #9


    آخرین بازدید
    6 ساعت پیش
    تاریخ عضویت
    September 2013
    محل سکونت
    بچه محل آقا امام رضا
    نوشته ها
    4,472
    امتیاز
    12316
    سپاس
    8,923
    سپاس شده
    10,587 در 3,746 پست
    سطح اکسل
    100.00 %

    نقل قول نوشته اصلی توسط 2009tv نمایش پست ها
    دوباره اخطار داد فکر کنم مشکل از فایل خودم است.
    حال می خواهم دستور را بصورتی ساده تر بنویسم.
    مثلاً اینطوری دستور را به vb معرفی کنم:
    x شامل تمام شیت ها
    y آرایه ای شامل نام چند شیت (مثلاً "sheet7", "sheet3", "sheet4", "sheet5", "sheet1" )
    z شامل تمام شیط های x به غیر از شیط های عنوان شده در y
    حالا دستور وارد کنیم:
    y.Visible = xlSheetVisible
    z.Visible = xlSheetHidden
    اگر امکانش هست برای همچین دستوری راهنماییم کنید! (البته میدونم خیلی سطحی و ساده است)
    *متاسفم برای یک سوال خیلی وقتتان را گرفتم*
    در ضمن نگفتید خلاصه کردن دستورات آیا تاثیری در سرعت دارد؟ (مثلاً همین دستور)
    ممنونم

    فایلتون رو اگه میتونین بذارین ببینم شاید مشکل از آفیستون باشه

    این چیزی که شما میگین تصور شماست که ساده تره اما تفهیم این موضوع به اکسل کار رو فقط پیچیده میکنه. کدی که من نوشتم میگه همه شیت ها رو نگاه کن (x). اگر دیدی شیتی که داری بررسی میکنی جزو لیست ویزیبل من هست (y) ویزیبلش کن وگرنه مخفی کن. دیدین؟ اصلا نیاز به z نداریم

    در مورد زمان چندین پارامتر هست. فقط کدها موثر نیستن. اما من فکر کنم بهتره ماهی گیری یادتون بدم
    کد زیر مدت زمان اجرای کد رو براتون مشخص میکنه. بعد میتونین خودتون تشخیص بدین کدوم کد زمان بیشتری میبره کدوم کمتر
    کد:
    Sub HideSheets()
    Dim sht As Worksheet
    Dim StartTime, SecondsElapsed As Double
    'Remember time when macro starts
    StartTime = Timer
    'Your codes
    For Each sht In ActiveWorkbook.Worksheets
        visibles = Array("Sheet1", "Sheet2")
        If UBound(Filter(visibles, sht.Name)) < 0 Then
            sht.Visible = xlSheetHidden
        Else
            sht.Visible = xlSheetVisible
        End If
    Next sht
    
    
    'Determine how many seconds code took to run
    SecondsElapsed = Round(Timer - StartTime, 2)
    
    
    'Notify user in seconds
    MsgBox "This code ran successfully in " & SecondsElapsed & " seconds", vbInformation
    End Sub

  13. سپاس ها (2)



اطلاعات موضوع

کاربرانی که در حال مشاهده این موضوع هستند

در حال حاضر 1 کاربر در حال مشاهده این موضوع است. (0 کاربران و 1 مهمان ها)

موضوعات مشابه

  1. [حل شده] دستور تايپ نام سطر يا ستون در دستورات اكسل
    توسط azno در انجمن توابع اکسل - Excel Functions
    پاسخ ها: 1
    آخرين نوشته: 2015/11/22, 15:27
  2. تنظیم کردن sheet برای کاغذ A5
    توسط ایلیا در انجمن سوالات اكسل - Excel Questions
    پاسخ ها: 6
    آخرين نوشته: 2014/10/08, 10:10
  3. اضافه کردن Sheet بر روی یک سری Sheet دیگر
    توسط musicbox1970 در انجمن سوالات پیرامون ويژوال بيسيك - VBA Questions
    پاسخ ها: 4
    آخرين نوشته: 2013/05/12, 22:17
  4. فوری عدم نمایش sheet ها
    توسط acc2013 در انجمن سوالات اكسل - Excel Questions
    پاسخ ها: 1
    آخرين نوشته: 2013/04/20, 16:39

بازدید کنندگان با جستجو های زیر این صفحه را پیدا کرده اند

مخفی‌و آشکار‌کردن شیت در‌اکسل با vb

مخفی کردن اکسل ویژوال بیسیک ماکرو

مخفی کردن ماکرو اکسل

دستور مخفی کردن شیت در vba

کلمات کلیدی این موضوع

علاقه مندی ها (Bookmarks)

مجوز های ارسال و ویرایش

  • شما نمیتوانید موضوع جدیدی ارسال کنید
  • شما امکان ارسال پاسخ را ندارید
  • شما نمیتوانید فایل پیوست کنید.
  • شما نمیتوانید پست های خود را ویرایش کنید
  •  
  • BB code ها فعال هستند
  • شکلک ها فعال هستند
  • کد [IMG] فعال است
  • کد [VIDEO] فعال است
  • کد HTML غیر فعال است