2015-08-19 4 views
1

У меня нет абсолютно никакой идеи, почему я не могу добавить гиперссылку в форму, но только если ее активирует функция в ячейке. Когда я запускаю его вручную из непосредственного окна, все работает хорошо. Также у меня нет никаких проблем с выполнением этого вручную.excel vba добавить гиперссылку на форму в группе

У меня тоже не знаю, как написать хорошую обработку ошибок в VBA

Это пример кода.

function testCase(xlLabelName as String) 
Dim sht As Worksheet 
    For Each sht In ActiveWorkbook.Sheets 
     If shapeExist(sht, xlLabelName) Then 
      sht.Hyperlinks.Add Anchor:=sht.Shapes(xlLabelName), Address:="", SubAddress:="a1" 
      testCase = "Bingo" 
     End If 
    Next sht 
End Function 

От немедленного окна я получаю Bingo ответ и в клетке я получаю #arg! ошибку, и это единственная линия, которая не выполняется. Я пытался разгруппировать формы сначала с помощью

Dim gshp As Shape 
Dim shrng As ShapeRange 
Dim tmp As String 
Set gshp = sht.Shapes(getParentShape(xlLabelName)) 
tmp = gshp.Name 
Set shrng = gshp.Ungroup 
sht.Hyperlinks.Add Anchor:=sht.Shapes(xlLabelName), Address:="", SubAddress:="a1" 
shrng.Regroup 
shrng.name = tmp 

Но это также не удалось. И все же немедленное окно дает мне правильный ответ (bingo) Все остальные операции выполняются по мере необходимости (покраска), только этот провал. Если я удалю эту проблемную строку, я получил правильный ответ в ячейке. Формы Я пытаюсь разобраться, это msoFreeform
Функция, чтобы проверить, если форма существует, только цикл через все формы в листе и сравнить имена (Lame но сейчас его работу)

Спасибо заранее.

+0

UDF не может добавить гиперссылка - по крайней мере, без запутанных обходных. Почему вы хотите сделать это с помощью функции, а не на событие? – Rory

+0

Ты мой личный Иисус Христос. Теперь я знаю, что искать. – KamilKrzes

ответ

1

Если бы я тебя, я бы назначить макрос моей формы, так что она будет работать в следующих подразделах при нажатии:

sub hyperlinkShape 
    ThisWorkbook.FollowHyperlink ("C:\temp\test.xlsx") 
End sub 

Если вы ищете гиперссылке в книге, такие как изменение листов , вы можете написать

sub hyperlinkShape 
    Sheets("Desiredsheet").Select 
End sub 

Таким образом, гиперссылка не будет прикреплена к форме, но под. При нажатии на фигуру можно запустить суб.

Для обработки ошибок, я предлагаю вам прочитать ответы этой темы я отправил несколько месяцев назад: VBA Excel simple Error Handling