Вы объявили Dim rng As Range
, так что это уже диапазон на определенном листе, поэтому Range(rng)
не работает, потому что Range()
ожидает адрес в качестве параметра (не диапазон).
Также, если вы используете синтаксис .Copy
в одной строке (с адресатом в качестве параметра), вам не нужно .Paste
.
Это должно быть
rng.Copy Worksheets("sheet destination").Range("A1")
Также использование Goto
(вне передачи ошибок) является очень плохой практикой. Вместо этого используйте что-то вроде этого:
Sub AskMe()
Dim Rng As Range
Do
On Error Resume Next 'next line throws error if user presses cancel so we hide **all** error messages now (and turn them on later!)
Set Rng = Application.InputBox("Please choose a range", "Obtain Range Object", Type:=8)
If Err.Number <> 0 Then Exit Sub 'if an error occurred then the user pressed cancel (so we exit)
On Error GoTo 0 'always re-activate error reporting! Otherwise all error messages stay hidden.
Loop Until MsgBox("Your choice " & Rng.Address & " ?", vbYesNo, "Confirm") = vbYes
'repeat asking for a range until yes is pressed
Rng.Copy Worksheets("sheet destination").Range("A1")
End Sub