راه کار هایی جهت افزایش سرعت برنامه ها

Collapse
این تاپیک یک تاپیک مهم است.
X
X
 
  • زمان
  • نمایش
حذف همه
new posts
  • ~M*E*H*D*I~
    • 2011/10/19
    • 4377
    • 70.00

    راه کار هایی جهت افزایش سرعت برنامه ها

    با سلام
    در اینجا قصد دارم راهکار هایی برای افزایش قابلیت و سرعت برنامه هایی که با VBA نوشته میشه ارائه بدم بعضی از این راه کار ها به صورت تجربی بدست آوردم بعضی هم از جاهای مختلف جمع اوری کردم سایر دوستان هم تو تکمیل این بحث کمک کنن چون به نظرم مبحث مهمیه

    برای افزایش سرعت برنامه هایی که از طریق VBA نوشته می شن روش هایی متفاوتی وجود داره مهمترین روش تکنیکی هست تو برنامه نویسی یک برنامه نویس استفاده میکنه که لازمه اون تجربه است اما خود اکسل و VBA امکاناتی برای افزایش سرعت در اختیار ما قرار میده.

    1-غیر فعال کردن برخی از خصوصیت ها حین اجرای ماکرو برای این کار کد های زیر را به ابتدا و انتهای برنامه بیافزایید.
    [align=left]
    کد PHP:
    Sub macro()
    Application.ScreenUpdating false
    Application
    .DisplayAlerts false
    Application
    .Calculation xlManual
    ……
    ..
    Application.ScreenUpdating true
    Application
    .DisplayAlerts true
    Application
    .Calculation xlAutomatic
    end sub 
    [/align]
    از کد های زیر نیز میتوان استفاده کرد:
    [align=left]
    کد PHP:
    Application.StatusBar false
    Application
    .PrintCommunication False 
    [/align]
    2-تا حد امکان از انتخاب کردن سل ها و محدوده ها خودداری کنید،بجای انتخاب کردن کپی کردن و paste کردن از تساوی استفاده کنید.
    [align=left]
    کد PHP:
    Range("A1").value 10 
    [/align]
    کد فوق از کد زیر سریعتر است.
    [align=left]
    کد PHP:
    Range("A1").select
    Selection
    .Value 10 
    [/align]
    3- تا حدی که می توانید از توابع و متد های زبان برنامه نویسی استفاده کنید و از کد نویسی برای نیاز های خود پرهیز کنید مثلا استفاده از کد زیر
    [align=left]
    کد PHP:
    A=Application.WorksheetFunction.Sum(Range("a1""a10"))
    بجای
    A
    =0
    For i=1 to 10
    A
    =cells(I,1)
    Next  i 
    [/align]
    - از ایجاد حلقه ها بخصوص حلقه های تودر تو اجتناب کنید ، برای حل یک مسئله ابتدا روش ها مختلف را بررسی کنید به عنوان مثلا برای جستجوی یک مقدار از توابع search,find,index,match,lookup,… استفاده کنید .
    5- اگر میخواهید عملیاتی بر روی یک محدوده اعمال کنید محدوده را نامگذاری کنید برای توسعه محدوده از فرمول offset استفاده کنید بجای اینکه محدوده بزرگی انتخاب کنید تا نیاز اینده را برطرف کند بلکه محدوده را به تدریج توسعه دهید.
    6-زمانی که میخواهید عملیات متفاوتی بر روی یک ابجکت اعمال کنید از with block استفاده کنید این کار علاوه بر نظم ظاهری در عمکرد کد هم موثر است.
    7-زمانی که میخواهید نیاز خود را از طریق کد نویسی در اکسل مرتفع کنید به جوانب مسئله خود فکر کنید و ان را به دو بخش تقسیم کنید 1- بخشی که لزوما باید کد نویسی کنید و 2-بخشی که از طریق ابزار های اکسل اعم از فرمول ها ، conditional formattingو addins های اکسل و... میتوان حل کرد بنا براین لزومی ندارد کل مسئله به صورت کد پیاده شود تلفیق کلیه امکانات در دسترس نتیجه بهتری میدهد
    8-در نوشتن فرمول ها از قواعد نامگذاری استفاده کنید و محدوده ها را با offset توسعه دهید
    9-قبل از شروع بکار ابتدا جستجویی در اینترنت داشته باشید معمولا کدهای آماده با عملکرد بالا را میتوانید بیابید این امر بر مهارت شما نیز خواهد افزود به شرط اینکه کد ها را بخوبی تحلیل کنید.
    10-برنامه خود را قبل از شروع به کد نویسی روی کاغذ پیاده کنید و طرح اولیه انرا ایجاد کنید سپس به قسمت های کوچک تقسیم کنید سعی نکنید یک پروسه را با یک کد طولانی انجام دهید بلکه برنامه را به توابع و رویه های کوچک تقسیم کنید.
    11- از کنترل خطاها یا error handing تا حد امکان استفاده نکنید مگر اینکه طیف وسیعی از افراد کاربر برنامه شما باشند در صورتی که خود شما کاربر برنامه هستید از حداقل کنترل خطا استفاده کنید البته میزان دقت خود شما در این روش مؤثر است.
    12-با استفاده از ctrl+end آخرین سل استفاده شده را یافته و در صورتی که نیاز ندارید انها را حذف کنید
    13-در صورتی که قصد ایجاد جدول و یا دیتابیس در اکسل دارید از table استفاده کنید.
    14-اطلاعات موجود را قبل از استفاده sort کنید.
    15- در هر خط برنامه میتوان از خلاقیت برای افزایش کارایی استفاده کرد به عنوان مثال نتیجه دو کد زیر یکسان است اما قابلیت کد دوم به مراتب بیشتر است.
    [align=left]
    کد PHP:
    1-
    If 
    x>1 then
    A
    =true
    Else
    A=false
    End 
    if
    2-
    A=x>
    [/align]
    -برای کاهش حجم میتوانید از فرمت xlsb بجای xlsmیا xlsx استفاده کنید در این حالت برنامه شما کم حجم تر خواهد بود.
    17-از عوامل مهم کاهش سرعت استفاده از منابع و لینک های خارجی است لذا از ایجاد لینک های غیر ضروری باید پرهیز شود.
    18-اگر فایل هایی با فرمت 2003 دارید و در حال حاضر از ورژن های 2007 به بالا استفاده می کنید آنها را به فرمت های جدید convert نمایید.
    19-استفاده از pivot table بر کارایی و سرعت برنامه شما نسبت به سایر روش ها خواهد افزود.
    Last edited by ~M*E*H*D*I~; 2018/11/02, 19:57.

    sigpic
  • khakzad

    • 2010/03/17
    • 2034
    • 85.00

    #2
    RE: راه کار هایی جهت افزایش سرعت برنامه ها

    سلام
    خیلی خیلی ممنوننننن
    من این پست و ندیده بودم.
    جالب بود
    مرسی[hr]
    شماره 11 رو ی توضیح میدین که منظور چی هس؟
    و اینکه شماره 6 همون with معمولی هست؟یعنی بجای block اسم ابجکتمون و باید ینویسیم؟[hr]
    و اون اول، displayalert که false میکنیم، دقیقا چیا رو نشونمون نمیده؟؟؟؟؟[hr]
    اینم لطفا ی توضیح بدین:blush: مرسی
    کد:
    Application.StatusBar = LoopNum
    Application.PrintCommunication = False

    کامنت

    • ~M*E*H*D*I~
      • 2011/10/19
      • 4377
      • 70.00

      #3
      RE: راه کار هایی جهت افزایش سرعت برنامه ها

      کنترل خطا یعنی مثلا یک تکت باکس دادرید یه شرط میذارن که اگه خالی بود پیغام خطا بده ، کد اول بخشی از یک کد کلی بوده که فک میکنم تو نوشتنش اشتباه کرده باشم چون باید مقدار اون هم false باشه که تصحیحش کردم، و کد دوم ارتباط بین pagesetup و پرینتر رو به صورت موقت قطع میکنه فقط باید ارزش اون رو در انتهای کد true کنیم

      sigpic

      کامنت

      • khakzad

        • 2010/03/17
        • 2034
        • 85.00

        #4
        RE: راه کار هایی جهت افزایش سرعت برنامه ها

        ممنونم.شماره 6 و displayalert مال چی بود؟

        کامنت

        • daghyad

          • 2012/03/30
          • 117

          #5
          RE: راه کار هایی جهت افزایش سرعت برنامه ها

          فرض کنید می خواهید یک سطر یا یک شیت را حذف کنید اکسل جهت اطمینان از شما می پرسه مطمئن هستید که میخواهید حذف کنید
          Application.DisplayAlerts = false
          باعث میشه که اکسل این سوال را از شما نپرسه

          کامنت

          • saber2q

            • 2012/04/13
            • 90

            #6
            RE: راه کار هایی جهت افزایش سرعت برنامه ها

            برای دسترسی به اولین سطر خالی در یک شیت از چه کدی میشه استفاده کرد؟ فرض کنید میخویم به یک سلول (که در اولین سطر خالی قرار داره) مقدار بدیم ولی از دستور each استفاده نکنیم.

            کامنت

            • حسینعلی

              • 2014/01/27
              • 172

              #7
              واقعا عالیه
              تشکرازاستادبزرگ

              کامنت

              • امين اسماعيلي
                مدير تالار ويژوال بيسيك

                • 2013/01/17
                • 1198
                • 84.00

                #8
                با درود
                در مورد اولین سطر خالی شیت واسه مقدار دهی به ترفند ها هزار و یک شب شب 62 مراجه کنید در اونجا شما اخرین ردیف رو میتونی پیدا کنی کافی به اون متغیییر یه یک اظافه کنی درست میشه - در ضمن مثال ها در کد نویسی های متنوعی تو سایت برای این مورد هست . بیشتر دقت کنید
                در پناه خداوندگار ایران زمین باشید و پیروز

                کامنت

                چند لحظه..