Excel:检查工作簿中的工作表依赖关系?

我正在重构一个庞大的工作簿,这个工作簿有很多遗留部分,冗余计算,交叉依赖等等。

基本上,我试图删除不需要的工作表,并在工作簿中实施一些适当的信息stream。 有没有一种很好的方法来提取表单之间的依赖关系(使用VBA)?

感谢Martin

您可以使用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 

我想出了一个小小的做法。 它将所有工作表移到单独的工作簿中,并打印出依赖关系。 与使用showPrecedents ,它的优点是捕获所有链接,包括名称,embedded式表单/图表等。

警告词:移动工作表不可撤销,在运行之前保存工作簿并closures(不保存),然后重新打开。

 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 

代码不是很精美或用户友好,但它的工作原理。

您可以按照以下链接的“查找单元格中使用的外部引用”主题中的步骤操作:

在worbook中查找外部参考

但是不要input“[”,你应该input你正在试图find它的依赖关系的工作表的名称。 它将显示引用该工作表的每一个单元格的大列表,但最后它工作。 没有find方式来分组按表。