#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