نوشتن دستور در SheetChange

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

    • 2010/07/18
    • 118

    نوشتن دستور در SheetChange

    با سلام
    یه جدولی دارم که یکی از ستون هاش تاریخ و یکی دیگه ش مبلغ هست (البته چند ستون دیگه هم داره که کاریش ندارم)
    من میخوام توی ستون بعد از مبلغ یه ستون دیگه به نام جمع مبالغ روزانه رو داشته باشم
    فرض کنید این جدول هست:
    1394/04/01 500.000
    1394/04/01 250.000
    1394/04/01 750.000 1.500.000
    1394/04/02 420.000 420.000
    1394/04/03 100.000
    1394/04/03 220.000 320.000

    اون ستون سوم رو هر جوی توی خود اکسل فکر کردم نتونستم پیاده سازی کنم برا همین رفتم سراغ VBA(ستون اول و دوم ر وارد میکنم میخوام ستون سوم رو محاسبه کنه)
    کد زیر رو نوشتم و توی SheetChange قرار دادم ولی مشکل داره:
    کد PHP:
    Private Sub Workbook_SheetChange(ByVal Sh As ObjectByVal Target As Range)

        
    Dim i As Integer
        Dim j 
    As Integer
        Dim m 
    As Integer
        Dim n 
    As Integer
        Dim RowNumber 
    As Integer
        
        
    'RowNumber = ActiveSheet.Range("A65536").End(xlUp).Row
          
            '
    For 2 To RowNumber
            
    For 2 To 50
            j 
    1
            
    If Cells(i2).Value <> Cells(j2).Value Then
            m 
    i
            n 
    1
            
    Do While Cells(m2).Value Cells(n2).Value
            Cells
    (i9).Value Cells(i9).Value Cells(m8).Value
            m 
    1
            n 
    1
            Loop
            End 
    If
            
    Next i

    End Sub 
    اول اینکه نمیدونم چرا موقع اجرا به خط RowNumber = ActiveSheet.Range("A65536").End(xlUp).Row ایراد میگرفت! دلیلش چی هست؟ همین کد رو توی فایل دیگه امتحان کردم مشکلی نداشتم ایا با بقیه قسمت ها همخونی نداره؟
    خلاصه دیدم گیر میده غیر فعالش کردم دستور for رو هم به جای i = 2 To RowNumber موقتا i = 2 To 50 گذاشتم کد اجرا بشه ببینم چی میشه
    اما بعد از اجرای این کد میافته توی بی نهایت و دائم داره حساب میکنه
    مشکل چی هست؟ چطور میشه حلش کرد؟
    من خودم فکر میکنم چون خود ستون سوم دچار تغییر میشه دوباره حساب میکنه و برا همین هیچ وقت تموم نمیشه وتنها چیزی که به ذهنم رسیده بود این که رنج تغییرات رو محدود کنم مثلا بگم اگه تغییرا توی فلان رنج بود کد اجرا بشه اما این رو بلد نیستم پیاده سازی کنم
    ضمنا فکر کنم کد یه مشکل دیگه هم داره و باید قبل از حلقه Do While باید Cells(i, 9).Value خالی باشه اما اینجوری نوشتم کار نکرد:
    Cells(i, 9).Value =""
    ممنون میشم راهنمایی کنید
    با تشکر
  • master

    • 2010/07/18
    • 118

    #2
    سلام
    فایل رو پیوست کردم خودم هر کاری کردم درست نشد
    ممنون میشم ببینید مشکل از چی هست
    با تشکر
    فایل های پیوست شده

    کامنت

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

      • 2013/11/18
      • 1522
      • 71.67

      #3
      سلام،
      کد احتياج ندارد، تو خانه i2 اين فرمول را نوشته و به پايين درگ کنيد: (البته بايد حتما" تاريخها در جدولتان از کوچک به بزرگ سورت شده باشد)

      کد PHP:
      =if(b3=b2;0;sumif($b$2:b2;b2;h2:$h$2)) 
      [SIGPIC][/SIGPIC]

      کامنت

      • master

        • 2010/07/18
        • 118

        #4
        ممنون
        خیلی عالی جواب داد فقط من به جای 0 از "" استفاده کردم تا خونه ها بدون عدد خالی باشن
        حالا جدایی از این فرمول میشه بفرمایید مشکل کدی که خودم نوشتم چیه؟
        با تشکر

        کامنت

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

          • 2013/11/18
          • 1522
          • 71.67

          #5
          خيلي از متغيير ها را اضافه وارد کرده ايد، ولي اشکال اصلي فکر کنم مربوط به حلقه اي است که loop مي شود، البته خيلي وقت نکردم بررسي کنم، باز اگر فرصت کردم دقيقتر نگاه مي کنم، ضمن اينکه کد درج شده در فايل با کدي که تو سايت گذاشته ايد فرق مي کند،
          خلاصه فعلا" بر پايه خود کد شما يک کد نوشته ام شايد به درد بخورد:

          کد PHP:
          Private Sub Worksheet_SelectionChange(ByVal Target As Range)
              
          Dim i As Integer
              Dim RowNumber 
          As Integer
            
              RowNumber 
          ActiveSheet.Range("A65536").End(xlUp).Row
                   
                  
          If Target.Column 9 Then
                     
          For 2 To RowNumber
                        
          If Cells(i2).Value Cells(12).Value Then
                           Cells
          (i9).Value Null
                           
          Else
                           
          Cells(i9).Value Application.WorksheetFunction.SumIf(Range(Cells(22), Cells(i2)), Cells(i2), Range(Cells(28), Cells(i8)))
                        
          End If
                     
          Next
                  End 
          If
          End Sub 
          [SIGPIC][/SIGPIC]

          کامنت

          • master

            • 2010/07/18
            • 118

            #6
            سلام
            کد توی فایل رو نسبت به کدی که اینجا گذاشتم تغییر دادم بلکه درست بشه که نشد
            در مورد متغییر هم چون زیاد وارد نیستم مثلا اونجاهایی که i+1 هست رو قبلش یه متغییر جدید تعریف میکردم
            در هر صورت بابت کد هم ممنون خیلی عالی بود
            با تشکر

            کامنت

            چند لحظه..