2015-11-23 1 views
2

Я написал нижеприведенную функцию, но получаю сообщение об ошибке, которое невозможно скомпилировать из-за несоответствия времени на строке If intersect .... Отладка показывает значение выбранной ячейки, когда я парить над «Target», а не в диапазоне (я не знаю, если это свидетельствует о проблеме)Проблемы с получением excel для запуска кода vba при выборе ячейки

Private Sub Worksheet_SelectionChange(ByVal Target As Range) 
Dim lastEntry As Integer 
Dim shiftEntries As Range 

lastEntry = LastEntryRow() 
Set shiftEntries = Range("A11:L" & lastEntry) 

If Intersect(Target, shiftEntries) Then 
    Dim shiftDate As String 
    shiftDate = Cells(Target.Row, 1).Value 
    Cells(10, 15) = ShiftsInSevenDays(shiftDate) 
End If 
End Sub 

Любая помощь очень ценится.

+0

Отображение значения является нормальным поведением для переменной диапазона во время отладки, поскольку это свойство по умолчанию. Вы можете увидеть это, когда вы ссылаетесь на «Target.address». – nbayly

+0

Возможно, это не «несоответствие времени», а скорее «несоответствие типа»? В соответствии с моим ответом ниже 'Intersect' возвращает диапазон, не являющийся логическим. Приветствия. – nbayly

ответ

1

Пожалуйста, попробуйте следующий ammended код:

Private Sub Worksheet_SelectionChange(ByVal Target As Range) 
Dim lastEntry As Integer 
Dim shiftEntries As Range 

lastEntry = LastEntryRow() 
Set shiftEntries = Range("A11:L" & lastEntry) 

If Not Intersect(Target, shiftEntries) Is Empty Then 
    Dim shiftDate As String 
    shiftDate = Cells(Target.Row, 1).Value 
    Cells(10, 15) = ShiftsInSevenDays(shiftDate) 
End If 
End Sub 

Intersect возвращает диапазон не является логическим значением (истина или ложь). Я не уверен, что вы должны использовать Is Empty или Is Nothing, но это один из двух. С уважением,

+0

Спасибо nbayly. В качестве последующего вопроса, если выбраны ячейки в нескольких строках, что является лучшим способом распознать это и получить каждую выбранную строку, которая пересекается с shiftEntries отдельно? – RatuNiko

+0

Вы можете проверить, сколько строк выбрано из свойства: 'Selection.Rows.Count'. Затем вы можете прокрутить коллекцию 'Selection.Rows', чтобы проверить пересечение каждой строки. ура – nbayly