重构代码以断开链接,因此不使用Variant类型

时间:2015-01-26 11:04:42

标签: vba excel-vba excel

如何重构以下子例程,使其不使用Variant数据类型?

Sub BreakAllLinks()

Dim Link As Variant
Dim myLinks As Variant

myLinks = Excel.ActiveWorkbook.LinkSources(Type:=Excel.xlLinkTypeExcelLinks)
For Each Link In myLinks
    Excel.ActiveWorkbook.BreakLink Name:=Link, Type:=Excel.xlLinkTypeExcelLinks
Next Link

End Sub       

2 个答案:

答案 0 :(得分:1)

Linksource是一个String。 但为什么要这么麻烦?

Sub M_snb()
  For Each it In ActiveWorkbook.LinkSources(1)
    MsgBox = TypeName(it)
    ActiveWorkbook.BreakLink it, 1
  Next
End Sub

答案 1 :(得分:1)

这是你如何做到没有变种 - 但你不应该。

Sub BreakAllLinks()

    Dim myLinks() As String
    Dim LinkIdx As Long
    Dim Link As String

    ReDim myLinks(1 To UBound(ActiveWorkbook.LinkSources(xlLinkTypeExcelLinks)))

    For LinkIdx = LBound(myLinks) To UBound(myLinks)
        myLinks(LinkIdx) = ActiveWorkbook.LinkSources(xlLinkTypeExcelLinks)(LinkIdx)
    Next LinkIdx

    For LinkIdx = LBound(myLinks) To UBound(myLinks)
        Link = myLinks(LinkIdx)
        ActiveWorkbook.BreakLink Link, xlLinkTypeExcelLinks
    Next LinkIdx

End Sub

为了展示所涉及的所有数据类型,这有点过分了。你只能For..Each一个带有Variant的数组 - 这就是语言的编写方式。最佳做法不是“不使用变体”,而是“使用限制性最强的变量”。在您的情况下,Variant是您可以使用的限制性最强的变量。

有一种方法可以在没有变形的情况下编写,而不是那么明显的疯狂

Sub BreakAllLinks()

    Dim LinkIdx As Long

    For LinkIdx = LBound(ActiveWorkbook.LinkSources(1)) To UBound(ActiveWorkbook.LinkSources(1))
        ActiveWorkbook.BreakLink ActiveWorkbook.LinkSources(1)(1), xlLinkTypeExcelLinks
    Next LinkIdx

End Sub

但即便如此,我也会选择Variant。这是值得的。