VBA Excel-应用程序或面向对象错误,带有=超链接

VBA Excel-应用程序或面向对象错误,带有=超链接,excel,hyperlink,vba,Excel,Hyperlink,Vba,我对Excel 2016中基于VBA的超链接有问题。我想在所有其他工作表前面添加一个“导航”工作表,但我对“=超链接”有问题。我的代码如下: Dim wbBook As workbook Dim wsActive As Worksheet Dim wsSheet As Worksheet Dim lnRow As Long Dim lnPages As Long Dim lnCount As Long Dim temp As Variant Set wbBook = ActiveWork

我对Excel 2016中基于VBA的超链接有问题。我想在所有其他工作表前面添加一个“导航”工作表,但我对“=超链接”有问题。我的代码如下:

Dim wbBook As workbook

Dim wsActive As Worksheet
Dim wsSheet As Worksheet

Dim lnRow As Long
Dim lnPages As Long
Dim lnCount As Long

Dim temp As Variant

Set wbBook = ActiveWorkbook

wbBook.Sheets.Add(Before:=Worksheets(1)).Name = "Navigation"

Set wsActive = wbBook.ActiveSheet

With wsActive
    .Name = "Navigation"
    With .Range("A1:A1")
        .Value = VBA.Array("Mitarbeiter")
        .Font.Bold = True
    End With
End With

lnRow = 2
lnCount = 1

For Each wsSheet In wbBook.Worksheets
    If wsSheet.Name <> wsActive.Name Then
        wsSheet.Activate
        With wsActive
            Worksheets("Navigation").Cells(lnRow, 1).Formula = _
            "=HYPERLINK(" & Chr(34) & "#" & "'" & wsSheet.Name & "'" & "!A" & lnRow & Chr(34) & ";" & Chr(34) & wsSheet.Name & Chr(34) & ")"      
        End With
        lnRow = lnRow + 1
        lnCount = lnCount + 1
    End If
Next wsSheet
wbBook作为工作簿
将工作表设置为活动工作表
将工作表设置为工作表
昏暗的长廊
我的书页一样长
暗长
变光温度
设置wbBook=ActiveWorkbook
wbBook.Sheets.Add(Before:=工作表(1)).Name=“导航”
设置wsActive=wbBook.ActiveSheet
使用wsActive
.Name=“导航”
带.范围(“A1:A1”)
.Value=VBA.Array(“Mitarbeiter”)
.Font.Bold=True
以
以
lnRow=2
lnCount=1
对于wbBook.Worksheets中的每个wsSheet
如果wsSheet.Name wsActive.Name,则
wsSheet.Activate
使用wsActive
工作表(“导航”)。单元格(lnRow,1)。公式=_
=超链接(“&Chr(34)&”#“&”&wsSheet.Name&“&”&A”&lnRow&Chr(34)&”&Chr(34)&wsSheet.Name&Chr(34)&”)
以
lnRow=lnRow+1
lnCount=lnCount+1
如果结束
下一页
我遇到的问题是,当我在超链接前面添加一个“=”时,会弹出错误“Anwendungs-order objektorientierter Fehler”(应用程序或面向对象错误)。如果我在没有“=”的情况下运行宏,程序可以运行,但我必须在导航表中手动添加等式符号


提前干杯

既然您已经在使用VBA,为什么不使用VBA添加超链接的功能(使用
.Hyperlinks.Add

你可以在网上更多地了解它

我减少了
ActiveSheet
Activate
的使用

代码

Option Explicit

Sub TestHyperlink()

Dim wbBook As Workbook
Dim wsActive As Worksheet
Dim wsSheet As Worksheet

Dim lnRow As Long
Dim lnPages As Long
Dim lnCount As Long
Dim temp As Variant

Set wbBook = ActiveWorkbook
Set wsActive = wbBook.Sheets.Add(Before:=Worksheets(1))
With wsActive
    .Name = "Navigation"
    With .Range("A1:A1")
        .Value = VBA.Array("Mitarbeiter")
        .Font.Bold = True
    End With
End With

lnRow = 2
lnCount = 1

For Each wsSheet In wbBook.Worksheets
    If wsSheet.Name <> wsActive.Name Then
        With wsSheet
            .Hyperlinks.Add Anchor:=Worksheets("Navigation").Range("A" & lnRow), _
                Address:="", SubAddress:="'" & .Name & "'!" & .Range("A" & lnRow).Address, _
                TextToDisplay:="#" & .Name
        End With
        lnRow = lnRow + 1
        lnCount = lnCount + 1
    End If
Next wsSheet

End Sub
选项显式
子测试超链接()
将工作簿作为工作簿
将工作表设置为活动工作表
将工作表设置为工作表
昏暗的长廊
我的书页一样长
暗长
变光温度
设置wbBook=ActiveWorkbook
设置wsActive=wbBook.Sheets.Add(之前:=工作表(1))
使用wsActive
.Name=“导航”
带.范围(“A1:A1”)
.Value=VBA.Array(“Mitarbeiter”)
.Font.Bold=True
以
以
lnRow=2
lnCount=1
对于wbBook.Worksheets中的每个wsSheet
如果wsSheet.Name wsActive.Name,则
带wsSheet
.Hyperlinks.Add锚定:=工作表(“导航”).Range(“A”和lnRow)_
地址:=”,子地址:=“”&.Name&“!”&.Range(“A”&lnRow)。地址_
TextToDisplay:=“#”&.Name
以
lnRow=lnRow+1
lnCount=lnCount+1
如果结束
下一页
端接头

尝试使用逗号而不是分号分隔公式的参数。我认为将公式强制放入这样的单元格忽略了本地化

    With wsActive
        Worksheets("Navigation").Cells(lnRow, 1).Formula = _
        "=HYPERLINK(" & Chr(34) & "#" & "'" & wsSheet.Name & "'" & "!A" & lnRow & Chr(34) & "," & Chr(34) & wsSheet.Name & Chr(34) & ")"      
    End With

谢谢你的快速回复!我也尝试了.Add方法,但效果不太好,这就是我尝试“手动”解决它的原因。当我运行您的代码时,会出现以下消息:服务器正忙,操作无法完成,因为其他应用程序正忙。改成。。。激活其他应用程序并解决问题。但如果我继续按“Wechseln zu…”,什么都不会发生。我必须提到的是,我正在MS Project中运行宏,但这不应该是一个问题,因为我是在excle文件中编写的。是的,这段代码是我在MS Project中的VBA的一部分。我正在通过宏从MS Project导出数据,并将其写入Excel文件。一切正常,只是超链接前面的等式符号会造成一些麻烦。如果我离开等式符号,程序会工作,但正如前面提到的,我必须手动添加“=”以获得公式,这不方便;)。不幸的是,我需要分号,因为我有德语版的Excel。否则超链接将无法工作。这就是我在Excel中需要的等式:=HYPERLINK(#'Shee1'!A4“;“Sheet1”)@Chris然后将公式替换为公式化局部,它应该work@Shai我将代码更改为Worksheets(“Navigation”).Cells(lnRow,1.FormulaLocal=uu但“服务器繁忙”错误仍然出现。@Chris-我很感激您应该使用分号-但您是否尝试使用逗号?我最近看到好几篇文章指出,以这种方式使用
.Formula
存在问题。正如@Shai所建议的-
.FormulaLocal
更好,应该可以消除这个问题。如果您对这两种方法中的任何一种都感到“服务器忙”,那么我建议这里还有另一个问题(在我的英国机器上使用您代码的逗号版本,我在创建链接时没有问题)。@CLR yes,当我将逗号用于.FormulaLocal:
与wsActive Worksheets(“导航”).Cells(lnRow,1)。FormulaLocal=\u=HYPERLINK(&Chr(34)&&wsSheet.Name&&A“&lnRow&Chr(34)&”、“&Chr(34)&wsSheet.Name&Chr(34)&”)以
结尾,我得到了一个错误“应用程序或面向对象的错误”,奇怪的是它正在您的机器上工作。