简体   繁体   中英

Copy a specified range and paste to a sheet

The code below works well apart from the specific element:

rowstopasteperiodsWks.Range(("A14"), ActiveCell.Offset(-pasteCount, 0)).Copy_
      Destination:=Worksheets("Input").Range(LastRowPeriod,Offset(-pasteCount,0))

I am trying to copy a range of cells (A14 and a specified (n) number of cells above this cell) from the RowsToPaste sheet and paste this range to the Input sheet to the last cell in the row of column D (so that the last row in column D will have A14 values, th second last will have A13 value etc.)

Thanks

FULL CODE:

Sub UpdateLogWorksheet()

        Dim historyWks As Worksheet
        Dim inputWks As Worksheet

        Dim nextRow As Long
        Dim oCol As Long

        Dim myCopy As Range
        Dim myTest As Range

        Dim lRsp As Long

        Set inputWks = Worksheets("Input")
        Set historyWks = Worksheets("Data")
        Set rowstopasteperiodsWks = Worksheets("RowsToPaste")

        Dim lng As Long
        Dim pasteCount As Long
        pasteCount = Worksheets("RowsToPaste").Cells(2, 6)
        periodsCopy = Worksheets("RowsToPaste").Range("A12")

        LastRowPeriod = Cells(Rows.Count, 4).End(xlUp).Row
        oCol = 3 ' staff info is pasted on data sheet, starting in this column



      rowstopasteperiodsWks.Range(("A14"), ActiveCell.Offset(-pasteCount, 0)).Copy_
      Destination:=Worksheets("Input").Range(LastRowPeriod,Offset(-pasteCount,0))

        'check for duplicate staff number in database
        If inputWks.Range("CheckAssNo") = True Then
          lRsp = MsgBox("Order ID already in database. Update record?", vbQuestion + vbYesNo, "Duplicate ID")
          If lRsp = vbYes Then
            UpdateLogRecord
          Else
            MsgBox "Please change Order ID to a unique number."
          End If

        Else

          'cells to copy from Input sheet - some contain formulas
          Set myCopy = inputWks.Range("Entry")

          With historyWks
              nextRow = .Cells(.Rows.Count, "A").End(xlUp).Row
          End With

          With inputWks
              'mandatory fields are tested in hidden column
              Set myTest = myCopy.Offset(0, 2)

              If Application.Count(myTest) > 0 Then
                  MsgBox "Please fill in all the cells!"
                  Exit Sub
              End If
          End With

        With historyWks
            'enter date and time stamp in record
            For lng = 1 To pasteCount
                With .Cells(nextRow + lng, "A")
                    .Value = Now
                    .NumberFormat = "mm/dd/yyyy hh:mm:ss"
                End With
                'enter user name in column B
                .Cells(nextRow + lng, "B").Value = Application.UserName
                'copy the data and paste onto data sheet
                myCopy.Copy
                .Cells(nextRow + lng, oCol).PasteSpecial Paste:=xlPasteValues, Transpose:=True
            Next lng
            Application.CutCopyMode = False
        End With




          'clear input cells that contain constants
          ClearDataEntry
      End If

    End Sub

Just noticed one obvious error. Fix it and try again::

rowstopasteperiodsWks.Range(("A14"), ActiveCell.Offset(pasteCount*-1, 0)).Copy_
      Destination:=Worksheets("Input").Range(LastRowPeriod,Offset(pasteCount*-1,0))

if you have to copy cell "A14" and pasteCount more cells above it:

rowstopasteperiodsWks.Range("A14").Offset(-pasteCount).Resize(pasteCount + 1).Copy _
  Destination:=Worksheets("Input").Cells(Rows.Count, "D").End(xlUp).Offset(1)

if you have to copy pasteCount cells starting from "A14" upwards:

rowstopasteperiodsWks.Range("A14").Offset(-pasteCount+1).Resize(pasteCount).Copy _
  Destination:=Worksheets("Input").Cells(Rows.Count, "D").End(xlUp).Offset(1)

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM