【问题标题】:Excel: Check Sheet Dependencies within a Workbook?Excel:检查工作簿中的工作表依赖关系?
【发布时间】:2011-02-21 09:55:50
【问题描述】:

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

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

谢谢 马丁

【问题讨论】:

  • Trace Precedents 仅显示单个单元格的先例。我正在寻找的是类似于链接菜单对工作启动间链接所做的事情,但对于工作簿中的工作表。

标签: excel excel-2003 vba


【解决方案1】:

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

【讨论】:

  • 哇,我没有意识到实际上有一种方法可以跟踪表外引用。太棒了。
【解决方案2】:

我想出了一个小子来做到这一点。它将所有工作表移动到单独的工作簿中并打印出依赖关系。使用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

代码不是很精致或用户友好,但它可以工作。

【讨论】:

  • 我的朋友有一个编译错误。对于每个控制变量,必须是 Variant 或 Object。在
     For Each s In wb.LinkSources (xlExcelLinks)  希望你能帮助我。
【解决方案3】:

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

Find external references in a worbook

但不要输入“[”,您应该输入要查找其依赖项的工作表的名称。它将显示引用工作表的每个单元格的大列表,但最后它可以工作。还没找到按Sheet分组的方法。

【讨论】:

    猜你喜欢
    • 2022-07-11
    • 2012-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-04
    • 2016-10-15
    • 1970-01-01
    相关资源
    最近更新 更多