Вопрос по VBA Excel

digenet

Подскажите пожалуйста, как получить список переменных, используемых в Excel-формулах.
В цикле пробегаются все не пустые ячейки, и на отдельный лист выводятся строки вида:
адрес ячейки=записанная там формула
Нужно так же вывести отдельной строкой список переменных, используемых в каждой формуле.

Trofimovyoa



список переменных
Что ты подразумеваешь под "переменными"? Ячейки, от которых зависит результат вычисления формулы?

digenet

Да.
Полные адреса ячеек, с именами листов.
Не могу найти как это сделать.
Надо чтобы выводились только переменные первого уровня.
Например:
LIST1_A1=LIST2_B11+LIST2_A2;
LIST2_B11 и LIST2_A2 тоже зависят от каких то ячеек может быть.
Нужно чтобы выводились только LIST2_B11 и LIST2_A2.

Trofimovyoa

Выведет адреса ячеек, от которых зависит А1 (ссылки на другой лист почему-то не показывает)

For Each c In Range("a1").Precedents
MsgBox c.Address
Next c

Если нужна полная адресация, то использовать c.Address(External:=True)

digenet

спасибо, попробую

digenet

Если кому интересно, то вот протестированный код:

Sub FindPrecedents
' written by Bill Manville
' With edits from PaulS
' this procedure finds the cells which are the direct precedents of the active cell
Dim rLast As Range, iLinkNum As Integer, iArrowNum As Integer
Dim stMsg As String
Dim bNewArrow As Boolean
Application. ScreenUpdating = False
ActiveCell.ShowPrecedents
Set rLast = ActiveCell
iArrowNum = 1
iLinkNum = 1
bNewArrow = True
Do
Do
Application.Goto rLast
On Error Resume Next
ActiveCell.NavigateArrow TowardPrecedent:=True, ArrowNumber:=iArrowNum, LinkNumber:=iLinkNum
If Err.Number > 0 Then Exit Do
On Error Goto 0
If rLast.Address(external:=True) = ActiveCell.Address(external:=True) Then Exit Do
bNewArrow = False
If rLast.Worksheet.Parent.Name = ActiveCell.Worksheet.Parent.Name Then
If rLast.Worksheet.Name = ActiveCell.Parent.Name Then
' local
stMsg = stMsg & vbNewLine & Selection.Address
Else
stMsg = stMsg & vbNewLine & "'" & Selection.Parent.Name & "'!" & Selection.Address
End If
Else
' external
stMsg = stMsg & vbNewLine & Selection.Address(external:=True)
End If
iLinkNum = iLinkNum + 1 ' try another link
Loop
If bNewArrow Then Exit Do
iLinkNum = 1
bNewArrow = True
iArrowNum = iArrowNum + 1 'try another arrow
Loop
rLast.Parent.ClearArrows
Application.Goto rLast
MsgBox "Precedents are" & stMsg
Exit Sub
End Sub

http://www.ozgrid.com/forum/showthread.php?t=17028
Оставить комментарий
Имя или ник:
Комментарий: