Вставить пользовательский диапазон в другой лист - PullRequest
0 голосов
/ 06 ноября 2018

Я установил диапазон и могу показать его с помощью окна сообщений и rng.address, но мне не удается скопировать / вставить или сделать aynthing с i. В своем фрагменте кода я пытаюсь скопировать его, но позже мне всегда нужно вставить диапазон после первого столбца на другом листе.

Вот одна конкретная проблема. Я уверен, что это очень легко, или я просто неправильно понимаю вещи. Я также не понимаю

Dim rng As Range


Set rng = Application.InputBox("Please choose a range", "Obtain Range Object", Type:=8)

 If MsgBox("Your choice " & rng.Address & " ?", vbYesNo, "Confirm") = vbYes Then
    GoTo continue:
    Else
    GoTo retry:
    End If

continue:


Worksheets("Sheet source").Range(rng).Copy Worksheets("sheet destination").Range("A1").Paste

Ответы [ 2 ]

0 голосов
/ 06 ноября 2018

Чтобы скопировать диапазон, вы можете сделать это следующим образом:

Sub foo()
Dim rng As Range
retry:
Set rng = Application.InputBox("Please choose a range", "Obtain Range Object", Type:=8)
    If MsgBox("Your choice " & rng.Address & " ?", vbYesNo, "Confirm") = vbYes Then
        GoTo continue:
    Else
        GoTo retry:
    End If
continue:
rng.Copy 
Worksheets("Sheet2").Range("A1").PasteSpecial xlPasteAll
End Sub
0 голосов
/ 06 ноября 2018

Вы объявили 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...