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

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

    • 2012/07/04
    • 42

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

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


    وقتی برنامه به این خط می رسد
    کد:
        Range("Data").ClearContents
       Sheet1.ListObjects("Data").DataBodyRange.Delete
    وارد برنامه زیر در شیت یک می شود و روی عبارت آخرین شرط گیر می کند.
    کد:
    Private Sub Worksheet_Change(ByVal Target As Range)
            If Target.Address = Range("B3").Address Then
                If Range("B3") = "" Then
                    Exit Sub
                End If
                ActiveSheet.ListObjects("Data").Range.AutoFilter Field:=1, Criteria1:=Range("B3")
                Range("C3").Select
            ElseIf Target.Address = Range("C3").Address Then
                If Range("C3") = "" Then
                    Exit Sub
                End If
                ActiveSheet.ListObjects("Data").Range.AutoFilter Field:=2, Criteria1:=Range("C3")
                Range("B3").Select
            ElseIf Target.Address = Range("D3").Address Then
                If Range("D3") = "" Then
                    Exit Sub
                End If
                ActiveSheet.ListObjects("Data").Range.AutoFilter Field:=3, Criteria1:=Range("D3")
                Range("D3").Select
            ElseIf Target.Column = Range("Data[ßÏ ßÇáÇ]").Column Then
                If Selection.Count > 1 Then
                    If WorksheetFunction.CountIf(Sheet2.Range("List[ßÏ ßÇáÇ]"), ActiveCell) = 0 And ActiveCell <> "" Then
                        Target.ClearContents
                        MsgBox "Çíä ÔãÇÑå ËÈÊ äÔÏå ÇÓÊ"
                    End If
                ElseIf Selection.Count = 1 Then
                    If WorksheetFunction.CountIf(Sheet2.Range("List[ßÏ ßÇáÇ]"), Target) = 0 And Target <> "" Then
                        Target.ClearContents
                        MsgBox "Çíä ÔãÇÑå ËÈÊ äÔÏå ÇÓÊ"
                    End If
                End If
            End If
    End Sub
  • eppagh

    • 2012/07/04
    • 42

    #2
    کسی نمی دونه؟

    کامنت

    • Amir Ghasemiyan

      • 2013/09/20
      • 4598
      • 100.00

      #3
      سلام دوست عزيز
      شما تو قطعه كد اولي كه گذاشتين اين عبارت رو دارين:
      کد:
      Range("Data").ClearContents
      خب اين يعني تغيير در ورك شيت. پس طبيعي هست كه وارد كد دوم بشه

      شما بايد داخل كد دوم يه شرط بذارين كه مثلا اگه رنج data خالي بود اون عمليات انجام نشه يا يه چيزي شبيه اين

      کامنت

      چند لحظه..