如何将单元格从工作表1复制到工作表2而不删除工作表2上的数据

时间:2016-10-21 15:30:30

标签: excel vba excel-vba

我需要代码,正如我的标题所暗示的,用于以下任务。我已经尝试了很多不同的代码,但它仍然没有用。 enter image description here 我只需要移动2列," SKU"和"折扣",使用命令按钮进入sheet2并立即删除。

我已经可以接受这种编码了。但是,问题才刚刚开始。 enter image description here 当我成功移动第一个数据并尝试移动第二个数据时,第一个数据消失。

我已经尝试了很多方法,但仍然无法弄清楚代码的错误。

请检查以下代码:

Sub OUTGOING_GOODS()
function1
function2
clear
Range_End_Method
End Sub

Sub function1()
Sheets("Invoice Print").Range("B21:B27").Copy Destination:=Sheets("Outgoing Goods").Range("D4")
End Sub

Sub function2()
Sheets("Invoice Print").Range("D21:D27").Copy Destination:=Sheets("Outgoing Goods").Range("L4")
End Sub

Sub clear()
Range("B21:B27").clear
End Sub

我还需要更改输入数据的范围。正如您所看到的,Range仅由D21:D27定义,但我需要的不仅仅是第27行,以防万一输入其他数据。

已经尝试过以下代码:

 With Worksheets("Sheet2")
    LastRow = .Cells(.Rows.Count, "D").End(xlUp).Row
    LastRow = .Cells(.Rows.Count, "L").End(xlUp).Row
    For Each cell In Range("D4:D" & LastRow)
    DestinationRow = LastRow + 1
    Next
    For Each cell In Range("L4:L" & LastRow)
    DestinationRow = LastRow + 1
    Next
End With

Lastrow = .Cells(.Rows.Count, 1).End(xlUp).Row
        For i = 1 To InputData
            Lastrow = .Cells(.Rows.Count, 1).End(xlUp).Row
            For j = 1 To 3
                    .Cells(lastrow + 1, j).Value = InputData(i, j)
            Next j
        Next i
    End With

这仍然无效。

1 个答案:

答案 0 :(得分:1)

根据我们迄今为止的讨论,我建议如下:

Sub Outgoing_Goods_New()
'
Dim Outgoing As Worksheet 'Generally it's better to use Worksheet variables. Saves the trouble of having to re-type the sheet name each time you reference the sheet
Dim Invoice As Worksheet
Dim LastRow_Invoice As Long
Dim LastRow_Outgoing As Long
Set Outgoing = ActiveWorkbook.Worksheets("Outgoing Goods")
Set Invoice = ActiveWorkbook.Worksheets("Invoice Print")

'Find the last row of Outgoing column D that's used so we know where to paste the new set of outgoing goods
LastRow_Outgoing = Outgoing.Range("D1048576").End(xlUp).Row

'Make sure column L of Outgoing ends at the same point
If Outgoing.Range("L1048576").End(xlUp).Row > LastRow_Outgoing Then
    LastRow_Outgoing = Outgoing.Range("L1048576").End(xlUp).Row
End If 'else column L's last used row is farther up the worksheet or the same row. Either way no need to update the value

'Determine how much data to copy
LastRow_Invoice = Invoice.Range("B1048576").End(xlUp).Row 'I'm assuming Column D of Invoice Print has to end at the same row. If not, use the same IF statement as above, but
    'checking column D of Invoice

'Copy the data from column B
Invoice.Range("B2:B" & LastRow_Invoice).Copy

'Paste to Outgoing Goods
Outgoing.Range("B" & LastRow_Outgoing).PasteSpecial xlPasteAll

'Copy Column D of Invoice
Invoice.Range("D2:D" & LastRow_Invoice).Copy
Outgoing.Range("L" & LastRow_Outgoing).PasteSpecial xlPasteAll

'Clear the data from Invoice print
Invoice.Range("B2:B" & LastRow_Invoice).ClearContents 'Removes the Value, but leaves formatting, comments, etc. alone

End Sub

这主要是你已经拥有的逻辑,但我做了一些清理工作以消除歧义并略微泛化逻辑。另外,请注意我没有保留单独的Subs。由于你没有做什么,解析逻辑没有任何好处,特别是没有重复使用的代码。

最后,我没有删除发票打印中的D列,假设单元格只保留了根据B列中的值提取新数据的公式。如果不是这样,那么看起来像你应该添加第二个ClearContents来删除D列,但鉴于你的用例含糊不清,这是不确定的。