Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从同一图纸vba中的另一个单元格访问超链接单元格_Vba_Excel_Excel Formula - Fatal编程技术网

从同一图纸vba中的另一个单元格访问超链接单元格

从同一图纸vba中的另一个单元格访问超链接单元格,vba,excel,excel-formula,Vba,Excel,Excel Formula,以下是我的工作表的设置: 单元M7与大型合并单元E6超链接。我的代码需要从M7(将是E6)访问目标单元的地址,并将该地址分配给称为“testing”的范围变量 一旦我使用“testing”获得了超链接目标单元(E6)的地址,我就可以按照自己的意愿格式化“testing”的范围地址 这是我到目前为止所做的尝试 Dim lcell As Range Dim testing As Range testing = lcell.Hyperlinks(1).Range t

以下是我的工作表的设置:

单元M7与大型合并单元E6超链接。我的代码需要从M7(将是E6)访问目标单元的地址,并将该地址分配给称为“testing”的范围变量

一旦我使用“testing”获得了超链接目标单元(E6)的地址,我就可以按照自己的意愿格式化“testing”的范围地址

这是我到目前为止所做的尝试

Dim lcell As Range
Dim testing As Range

        testing = lcell.Hyperlinks(1).Range
        testing.Value = "TEST"
这给了我以下错误:

  Run-time error: 91

  Object variable or With block variable not set

此函数将返回对超链接目标范围的引用,无论该超链接是由超链接工作表函数设置的还是在单元格的超链接集合中设置的

Sub Example()

    Dim lcell As Range
    Dim TestRange As Range

    Set lcell = Range("A1")

    Set TestRange = getHyperLinkTarget(lcell)

    If Not TestRange Is Nothing Then

        TestRange.Value = "TEST"

    End If

End Sub


感谢ThunderFrame指出超链接工作表功能。

此功能将返回对超链接目标范围的引用,无论是超链接工作表功能设置的超链接还是单元格的超链接集合中的超链接

Sub Example()

    Dim lcell As Range
    Dim TestRange As Range

    Set lcell = Range("A1")

    Set TestRange = getHyperLinkTarget(lcell)

    If Not TestRange Is Nothing Then

        TestRange.Value = "TEST"

    End If

End Sub


感谢ThunderFrame指出超链接工作表的功能。

这应该可以满足您的要求。您需要解析M7公式的内容,因此我的代码假设M7公式只包含如下超链接公式:

=HYPERLINK(E6,"RSDS")
VBA看起来像:

Sub foo()

  Const hyperlinkSignature = "=HYPERLINK("

  Dim rng As Range
  Set rng = Range("M7")

  Dim hyperlinkFormula As String
  hyperlinkFormula = Range("M7").formula

  Dim testing As Range

  'Check the cell contains a hyperlink formula
  If StrComp(hyperlinkSignature, Left(hyperlinkFormula, Len(hyperlinkSignature)), vbTextCompare) = 0 Then
    Dim hyperlinkTarget As String
    hyperlinkTarget = Mid(Split(hyperlinkFormula, ",")(0), Len(hyperlinkSignature) + 1)

    Set testing = Range(hyperlinkTarget)

    testing.Value = "TEST"

  Else
    'Check if the cell is a hyperlinked cell
    If Range("M7").Hyperlinks.Count = 1 Then
      'Credit to Thomas for this line
      Set testing = Range(Range("M7").Hyperlinks(1).SubAddress)
      testing.Value = "TEST"
    End If

  End If

End Sub
或者,如果您想要一个更简洁的方法,而不需要检查M7公式是否包含超链接,您可以使用:

Dim target As Range
Set target = Range(Range("M7").DirectPrecedents.Address)
target.Value = "Test"

这应该符合你的要求。您需要解析M7公式的内容,因此我的代码假设M7公式只包含如下超链接公式:

=HYPERLINK(E6,"RSDS")
VBA看起来像:

Sub foo()

  Const hyperlinkSignature = "=HYPERLINK("

  Dim rng As Range
  Set rng = Range("M7")

  Dim hyperlinkFormula As String
  hyperlinkFormula = Range("M7").formula

  Dim testing As Range

  'Check the cell contains a hyperlink formula
  If StrComp(hyperlinkSignature, Left(hyperlinkFormula, Len(hyperlinkSignature)), vbTextCompare) = 0 Then
    Dim hyperlinkTarget As String
    hyperlinkTarget = Mid(Split(hyperlinkFormula, ",")(0), Len(hyperlinkSignature) + 1)

    Set testing = Range(hyperlinkTarget)

    testing.Value = "TEST"

  Else
    'Check if the cell is a hyperlinked cell
    If Range("M7").Hyperlinks.Count = 1 Then
      'Credit to Thomas for this line
      Set testing = Range(Range("M7").Hyperlinks(1).SubAddress)
      testing.Value = "TEST"
    End If

  End If

End Sub
或者,如果您想要一个更简洁的方法,而不需要检查M7公式是否包含超链接,您可以使用:

Dim target As Range
Set target = Range(Range("M7").DirectPrecedents.Address)
target.Value = "Test"

谢谢你,伙计。但是,这只是将单元格M7的值更改为“TEST”,而不是将单元格E6的值更改为“TEST”。超链接集合并不总是填充的,具体取决于Excel的版本以及超链接的设置方式。@ThomasInzina当我运行该代码时,我得到的错误是“下标超出范围”您确定该单元格有超链接吗?脚本超出范围表明单元格中没有超链接。我更新了答案,加入了一个返回目标范围的函数。您应该测试返回的范围是否为零。谢谢,伙计。但是,这只是将单元格M7的值更改为“TEST”,而不是将单元格E6的值更改为“TEST”。超链接集合并不总是填充的,具体取决于Excel的版本以及超链接的设置方式。@ThomasInzina当我运行该代码时,我得到的错误是“下标超出范围”您确定该单元格有超链接吗?脚本超出范围表明单元格中没有超链接。我更新了答案,加入了一个返回目标范围的函数。您应该测试返回的范围是否为空。我将Thomas的建议包装在一些检查中,以查看单元格包含的超链接类型。出于某种原因,WorkSheetFunction超链接没有设置范围的DirectPrecements属性
Range(Range(“M7”).directprecements.Address)
Range(“M7”).directprecements
.hmm相同,如果超链接单元格包含类似
=CONCAT(A1,B2,C3)
的公式,则directprecements属性将引用非连续范围
$a$1,$B$2,$C$3
。这就是为什么我总是喜欢使用超链接公式而不是插入超链接功能的原因之一。在Office 2007中,我测试了这两种类型的超链接,但都没有返回DirectPrecements引用。他们在以后的版本中修复了吗?我将Thomas的建议包装在一些检查中,以查看单元格包含的超链接类型。出于某种原因,WorkSheetFunction超链接没有设置范围的DirectPrevents属性
Range(Range(“M7”).directprecements.Address)
Range(“M7”).directprecements
.hmm相同,如果超链接单元格包含类似
=CONCAT(A1,B2,C3)
的公式,则directprecements属性将引用非连续范围
$a$1,$B$2,$C$3
。这就是为什么我总是喜欢使用超链接公式而不是插入超链接功能的原因之一。在Office 2007中,我测试了这两种类型的超链接,但都没有返回DirectPrecements引用。他们会在以后的版本中修复这个问题吗?