2017-02-23 62 views
0

У меня проблема с гиперссылкой на основе VBA в Excel 2016. Я хочу добавить лист «Навигация» перед всеми другими листами, но у меня есть проблема с " = 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 ??? Этот код? –

+0

Ну да, этот код является частью моего VBA в MS Project. Я экспортирую данные из 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 Я изменил код to ** Worksheets («Навигация»). Ячейки (lnRow, 1) .FormulaLocal = _ **, но ошибка «Сервер занята» все еще появляется. – Chris

Смежные вопросы