Вставить ссылку в vba

#excel #vba #hyperlink #copy #paste

Вопрос:

Я хочу вставить ссылку с одного листа на другой

 Range("A1:D1").Select Range("D1").Activate Selection.Copy Sheets("Sheet2").Select ActiveSheet.Paste Link:=True  

Однако код заставит лист переключиться с листа 1 на лист 2. Есть ли в любом случае, что я мог бы вставить ссылку, не переключая лист?

Спасибо.

Ответ №1:

Это сработает:

 ThisWorkbook.Worksheets("Sheet2").Range("D1").Formula = "=Sheet1!D1"  

Ответ №2:

Я думаю, это то, что вы пытаетесь сделать?

 Sub Sample()  Dim i As Long  For i = 1 To 4  Sheets("Sheet2").Cells(1, i).Formula = "=Sheet1!" amp; _  Split(Cells(, i).Address, "$")(1) amp; "1"  Next i End Sub  

Ответ №3:

Этот код будет делать то же самое, что и ваш фрагмент кода, без изменения активного листа.

 Range("A1:D1").Copy Worksheets("Sheet2").Paste Link:=True  

Обратите внимание, что это (и ваш код) будет скопировано с активного листа. Если вы хотите скопировать с листа, отличного от активного листа, используйте что-то вроде

 Worksheets("Sheet1").Range("A1:D1").Copy Worksheets("Sheet2").Paste Link:=True  

Ответ №4:

У меня только что была такая же проблема. Я только тогда понял, что TightVNC был подключен к другой машине, когда я попытался запустить свой код. Когда я закрыл его, код работал как обычно.

Возможно, это происходит потому, что какое-то программное обеспечение может контролировать ваш буфер обмена. Просто закройте все, что вам не нужно, например VNC или виртуальные машины.

Ответ №5:

Ваше желание по ССЫЛКЕ не может быть выполнено без выбора листа. Но вы можете сделать тот факт, что он делает это невидимым для глаза.

 Option Explicit  Sub test()  Application.ScreenUpdating = False   Sheets("Sheet1").Range("A1:D1").Copy  With Sheets("Sheet2")  .Activate  .Range("A1").Select  ActiveSheet.Paste Link:=True  End With  Sheets("Sheet1").Activate   Application.CutCopyMode = False  Application.ScreenUpdating = True End Sub  

Комментарии:

1. Нет абсолютно никаких причин сначала выбирать лист, просто используйте Sheet2.paste или Sheets("Sheet2").paste . Никогда не выбирайте лист или диапазон перед работой с ним, просто ссылайтесь на него и работайте с ним.

2. @redOctober13 Пожалуйста, проверьте, прежде чем комментировать чей-либо ответ

Ответ №6:

Вы можете использовать Application.ScreenUpdating = False , а затем вернуть его в значение true после завершения вставки.

Пример:

 Application.ScreenUpdating = False Worksheets("Sheet1").Range("D1").Copy  Worksheets("Sheet2").Activate  Range("Range You Want To Paste").Select  ActiveSheet.PasteSpecial Link:=True  Worksheets("Sheet1").Activate Range("A Range You Want Active").Activate  Application.ScreenUpdating =true