2016-04-19 3 views
0

Удивление, если это вообще возможно, но:Excel VBA: гиперссылок, что создает новый лист

Так что есть кнопка макроса, который вставляет значения в лист из UserForm, а вот визуальный пример того, как это примерно выглядит как:

<table style="width:100%"> 
 
    <tr> 
 
    <td>OrderID:</td> 
 
    <td>Product</td> 
 
    <td>Q</td> 
 
    <td>Invoice</td> 
 
    </tr> 
 
    <tr> 
 
    <td>1</td> 
 
    <td>Potato</td> 
 
    <td>1337</td> 
 
    <td><a href="url">Open Invoice</a></td> 
 
    </tr> 
 
</table>

"Открытое Invoice" ссылка Я создаю с этим кодом:

Sheets("Sales").Hyperlinks.Add Sheets("Sales").Cells(emptyRow, 9), "", Sheets("Sales").Name, "", "Open Invoice" 

Я бы хотел, чтобы каждый раз, когда я нажимаю «Открыть счет-фактуру», он создавал новый лист (предпочтительно новое окно Excel), а затем данные переносятся в шаблон (перенос и шаблон, я думаю, я сам справичу)

Спасибо!

+1

Try 'Worksheet_FollowHyperlink'? – findwindow

+0

@findwindow хорошо, хорошо. Шаг вперед. Теперь проблема в том, что когда я нажимаю ссылку «Открыть счет-фактуру», она сначала выдает сообщение об ошибке «Недействительный справочник», поскольку в разделе «Открыть счет-фактуру» нет ссылки. Как мне это сделать? Можно вставить пустую ссылку, так что ничего не происходит? – user3688039

+0

Как вы нажимаете ссылку, когда нет ссылки? – findwindow

ответ

3

ли это установить гиперссылку:

Dim hlRange as Range 
Set hlRange = Sheets("Sales").Cells(emptyRow, 9) 
With hlRange.Hyperlinks 
    .Delete 
    .Add Anchor:=hlRange, _ 
     Address:="", _ 
     SubAddress:=hlRange.Address, _ 
     TextToDisplay:="Open Invoice" 
End With 

Это создает гиперссылку, которая связывает назад к себе, так что это действует ссылка, но это не никуда идти.

Затем, используя процедуру Worksheet_FollowHyperlink событий, чтобы создать новую рабочую книгу из шаблона, а оттуда вы можете вставить данные по мере необходимости:

Private Sub Worksheet_FollowHyperlink(ByVal Target As Hyperlink) 
Dim wb as Workbook 
Dim ws as Worksheet 
' If there are other hyperlinks in this sheet which should NOT trigger the new file, then you will need to add an Intersect test and exit sub early. 

'Add a new workbook 
Set wb = Workbooks.Open("path to template file") '## Modify as needed 
Set ws = wb.Worksheets(1)       '## Modify as needed 

'Add the data to the new sheet in new workbook 
' -- code here, or call another procedure to do the operation -- 

End Sub 
+0

Что такое Range (D5)? – user3688039

+0

@ user3688039, в каком контексте? Он используется в процедуре 'FollowHyperlink' в качестве логического оператора управления потоком, так что другие гиперссылки (если есть другие гиперссылки в других ячейках) не запускают« Добавить новую книгу ». В другом фрагменте кода, назначающем гиперссылку, IDK, для чего она предназначена, это часть вашего кода OP, поэтому я предположил, что это необходимо. –

+0

Хмм, я не упоминал Range (D5) где угодно. – user3688039

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