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

时间:2011-02-21 09:55:51

标签: excel excel-vba excel-2003 vba

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

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

由于 马丁

3 个答案:

答案 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分组的方法。