Аргумент копирования не работает с объектом Range - PullRequest
1 голос
/ 09 апреля 2020

Я пытаюсь скопировать таблицу и вставить ее в другое место (целевая ячейка, выбранная пользователем) на листе:

enter image description here

Но Я получаю сообщение об ошибке table.copy:

Неправильное количество аргументов или неправильное присвоение свойства

   Sub PasteMacro()
     Dim target As Variant
     Dim i As Long
     Dim table As Range
     Dim weight As Double
     Dim thickness As Double
     Dim Stiff As Double

     Set shA = ActiveWorkbook.Worksheets("User sheet comp data")

     ' searh for the first non 0 ligne in the table

     i = 19
     Do Until Range("M" & i) <> 0
     i = i - 1
     Loop

     MsgBox Cells(i, 13).Address

     'the table to copy
     Set table = shA.Range(Cells(1, 2), Cells(i, 15))

     weight = shA.Range("O20")
     thickness = shA.Range("M20")
     Stiff = shA.Range("M21")


     On Error Resume Next
    ' ask the user to select the cell to paste table
    Set target = Application.InputBox(Prompt:="Please select a destination Cell where you want to 
    paste", Type:=8)

    On Error GoTo 0

    If Not answ Is Nothing Then
    'copy the table and paste it
    table.Copy , shA.target
    End If

  End Sub

1 Ответ

2 голосов
/ 09 апреля 2020
table.Copy , shA.target

должно быть:

table.Copy target

, поскольку:

  • параметр Destination является первым из метода Copy(), а запятые необходимы для разграничения последующих (если есть) параметров

  • target - это объект Range, следовательно, он уже полностью квалифицирован до родительского листа и объекта рабочей книги

Более того, я думаю,

If Not answ Is Nothing Then

должно быть:

If Not Target Is Nothing Then

, поэтому вот пересмотренный код

Sub PasteMacro()

    Dim target As Range
    Dim table As Range
    Dim i As Long
    Dim weight As Double
    Dim thickness As Double
    Dim Stiff As Double

    Dim shA As Worksheet

    With ActiveWorkbook.Worksheets("User sheet comp data")

        ' search for the first non 0 ligne in the table
        i = 19
        Do Until .Range("M" & i) <> 0
            i = i - 1
        Loop

        MsgBox .Cells(i, 13).Address

        'the table to copy
        Set table = .Range(Cells(1, 2), Cells(i, 15))

        weight = .Range("O20").Value2
        thickness = .Range("M20").Value2
        Stiff = .Range("M21").Value2


        On Error Resume Next
        Set target = Application.InputBox(Prompt:="Please select a destination Cell where you want to Paste ", Type:=8)
        On Error GoTo 0

        If Not target Is Nothing Then table.Copy target  'copy the table and paste it

    End With

End Sub

Как вы можете видеть все объекты диапазона (Range, Cells) ссылаются на ActiveWorkbook.Worksheets("User sheet comp data") ("MilestoneDueDate") через эту точку (.) перед ними

таким образом, вы можете быть уверены, что не потеряете контроль над тем, какой диапазон рассматривается на каком листе

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...