область копирования и вставки не одного размера? - PullRequest
0 голосов
/ 04 февраля 2020
Dim lastrow&, lastCol&, myarray As Range
lastrow = Range("A1").End(xlDown).Row
lastCol = Range("XX1").End(xlToLeft).Column
Set myarray = Range("A1").Resize(lastrow, lastCol)
Range("A1", myarray).Select

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

 Selection.Copy
    Application.CutCopyMode = False
    Selection.Copy
    Application.WindowState = xlNormal
    Windows("Ex-Pakistan Calculator Final.xlsm").Activate
    Sheets("MRG").Select
    'has to find the last row by itself
    Range("A" & Rows.Count).End(xlUp).Offset(2, 0).Select
    ActiveSheet.Paste

Получение ошибки в последней строке «activesheet.paste» с указанием области копирования и вставки не одного размера, попробуйте выбрать одну ячейку. введите описание изображения здесь

Дело в том, что "Range (" A "& Rows.Count) .End (xlUp) .Offset (2, 0) .Select" выбирает только одну ячейку так что я не вижу проблемы.

Ответы [ 2 ]

0 голосов
/ 04 февраля 2020

Поздравляю с началом использования VBA. В вашем коде есть несколько вещей, которые можно использовать для улучшения. Вы хотите избежать использования select (обычная задача для начинающих). Вам также даже не нужно перемещаться по листу или даже использовать копирование / вставку.

Однако, смотрите ниже, где я разбил ваш код с помощью некоторых операторов, чтобы остановиться и проверить, где вы , Я думаю, что это достигнет sh того, что вы хотите, но также поможет вам получить более высокую оценку asp того, что вы делаете (всегда начинается битва!)

Продолжайте сражаться.

Sub adfa()
Const turnOnStops As Boolean = True 'change to true or false to review code

    Dim WS_Pull As Worksheet:
        Set WS_Pull = ActiveSheet 'better to define this with actual sheet name

    Dim lastrow As Long:
        lastrow = WS_Pull.Cells(Rows.Count, 1).End(xlUp).Row 'this assumes column a has the bottom row and no rows hidden
    If turnOnStops Then
        Debug.Print "Lastrow is " & lastrow
        Stop
    End If



    Dim lastcol As Long:
        lastcol = WS_Pull.Cells(1, Columns.Count).End(xlToLeft).Column 'same assumptions but with columns on row 1 instead of columna a
    If turnOnStops Then
        Debug.Print "lastcol is " & lastcol
        Stop
    End If




    Dim myarray As Range:
        Set myarray = WS_Pull.Range("A1").Resize(lastrow, lastcol) ' I'm not sure what you're trying to do here.


    If turnOnStops Then
        Dim theAnswer As Long
            theAnswer = MsgBox("The address of myArray is " & myarray.Address & ". Stop code?", vbYesNo)
            If theAnswer = vbYes Then Stop
    End If


    Dim WS_paste As Worksheet: Set WS_paste = Sheets("MRG")  'it would be better to use the SHEET (shown in the VBA project)


    WS_Pull.Range("A1", myarray).Copy '<--- what are trying to copy.

    If turnOnStops Then
            theAnswer = MsgBox("The area copied was " & WS_Pull.Range("A1", myarray).Address & ". Stop code?", vbYesNo)
            If theAnswer = vbYes Then Stop
    End If


    If turnOnStops Then
        theAnswer = MsgBox("The area you are going to paste to is " & _
        WS_paste.Cells(1, Rows.Count).End(xlUp).Offset(2, 0).Address & " stop code?", vbYesNo)
        If theAnswer = vbYes Then Stop
    End If


End Sub
0 голосов
/ 04 февраля 2020

Следующее является идеальным способом копирования и вставки с использованием выбора диапазона. Вы можете изменить этот код согласно вашему требованию.

Sub CopyPaste()
    Dim selectRange As range
    Dim lastrow As Integer
    Application.CutCopyMode = False
    Sheets("Sheet1").Activate
    lastrow = range("A1").End(xlDown).Row
    Set selectRange = range("A1:A" & lastrow)
    selectRange.Copy
    Sheets("Sheet2").range("B1:B" & lastrow).PasteSpecial xlPasteAll
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...