通过超链接打开工作簿,然后使用超链接名称作为工作簿参考

时间:2013-07-05 07:07:56

标签: vba excel-vba reference hyperlink excel

我正在尝试使用超链接工作簿名称并将其放入我的代码中。

Sub Workbook()

    Dim vbaname as string
    Dim WBMaster As Workbook, WBSource As Workbook
    Dim WSMaster As Worksheet, WSSource As Worksheet

    Range("b7").Hyperlinks(1).Follow

    'returns the hyperlink text "Vba Source test"
    VbaName = """" & Range("B7").Text & """"

    Set WBSource = Workbooks(VbaName)

我得到一个超出范围bug的下标。还有另一种方法可以做到这一点。我只是希望能够将超链接文本放入该括号中。

1 个答案:

答案 0 :(得分:0)

如果您Debug.Print VbaName它实际上保留了B7的值,而是活动窗口(后跟超链接)。如果要从超链接获取工作簿的名称,请使用此代码

Sub GetWorkbookName()
    MsgBox "the name of the workbook in the hyperlink is: " & vbCrLf & _
            getWorkbookName(Range("B7").Text)
End Sub

Private Function getWorkbookName(hyperLink As String) As String
    Dim i&
    For i = 1 To Len(hyperLink)
        If StrComp(Left(Right(hyperLink, i), 1), "\", vbTextCompare) = 0 Then
            getWorkbookName = Right(hyperLink, i - 1)
            Exit For
        End If
    Next i
End Function

<小时/> 另一方面,我认为您正在尝试从超链接打开工作簿并分配对它的引用。你采取的方式不是正确的方法。我想你可能想考虑这样做:

Sub Workbook()

    Dim wbFromHyperLink As String
    Dim WBSource As Workbook

    MsgBox "the name of the workbook in the hyperlink is: " & vbCrLf & _
            getWorkbookName(Range("B7").Text)

    wbFromHyperLink = getWorkbookName(Range("B7").Text)

    'Range("b7").Hyperlinks(1).Follow

    Set WBSource = Workbooks.Open(Range("B7").Text)

    ' do not forget to close and free the object
    ' WBSource.Saved = True
    ' WBSource.Close
    ' Set WBSource = Nothing
End Sub

Private Function getWorkbookName(hyperLink As String) As String
    Dim i&
    For i = 1 To Len(hyperLink)
        If StrComp(Left(Right(hyperLink, i), 1), "\", vbTextCompare) = 0 Then
            getWorkbookName = Right(hyperLink, i - 1)
            Exit For
        End If
    Next i
End Function