2017-02-23 71 views
0

我在Excel 2016中使用基于VBA的超链接时遇到了问题。我想在所有其他工作表的前面添加一个“导航”工作表,但我遇到了“ = HYPERLINK”。我的代码如下:VBA Excel - 应用程序或面向对象的错误= HYPERLINK

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 

我的问题是,当我添加一个“=”中HYPERLINK,错误“Anwendungs-奥德objektorientierter Fehler”的前面(应用程序或面向对象的误差)弹出。如果我运行没有“=”的宏,程序可以正常工作,但我必须在导航表中手动添加公式符号。

提前欢呼!

回答

0

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

可以更多MSDN

读到它,我减少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 
+0

谢谢您的快速回复! 我也尝试了.Add方法,但它没有工作,这就是为什么我试图“手动”解决它。当我运行你的代码时,出现以下消息: 服务器繁忙,由于其他应用程序忙,无法完成操作。更改为...激活其他应用程序并解决问题。 但是如果我继续按“Wechseln zu ...”,没有任何反应。 我不得不提到,我在MS-Project中运行宏,但它不应该成为一个问题,因为我正在写一个excle文件。 – Chris

+0

@Chris MS Project?这个代码? –

+0

是的,这段代码是MS Project中VBA的一部分。我通过宏从MS Project导出数据并将其写入Excel文件中。一切工作正常,只是HYPERLINK前面的公式标志会造成一些麻烦。如果我离开公式符号,该程序工作正常,但如前所述,我必须手动添加“=”来获得公式,这是不方便的;)。 – Chris

0

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

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 
+0

不幸的是我需要分号,因为我有德语版的Excel。否则超链接将不起作用。 这就是我需要在Excel中的公式: ** = HYPERLINK(“#'Shee1'!A4”;“Sheet1”)** – Chris

+0

@Chris然后只需替换FormulaLocal公式,它应该工作 –

+0

@Shai我改变了代码到**工作表(“导航”)。单元格(lnRow,1).FormulaLocal = _ **但仍然出现“服务器繁忙”错误。 – Chris

相关问题