我正在重构一个庞大的工作簿,包括许多遗留部分,冗余计算,交叉依赖等。
基本上,我正在尝试删除不需要的工作表,并在工作簿中实现一些适当的信息流。有没有一种很好的方法来提取工作表之间的依赖关系(使用VBA)?
由于 马丁
答案 0 :(得分:4)
您可以使用ShowPrecedents和NavigateArrow。 这是一些伪代码
for each oCell in oSht containing a formula
ocell.showprecedents
do until nomoreprecedents
i=i+1
Set oPrec = oCell.NavigateArrow(True, 1, i)
If not oPrec.Parent Is oSht Then
' off-sheet precedent
endif
loop
next ocell
答案 1 :(得分:0)
我想出了一个小子来做到这一点。它将所有工作表移动到单独的工作簿中并打印出依赖项。使用showPrecedents
的优势在于它可以捕获所有链接,包括名称,嵌入表单/图表等。
警告提示:移动工作表无法撤消,在运行此工作簿之前保存工作簿并关闭(不保存)并在之后重新打开。
Sub printDependencies()
' Changes workbook structure - save before running this
Dim wbs As VBA.Collection, wb As Workbook, ws As Worksheets
Dim i As Integer, s As String, wc As Integer
Set ws = ThisWorkbook.Worksheets
Set wbs = New VBA.Collection
wbs.Add ThisWorkbook, ThisWorkbook.FullName
For i = ws.Count To 2 Step -1
ws(i).Move
wc = Application.Workbooks.Count
wbs.Add Application.Workbooks(wc), Application.Workbooks(wc).FullName
Next
Dim wb As Workbook
For Each wb In wbs
For Each s In wb.LinkSources(xlExcelLinks)
Debug.Print wb.Worksheets(1).Name & "<-" & wbs(s).Worksheets(1).Name
Next
Next
End Sub
代码不是很精致或用户友好,但它有效。
答案 2 :(得分:0)
您可以按照&#34;中查找单元格中使用的外部参照的步骤进行操作。以下链接的主题:
Find external references in a worbook
但不是进入&#34; [&#34;您应该输入您尝试查找其依赖项的工作表的名称。它将显示引用工作表的每个单元格的大型列表,但最后它可以工作。 Haven没有找到按Sheet分组的方法。