2016-04-06 3 views
0

Я все еще довольно новичок в этом и пытался найти ответ. Возможно, это не определено правильно или вообще. Возможно, это не указывает на правильный рабочий лист. Я не совсем уверен ... Любая помощь будет принята с благодарностью! Благодаря!Ошибка времени выполнения '1004': метод 'Пересечение' объекта '_Global' не удался

Получение ошибки на этой линии:

Set Inte = Intersect(A, Target)

Код ошибки:

Run-time error '1004': Method 'Intersect' of object'_Global' failed

Полный код:

Private Sub Worksheet_Change(ByVal Target As Range) 
 
'Determine Target Colunm 
 
If Target.Column = 10 Then 
 
'Check for "TD", Copy/Delete Row if found 
 
    If Target = "TD" Then 
 
    Application.EnableEvents = False 
 
     nxtRow = Sheets("TD Locks").Range("J" & Rows.Count).End(xlUp).Row + 1 
 
     Target.EntireRow.Copy _ 
 
     Destination:=Sheets("TD Locks").Range("A" & nxtRow) 
 
     Target.EntireRow.Delete 
 
     Application.EnableEvents = True 
 
     Exit Sub 
 
    End If 
 

 
'Check for "Closed", Copy/Delete Row if found 
 
    If Target = "Closed" Then 
 
    Application.EnableEvents = False 
 
     nxtRow = Sheets("Closed Locks").Range("J" & Rows.Count).End(xlUp).Row + 1 
 
     Target.EntireRow.Copy _ 
 
     Destination:=Sheets("Closed Locks").Range("A" & nxtRow) 
 
     Target.EntireRow.Delete 
 
     Application.EnableEvents = True 
 
    End If 
 
End If 
 

 
'Adds date when borrower name is entered 
 
    Dim A As Range, B As Range, Inte As Range, r As Range 
 
    Set A = Range("C:C") 
 
    Set Inte = Intersect(A, Target) 
 
    If Inte Is Nothing Then Exit Sub 
 
    Application.EnableEvents = False 
 
     For Each r In Inte 
 
      If r.Offset(0, 8).Value = "" Then 
 
       r.Offset(0, 8).Value = Date 
 
      End If 
 
     Next r 
 
    Application.EnableEvents = True 
 
End Sub

+0

Попробуйте использовать 'Application.Intersect' – PeterT

ответ

2

есть «дьявол сенсорный» в вашем коде, так как, если пользователь «Закрыто» в колонке «J» из лист в модуле, вы размещение этого обработчика событий, он удаляет target строку (Target.EntireRow.Delete), таким образом, оставляя target без ссылок и подготовить почву для метания ошибки в любом последующем использовании target, который бывает в Set Inte = Intersect(A, Target)

Но если я правильно прочитал ваш код, это не должно произойти даже после того, как эта последняя строка будет завершена, только нужно указать поперечный столбец «C», чего не может быть, если он находится в столбце «J» !.

Если то, что выше корректна вы можете использовать код, подобный следующему

Option Explicit 

Private Sub Worksheet_Change(ByVal Target As Range) 
Dim nxtRow As Long 
Dim Inte As Range, r As Range 

Application.EnableEvents = False 

With Target 
    'Determine Target Colunm 
    If .Column = 10 Then 

     'Check for "Closed", Copy/Delete Row if found 
     If .Value = "Closed" Then 
      nxtRow = Sheets("Closed Locks").Range("J" & Rows.Count).End(xlUp).Row + 1 
      .EntireRow.Copy _ 
      Destination:=Sheets("Closed Locks").Range("A" & nxtRow) 
      .EntireRow.Delete 

     ElseIf Target = "TD" Then 
      'Check for "TD", Copy/Delete Row if found 
      nxtRow = Sheets("TD Locks").Range("J" & Rows.Count).End(xlUp).Row + 1 
      .EntireRow.Copy _ 
      Destination:=Sheets("TD Locks").Range("A" & nxtRow) 
      .EntireRow.Delete 
     End If 

    Else 

     'Adds date when borrower name is entered 
     Set Inte = Intersect(.Cells, .Parent.Range("C:C")) 
     If Not Inte Is Nothing Then 
      For Each r In Inte 
       If r.Offset(0, 8).Value = "" Then r.Offset(0, 8).Value = Date 
      Next r 
     End If 

    End If 
End With 

Application.EnableEvents = True 

End Sub 
0

ли работа, если изменить проблемную линию с этим:

if not intersect(A, Target) is nothing then Set Inte = Intersect(A, Target) 
Смежные вопросы