2015-08-24 3 views
0

Я пытаюсь создать макрос, который отслеживает прецеденты косвенной формулы. Косвенная формула, которая выглядит как косвенная (имя листа, столбец, строка, ИСТИНА). Я попробовал следующий код. Однако он не работает, и я не знаю, почему. Поэтому, если кто-то может мне помочь, это будет здорово. Thanx заранее!Чтобы создать макрос для отслеживания прецедентов косвенной функции

Sub GetCell() 
Dim c As Range 

On Error Resume Next 
Set c = Selection.Parent.Evaluate(Selection.Formula) 
On Error GoTo 0 
If Not c Is Nothing Then 
    If c.Parent.Name <> ActiveSheet.Name Then c.Parent.Activate 
    c.Select 
End If 

End Sub 
+0

Что вы '.Selection'? Это будет активация? Ячейка с косвенной формулой? Какова ваша косвенная формула? Вы могли бы проанализировать это как строку, чтобы получить данные между '' '... – BruceWayne

+0

Я хочу, чтобы выбор был активным, содержащим косвенную формулу. Косвенная формула выглядит следующим образом: = INDIRECT ("'" & $ B $ 4 & "'" & "!" & O $ 9 & $ V9, TRUE). Где B4 - это имя листа, столбец O9 и V9 - рябь). –

ответ

0
Dim strFormula As String, strBetweenParenthesis As String, strNewFormula as String 
Dim lPos As Long, lNextChar As Long, lStart As Long, lEnd As Long 
dim rSource as range 

Set rSource = ActiveCell 
strFormula = rSource.Formula 
strNewFormula = strFormula 
lPos = InStr(1, strFormula, "INDIRECT") 

If lPos > 0 Then 

    Do 
     lStart = lPos + Len("INDIRECT") 
     lEnd = InStr(lStart, strNewFormula, ")") 
     strBetweenParenthesis = Mid(strNewFormula, lStart, lEnd - lStart + 1) 
     strNewFormula= Replace(strNewFormula, "INDIRECT" & strBetweenParenthesis, Evaluate(strBetweenParenthesis)) 
     lPos = InStr(lEnd - Len("INDIRECT" & strBetweenParenthesis) + Len(Evaluate(strBetweenParenthesis)), strNewFormula, "INDIRECT") 
    Loop Until lPos = 0 

    rSource.Formula = strNewFormula 
End If 

rSource.ShowPrecedents 
rSource.NavigateArrow True, 1 
rSource.ShowPrecedents(True) 
rSource.Formula = strFormula 
+0

Когда я запускаю код в excel, я получаю ошибку времени выполнения «13» в строке strFormula = Replace (strFormula, «INDIRECT» и strBetweenParenthesis, Evaluate (strBetweenParenthesis)). Как я могу это решить? –

+0

Какова ценность strBetweenParenthesis при получении ошибки? –

+0

strBetweenParenthesis = "(" '"& $ B $ 4 &"' "&"! "& O $ 9 & $ V9, TRUE)" –

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

  • Нет связанных вопросов^_^