2016-05-13 6 views
-4

Я хотел бы создать функцию Excel в VBA, которая проверяет наличие циклической ссылки в определенной ячейке. Я хочу, чтобы функция возвращала логический «ИСТИНА», если в противном случае есть круговая ссылка и «ЛОЖЬ». Вот моя неудачная попытка:Как бороться с циркулярными ссылками в VBA?

Function CIRC_REF(BadCell As Range) As Boolean 
    If BadCell.CircularReference = True Then 
     CIRC_REF = True 
    Else 
     CIRC_REF = False 
    End If 
End Function 

К сожалению, это возвращает # ВАЛЮТ! ошибка в оценивающей ячейке. Я проверил его на листе, который A1 = 1, A2 = 2, A3 = A1 + A2 + A3. Затем я устанавливаю B3 = CIRC_REF (A3).

+3

Просьба не ссылаться на что-то или публиковать его, если вы не удосужились его прочитать. – findwindow

+0

Голосование закрывается как «слишком широкое», потому что оно по существу просит сообщество SO выполнить всю работу. См. Страницу [ask] справочного центра для получения справки о том, чтобы задать хороший вопрос по теме. Кроме того, подано заявление на вопиющее отсутствие усилий и общий неясный вопрос. –

ответ

0

Лучшим решением этого вопроса может быть не вызов функции, а вызов макроса с помощью подпрограммы. Если вы сделаете выбор ячеек с формулами в нем, то, если какая-либо ячейка имеет циклическую ссылку, процедура возвращает Boolean True в ячейку с одной ячейкой столбца справа от ячейки виновника. Вам нужно будет изменить код, чтобы изменить это поведение. Например, небольшое изменение позволит вам записать адреса адресов ячеек, которые содержат круговую ссылку на новом листе. Вот код:

Sub mcrCircularReference() 
    Dim Cell As Range 
    Dim CircRefCell As Range 

    For Each Cell In Selection 
     Set CircRefCell = Worksheets("Sheet1").CircularReference 
     CircRefCell.Offset(0, 1).Value = True 
    Next Cell 
End Sub