یک تکنیک کاربردی جهت کار با لیست*ها

Collapse
X
 
  • زمان
  • نمایش
حذف همه
new posts
  • smartman

    • 2012/01/18
    • 170

    یک تکنیک کاربردی جهت کار با لیست*ها

    با سلام خدمت همه کاربران

    های لایت کردن سطر (ستون) جاری یک لیست در قالب یک تکنیک کاربردی در فایل ضمیمه، نشان داده شده است.

    Click image for larger version

Name:	2014-04-24 08-17-05 ق-ظ.png
Views:	1
Size:	27.5 کیلو بایت
ID:	142064

    Click image for larger version

Name:	2014-04-24 08-23-54 ق-ظ.png
Views:	1
Size:	25.0 کیلو بایت
ID:	142065


    کد PHP:
    Sub Auto_Open()
    On Error Resume Next

    Dim CheckRegistry 
    As String
    CheckRegistry 
    GetSetting(appname:="SigmaPlot"section:="Excel"_
            key
    :="Addin", Default:="0")
            
            
    If 
    Dir(ThisWorkbook.Path "\Sigmaplot.xla") = "" Then
        SPRemoveMenu
        ResetRegistry
    End 
    If

    End Sub
    Sub SPRemoveMenu
    ()
    On Error Resume Next

    Dim spButtonCheck 
    As CommandBarControl
    Dim spCommandbar 
    As CommandBarControl

    Set spCommandbar 
    CommandBars("Worksheet Menu Bar").Controls("Insert")
    Set spCommandbar CommandBars(1).Controls(4)       'add for foreign OS

    For Each spButtonCheck In spCommandbar.Controls
       If spButtonCheck.Caption = "SigmaPlot Graph" Then
            spButtonCheck.Delete
            Application.CommandBars("Standard").Controls(20).Delete
            Application.CommandBars(3).Controls(20).Delete     '
    add for foreign OS
            
    Exit Sub
        End 
    If
    Next

    End Sub
    Sub ResetRegistry
    ()

    Dim CheckRegistry As String

    ' Check the registry for an entry
    CheckRegistry = GetSetting(appname:="SigmaPlot", section:="Excel", _
                           key:="Addin", Default:="0")

    If CheckRegistry = 1 Then
        '
    Set the registry setting for sigmaplot addin
        SaveSetting appname
    :="SigmaPlot"section:="Excel"_
                key
    :="Addin"setting:=0
    End 
    If

    End Sub 
    Last edited by ~M*E*H*D*I~; 2014/04/24, 09:25.
  • m_d6712

    • 2010/05/22
    • 174

    #2
    Re: یک تکنیک کاربردی جهت کار با لیست*ها

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

    نوشته اصلی توسط m_d6712
    نوشته اصلی توسط x
    سلام آقای داوری.
    میشه درباره کد های زیر بیشتر توضیح بدین.هنوز عملکردشون واسم یکم گنگه...:

    کد PHP:
     with
    set
    is Nothing
    xlColorIndexAutomatic
    Intersect 
    .............با تشکر.............
    سلام دوست عزیز.


    1- with عملکرد ساده ای داره. فقط برای کوتاه کردن کد نویسی ازش استفاده می کنن.

    مثلا:
    به جای

    کد PHP:
      Range("B2:P16").Font.Bold False
        Range
    ("B2:P16").Interior.ColorIndex xlColorIndexAutomatic
     Range
    ("B2:P16").Font.color blue 
    برای اینکه از تکرار جلوگیری کنیم میشه بنویسیم:

    کد PHP:
     With Range("B2:P16")
    .
    Font.Bold False
    .Interior.ColorIndex xlColorIndexAutomatic
    .Font.color blue
    End With 

    2- set در زبان ویژوال بیسیک برای نسبت دادن یک شی به شی دیگر استفاده میشه:
    اولا باید فرق شی و متغیر رو بدونی.
    مثلا
    کد PHP:
     dim a as integer 
    خوب این یک متغیر است و به راحتی برای نسبت دادن از یک مساوی استفاده میشه کرد. مثلا
    کد PHP:
     atarget.row 
    اما range یک شی هست. همچنین workbook, worksheet, و row و column. اینها شی هستند که برخی باز شامل شی هایی هم میشوند. مثلا range ممکنه شامل چند row بشه و row ممکنه شامل چند cell بشه. در حالی که range خودش شی ای از شی های worksheet هایی هست که خود این worksheet ها فرزند یک workbook هستش.

    حالا این بحث خیلی مفصلی هست. اما به هر صورت برای نسبت دادن یک شی به یک شی جدید از عبارت set استفاده می کنیم.

    مثلا
    dim a as range خوب این یک شی از نوع range هست
    حالا می گیم
    کد PHP:
    range("A1:A10"
    غلطه
    باید بنویسی:
    کد PHP:
     set a range("A1:A10"
    اگر اینطور عمل کنی. a و
    کد HTML:
      range("A1:A10")
    معنی واحدی میدن.
    یعنی a.intorior.backcolor رنگ پشت زمینه اون منطقه A1 نا A10 رو معنی میده
    کد PHP:
     a.intorior.backcolorblack 

    با این شی ها کارای زیادی میشه کرد. یه مطالعه بکنشون.
    برای پیدا کردن شی مادر یا شی کافیه بنویسی:
    کد PHP:
    dim b as range
    set b 
    a.Parent 
    به این صورت.




    3- is nothing در زبان VB معنی NULL رو میده. یعنی یک شی ای هنوز به شی خاصی نسبت داده نشده است. ببین یک متغیر وقتی تعریف میشه مقدار دهی اولیه میشه. اگر هم نشه به هرحال یک مقدار داخل خودش داره. اما یک شی وقتی تعریف میشه NULL هست. یعنی به هیچ چیزی اشاره نمی کنه. مگر شما به یک شی نسبت بدهیش:

    مثلا:

    dim a as range
    تا الان a یک شی NULL هست.

    باید یکی از دو روش زیر رو انتخاب کنی. بگی a یک شی جدید است یا a یک شی ای هست که الان وجود داره.

    set a = new range به مفهوم اینه که a یک شی جدید است.
    کد HTML:
    set a = range("A1:A10")
    به مفهوم اینه که a همون شی ای است که الان وجود داره و به خونه های A1 تا A10 اشاره داره.


    پس وقتی میگیم if a is nothing then یعنی اگر هنوز a وجود نداره یعنی هیچ جایی واسه a تعریف نشده. این کارو بکن.

    4- xlColorIndexAutomatic نماینده کد رنگ اتوماتیک هست. اینو بجای یک عدد که نمایند رنگ هست میتونی استفاده کنی. البته اگر حافظت خوبه می تونی عدد رو هم حفظ کنی :دی

    5- Intersect دو تا range مختلف رو به عنوان ورودی می گیره و فضای مشترک بین این دو رو برای ما مشخص می کنه. می تونی از این کد برای اینکه بدونی دو range با هم نقطه مشترک دارن یا نه استفاده کنی.



    موفق و موید باشی.
    [hr]





    و اما در مورد خود تاپیک



    نوشته اصلی توسط smartman
    با سلام خدمت همه کاربران

    های لایت کردن سطر (ستون) جاری یک لیست در قالب یک تکنیک کاربردی در فایل ضمیمه، نشان داده شده است.

    تکنیک کاربردی1066
    سلام.
    من فایل شمارو دیدم. خیلی خوب بود و زیبا.

    فقط چند نکته که فکر کردم به بهبود فایل شما کمک می کنه.

    همه چیز خوب بنظر میرسه غیر از کند بودن فایل شما.
    ابتدا به نظرم کند رسید. خوب تصمیم گرفتم عوض 550 سطر از عدد 30000 استفاده کنم.
    چه اتفاقی می افتد؟
    فایل بسیار کند میشود.

    1- در ابتدا شما از تابع intersect استفاده کردید که اصلا نیازی نیست. در واقع intersect برای بدست آوردن range ای است که بین دو range ورودی مشترک است. اما هدف شما این نیست. من فکر میکنم که هدفتون این بوده که متوجه بشوید که آیا target درون range مورد نظر هست یا نه؟
    خوب این کار رو با استفاده از target.row و target.column و row و column های اون range تون با 4 عملیات میشه محاسبه کرد. نیازه نیست اگر 30000 هزار ردیف داریم نقاط مشترک همه 30000 تارو بدست بیاوریم که خودش یک فرآیند زمان براست.

    کد PHP:
     2-  Range("A2:H550").Font.Bold False
        Range
    ("A2:H550").Interior.ColorIndex xlColorIndexAutomatic 
    این دو عبارت باز خیلی زیاد محاسبات لازم داره. کافیه سطر و سلولی که تغییر میدهید رو با 2 عدد همیشه در نظر بگیرید. مثلا شماره سطر و ستون مورد نظر رو در خانه هایXY و XX ذخیره کنید. در مرحله بعد فقط نیاز است اون سطر و خونه مورد نظر رو به حالت اول برگردونید.


    این دو نکته را در فایل پیاده سازی کنید. متوجه بهبود خواهید شد.

    موفق باشید.
    Last edited by ~M*E*H*D*I~; 2014/04/24, 09:19.
    -------
    [url=http://md6712.com]http://md6712.com[/url]
    جامعه ایده پردازان: http://idekadeh.com

    کامنت

    • smartman

      • 2012/01/18
      • 170

      #3
      RE: یک تکنیک کاربردی جهت کار با لیست‌ها

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

      یاد یک ضرب المثل افتادم که میگه «املای نانوشته، غلط نداره» خلاصه اینکه با توجه به راهنمایی های شما نتیجتا فایل نهایی به این شکل دراومد.

      در ضمن هر دو فایل با کاربرگهای LTR عملکرد به مراتب بهتری دارند که دلیلشو نمیدونم.

      کامنت

      • Javid Mokhtari
        مدير تالار ويژوال بيسيك

        • 2012/01/16
        • 1212
        • 73.00

        #4
        Re: یک تکنیک کاربردی جهت کار با لیست*ها

        با سلام و تشکر از دوست خوبمون.
        البته هنوز اشکالات ریز و درشتی هم داره که این هم طبیعی هستش.
        یکی از ایرادهاش اینه که وقتی فایل باز میشه ،اگه سطری به غیر از سطری که در هنگام باز شدن فایل فعال است رو انتخاب کنی،سطر قبلی در حالت انتخاب میمونه.
        که با یک کد ساده در رویدادهای مختلف میشه حلش کرد.مثل:
        کد PHP:
        Private Sub Workbook_Open()
        Range("a2:h3000").Interior.ColorIndex xlColorIndexNone
        End Sub 
        Last edited by ~M*E*H*D*I~; 2014/04/24, 09:21.
        [FONT=Tahoma][INDENT][CENTER][SIZE=3][FONT=courier new][B][FONT=comic sans ms][SIZE=3][FONT=arial]دوره های آموزش رایگان اکسل از صفر تا پیشرفته بصورت تصویری
        بیش از [COLOR=#008000]60[/COLOR] جلسه آموزش ویدئویی رایگان

        شرکت در دوره:
        [/FONT][/SIZE]
        [SIZE=5] [FONT=Tahoma][FONT=courier new][B][URL]https://javidsoft.ir/courses/[/URL][/B][/FONT][/FONT][/SIZE][/FONT]
        [/B][/FONT][/SIZE]
        [/CENTER]
        [/INDENT]
        [/FONT]

        کامنت

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

          #5
          RE: یک تکنیک کاربردی جهت کار با لیست‌ها

          سلام
          راستش من توضیحات دوستان رو نخوندم و فقط فایل رو دیدم دستمون 2 تا شیت داشت یکی فقط سطر رو هایلایت میکرد یکیم که مثل جدول ضرب بود سطر و ستون رو هایلایت میکرد راستش من این کد رو برداشتم یکم ذسکاری کردم واسه هایلایت کردن ردیف اینطوری اصلا نیاز به انتخاب range نیست سرعتشم بالاست حالا نمیدونم دوستمون چرا به اون صورت عمل کرده به هر حال این هم روشیه
          فایل های پیوست شده
          [CENTER]
          [SIGPIC][/SIGPIC]
          [/CENTER]

          کامنت

          • Ali Parsaei
            مدير تالارتوابع اکسل

            • 2013/11/18
            • 1522
            • 71.67

            #6
            داشتم در اينترنت دنبال مطلبي راجع به SelectionChange مي گشتم، به کدي برخوردم جهت BOLD کردن متن سطر فعال، ديدم جالب است گفتم در سايت بهش اشاره کنم، قبلش گفتم بگردم ببينم قبلا" در سايت چيزي راجع به آن آمده يا نه که به اين موضوع برخوردم، واقعا" دوستان قديمي سايت زحمت کشيده اند. حيف است که اين مطالب با کهنه شدن وسط مطالب ديگر گم مي شود، کاش مي شد کاري کرد که به صورتي هميشه در صدر باشند، البته ظاهرا" سايت اين امکان را داراست ولي ما کمتر از آن استفاده مي کنيم. اين مطلب را نوشتم تا شايد به بهانه نوشته من دوباره اين مطلب در صدر قرار گرفته و مورد توجه قرار گيرد.
            اين هم کدي که گفتم (بد نيست پايان اين موضوع اضافه شود):
            کد PHP:
            Dim x As Long
            Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range)
                
            ActiveCell.EntireRow.Font.Bold True
                
            If = Empty Then
                    x 
            ActiveCell.Row
                
            ElseIf Not x ActiveCell.Row Then
                   Rows
            (x).EntireRow.Font.Bold False
                End 
            If
                
            ActiveCell.Row
            End Sub 
            منبع: http://support.microsoft.com/kb/213193
            [SIGPIC][/SIGPIC]

            کامنت

            • علی فاطمی

              • 2014/02/17
              • 523
              • 51.00

              #7
              نوشته اصلی توسط ~M*E*H*D*I~
              سلام
              راستش من توضیحات دوستان رو نخوندم و فقط فایل رو دیدم دستمون 2 تا شیت داشت یکی فقط سطر رو هایلایت میکرد یکیم که مثل جدول ضرب بود سطر و ستون رو هایلایت میکرد راستش من این کد رو برداشتم یکم ذسکاری کردم واسه هایلایت کردن ردیف اینطوری اصلا نیاز به انتخاب range نیست سرعتشم بالاست حالا نمیدونم دوستمون چرا به اون صورت عمل کرده به هر حال این هم روشیه
              با سلام این فایل فکر کنم بدلیل قدیمی بودن قابل رویت نیست لطفا اگر در آرشیو موجوده مجددا قرار بدین تا استفاده کنیم
              ممنون
              [FONT=tahoma][SIZE=2][B][COLOR=#800080][SIZE=3]در دنیا فقط یک نفر وجود دارد که باید از او بهتر باشید و آن کسی نیست جز گذشته خودتان[/SIZE] [/COLOR][/B][/SIZE][/FONT]


              [CENTER][SIZE=7][FONT=franklin gothic medium][/FONT] [/SIZE]
              [/CENTER]

              کامنت

              • mokaram
                مدير تالار اکسل و بانک اطلاعاتی

                • 2011/02/06
                • 1805
                • 74.00

                #8
                نوشته اصلی توسط علی فاطمی
                با سلام این فایل فکر کنم بدلیل قدیمی بودن قابل رویت نیست لطفا اگر در آرشیو موجوده مجددا قرار بدین تا استفاده کنیم
                ممنون
                تو آرشیوم اینا پیدا کردم خدمت شما
                فایل های پیوست شده
                [CENTER][IMG]http://forum.exceliran.com/signaturepics/sigpic909_10.gif[/IMG]
                [/CENTER]

                کامنت

                چند لحظه..