Excel 2010 VBA :.。Names.Add在.Hyperlinks.Add之后不起作用

时间:2014-09-01 13:13:11

标签: excel vba excel-vba excel-2010

我在Windows 7 64位版本的Excel 2010 VBA中遇到了一个我无法解决的问题。通过将下面的代码粘贴到新工作簿中的模块中并运行它,可以轻松地重新创建该问题。

我想要做的是循环遍历多张工作表,并在每张工作表上添加已定义的名称和超链接。

Sub Test()
    Dim i As Integer
    Dim ws As Worksheet
    Dim defName As String
    For i = 1 To 2
        Set ws = Sheets(i)
        defName = "Name_" & ws.Name
        ws.Names.Add Name:=defName, RefersToR1C1:="=OFFSET(Sheet3!R1C1,0,0,1)"
        ws.Hyperlinks.Add Anchor:=ws.Range("A1"), _
             Address:="", SubAddress:="=Sheet3!A1"
    Next i
End Sub

运行代码在ws.Names.Add调用的第二次迭代中给出以下错误:运行时错误'1004:您键入的公式包含错误。

执行以下任何操作都会使错误消失:

  • 将for迭代更改为“i = 1 To 1”或“i = 2 To 2”
  • 在for循环中放置一个调试断点,并在停止时按F5
  • 将单元格引用更改为 ws.Names.Add Name:=defName, RefersToR1C1:="=Sheet3!R1C1",即删除OFFSET命令

DoEvents添加到for循环的第一行或设置Application.EnableEvents = False并不能解决问题。

是否有人知道此错误的原因或如何绕过它?我感谢任何帮助。

编辑:无论超链接链接到哪个问题,都会出现问题。将超链接更改为以下内容无法解决问题

ws.Hyperlinks.Add Anchor:=ws.Range("A1"), Address:="http://www.google.com"

Edit2:管理用更简单的代码重新创建问题:

Sub Test()
    With Sheets(1)
        .Hyperlinks.Add Anchor:=.Range("A1"), Address:="http://www.google.com"
        .Names.Add Name:="myDefName", RefersToR1C1:="=OFFSET(Sheet1!R1C1,0,0,1)"
    End With
End Sub

1 个答案:

答案 0 :(得分:0)

我通过将for循环分成两个循环来解决这个问题,一个用于.names.add调用,另一个用于hyperlinks.add调用。这样就可以在创建第一个超链接之前定义所有名称。

很抱歉,我发布此答案是不对的。