2013-12-06 10 views
0

Я пишу приложение, которое предназначено для защиты ячеек, связанных/ссылающихся в формуле. , например.Определить ячейки в формуле в Excel 2007

, если ячейка A1 содержит формулу, которая суммирует 2 клетки, как = B1 + C1,

Случай использования: когда пользователь случайно пытается изменить содержимое ячейки B1, C1, то приложение уведомляет пользователя, что такая операция не допускается, следовательно, сбрасывает содержимое.

Я могу сбросить содержимое отдельных ячеек, но моя задача - сначала найти ячейки, участвующие в формуле.

Есть ли выход, что, зная, есть ли в ячейке формула, я могу найти в ней ячейки? Любая помощь очень ценится.

Спасибо.

+2

Ключевые слова: 'HasFormula' и' Precedents' – sam092

+0

Все ли ячейки, участвующие в каждой формуле на одном листе? – pnuts

+0

Может быть, из других листов тоже. –

ответ

0

Запустите макрос ниже: новая книга. Он покажет вам прецеденты ячейки B1

B1 имеет формулу =SUM(A1,A3,A5,A7,A9,A10)

и MsgBox должен сказать вам, какие именно клетки используются в формуле.

Sub Main() 

    Range("A1").Resize(10, 1).Formula = "=Rand()" 

    Range("B1").Formula = "=SUM(A1,A3,A5,A7,A9,A10)" 


    Dim cell As Range 
    For Each cell In Range("B1") 
     If cell.HasFormula Then 
      MsgBox cell.Precedents.Address 
     End If 
    Next 

End Sub 
+0

Ну, я не пробовал это. Но мое любопытство заключается в том, что он также показывает ячейки между A1: A9 ??? –

+0

ну, вы должны попробовать :) это покажет вам только «A1, A3, A5, A7, A9, A10', но если бы формула была« SUM (A1: A10) », она бы показала вам« A1: A10 », поэтому на основе разделителя вы можете определить, какие ячейки используются. То есть. 'Для каждой ячейки в Range (Range (" B1 "). Precedents.Address) msgbox cell.address next' –

Смежные вопросы