2017-02-23 124 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

相關問題