将数据从一个工作簿复制并粘贴到另一个工作簿,导致随机单元格获取数据/空行而不会粘贴数据

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了将数据从一个工作簿复制并粘贴到另一个工作簿,导致随机单元格获取数据/空行而不会粘贴数据相关的知识,希望对你有一定的参考价值。

UPDATE

我的问题的一半现在已经解决,但我仍然遇到问题。我粘贴到新工作簿的大部分数据都运行良好。如果多次按下该按钮,数据将粘贴到下一个可用行。但是,特别是三行不起作用。第一次按下宏按钮时,数据将粘贴在正确的位置,但数据将从相应的行向下粘贴31行。我对这完全感到困惑。这部分工作表中的单元格是否存在某种格式问题?任何帮助,将不胜感激。

原始问题

让我解释一下发生了什么。我试图使其成为一旦在一个工作簿中填写表单,用户按下一个按钮,该表单中的数据被复制并粘贴到另一个工作簿,该工作簿就像所有数据的主文件。表单中的数据应该粘贴在第二个工作簿的特定列中。

到目前为止,我已经成功地创建了原始但工作正常的代码,但现在我遇到了一些问题。当我按下第一个工作簿上的按钮时,所有内容都按预期粘贴,但是一个单元格(特别是G163)将粘贴数据。我检查过,代码中没有任何内容专门用于将宏粘贴到该单元格。此外,如果我再次按下按钮,某些单元格将不会粘贴到下一个可用的空单元格中,而是将其向下推到列中并粘贴到与预期不同的单元格中。

我很高兴excel vba所以任何帮助将不胜感激。我将在下面发布我的代码和一些奇怪粘贴的图片。

Sub Button1099_Click()

If IsEmpty(Workbooks("2018Monthly.xls").Worksheets("7").Range("A42")) = True Then
Workbooks("Formtest.xlsm").Worksheets("Form").Range("A4").Copy
Workbooks("2018Monthly.xls").Worksheets("7").Range("A42").PasteSpecial Paste:=xlPasteValuesAndNumberFormats

Else
Workbooks("Formtest.xlsm").Worksheets("Form").Range("A4").Copy
Range("A" & Rows.count).End(xlUp).Offset(1).Select
Workbooks("2018Monthly.xls").Worksheets("7").Range("A" & Rows.count).End(xlUp).Offset(1).PasteSpecial Paste:=xlPasteValuesAndNumberFormats
End If

If IsEmpty(Workbooks("2018Monthly.xls").Worksheets("7").Range("B42")) = True Then
Workbooks("Formtest.xlsm").Worksheets("Form").Range("P2").Copy
Workbooks("2018Monthly.xls").Worksheets("7").Range("B42").PasteSpecial Paste:=xlPasteValuesAndNumberFormats

Else
Workbooks("Formtest.xlsm").Worksheets("Form").Range("P2").Copy
Range("B" & Rows.count).End(xlUp).Offset(1).Select
Workbooks("2018Monthly.xls").Worksheets("7").Range("B" & Rows.count).End(xlUp).Offset(1).PasteSpecial Paste:=xlPasteValuesAndNumberFormats
End If

If IsEmpty(Workbooks("2018Monthly.xls").Worksheets("7").Range("C42")) = True Then
Workbooks("Formtest.xlsm").Worksheets("Form").Range("P3").Copy
Workbooks("2018Monthly.xls").Worksheets("7").Range("C42").PasteSpecial Paste:=xlPasteValuesAndNumberFormats

Else
Workbooks("Formtest.xlsm").Worksheets("Form").Range("P3").Copy
Range("C" & Rows.count).End(xlUp).Offset(1).Select
Workbooks("2018Monthly.xls").Worksheets("7").Range("C" & Rows.count).End(xlUp).Offset(1).PasteSpecial Paste:=xlPasteValuesAndNumberFormats
End If

If IsEmpty(Workbooks("2018Monthly.xls").Worksheets("7").Range("D42")) = True Then
Workbooks("Formtest.xlsm").Worksheets("Form").Range("C10").Copy
Workbooks("2018Monthly.xls").Worksheets("7").Range("D42").PasteSpecial Paste:=xlPasteValuesAndNumberFormats

Else
Workbooks("Formtest.xlsm").Worksheets("Form").Range("C10").Copy
Range("D" & Rows.count).End(xlUp).Offset(1).Select
Workbooks("2018Monthly.xls").Worksheets("7").Range("D" & Rows.count).End(xlUp).Offset(1).PasteSpecial Paste:=xlPasteValuesAndNumberFormats
End If

If IsEmpty(Workbooks("2018Monthly.xls").Worksheets("7").Range("E42")) = True Then
Workbooks("Formtest.xlsm").Worksheets("Form").Range("C9").Copy
Workbooks("2018Monthly.xls").Worksheets("7").Range("E42").PasteSpecial Paste:=xlPasteValuesAndNumberFormats

Else
Workbooks("Formtest.xlsm").Worksheets("Form").Range("C9").Copy
Range("E" & Rows.count).End(xlUp).Offset(1).Select
Workbooks("2018Monthly.xls").Worksheets("7").Range("E" & Rows.count).End(xlUp).Offset(1).PasteSpecial Paste:=xlPasteValuesAndNumberFormats
End If

If IsEmpty(Workbooks("2018Monthly.xls").Worksheets("7").Range("F42")) = True Then
Workbooks("Formtest.xlsm").Worksheets("Form").Range("C11").Copy
Workbooks("2018Monthly.xls").Worksheets("7").Range("F42").PasteSpecial Paste:=xlPasteValuesAndNumberFormats

Else
Workbooks("Formtest.xlsm").Worksheets("Form").Range("C11").Copy
Range("F" & Rows.count).End(xlUp).Offset(1).Select
Workbooks("2018Monthly.xls").Worksheets("7").Range("F" & Rows.count).End(xlUp).Offset(1).PasteSpecial Paste:=xlPasteValuesAndNumberFormats
End If

If IsEmpty(Workbooks("2018Monthly.xls").Worksheets("7").Range("G42")) = True Then
Workbooks("Formtest.xlsm").Worksheets("Form").Range("B17").Copy
Workbooks("2018Monthly.xls").Worksheets("7").Range("G42").PasteSpecial Paste:=xlPasteValuesAndNumberFormats

Else
Workbooks("Formtest.xlsm").Worksheets("Form").Range("B17").Copy
Range("G" & Rows.count).End(xlUp).Offset(1).Select
Workbooks("2018Monthly.xls").Worksheets("7").Range("G" & Rows.count).End(xlUp).Offset(1).PasteSpecial Paste:=xlPasteValuesAndNumberFormats
End If

If IsEmpty(Workbooks("2018Monthly.xls").Worksheets("7").Range("H42")) = True Then
Workbooks("Formtest.xlsm").Worksheets("Form").Range("C12").Copy
Workbooks("2018Monthly.xls").Worksheets("7").Range("H42").PasteSpecial Paste:=xlPasteValuesAndNumberFormats

Else
Workbooks("Formtest.xlsm").Worksheets("Form").Range("C12").Copy
Range("H" & Rows.count).End(xlUp).Offset(1).Select
Workbooks("2018Monthly.xls").Worksheets("7").Range("H" & Rows.count).End(xlUp).Offset(1).PasteSpecial Paste:=xlPasteValuesAndNumberFormats
End If

If IsEmpty(Workbooks("2018Monthly.xls").Worksheets("7").Range("I42")) = True Then
Workbooks("Formtest.xlsm").Worksheets("Form").Range("J10").Copy
Workbooks("2018Monthly.xls").Worksheets("7").Range("I42").PasteSpecial Paste:=xlPasteValuesAndNumberFormats

Else
Workbooks("Formtest.xlsm").Worksheets("Form").Range("J10").Copy
Range("I" & Rows.count).End(xlUp).Offset(1).Select
Workbooks("2018Monthly.xls").Worksheets("7").Range("I" & Rows.count).End(xlUp).Offset(1).PasteSpecial Paste:=xlPasteValuesAndNumberFormats
End If

If IsEmpty(Workbooks("2018Monthly.xls").Worksheets("7").Range("J42")) = True Then
Workbooks("Formtest.xlsm").Worksheets("Form").Range("J11").Copy
Workbooks("2018Monthly.xls").Worksheets("7").Range("J42").PasteSpecial Paste:=xlPasteValuesAndNumberFormats

Else
Workbooks("Formtest.xlsm").Worksheets("Form").Range("J11").Copy
Range("J" & Rows.count).End(xlUp).Offset(1).Select
Workbooks("2018Monthly.xls").Worksheets("7").Range("J" & Rows.count).End(xlUp).Offset(1).PasteSpecial Paste:=xlPasteValuesAndNumberFormats
End If

 Application.CutCopyMode = False
 Workbooks("2018Monthly.xls").Save

End Sub

这是单击按钮一次后第二个工作簿的样子:

Pasted workbook after one button press

Pasted workbook after one button press

如果再次按下按钮,这就是工作簿的样子:

Pasted workbook after two button presses

Pasted workbook after two button presses

答案

由于您要将单元格复制到单元格,请尝试此操作;

Dim ws1 As Worksheet
Dim ws2 As Worksheet

Set ws1 = Workbooks("Formtest.xlsm").Worksheets("Form")
Set ws2 = Workbooks("2018Monthly.xls").Worksheets("7")

Dim lRow As Long
lRow = ws2.Range("A" & Rows.Count).End(xlUp).Row

If ws2.Range("A42").Value = "" Then
    ws2.Range("A42").Value = ws1.Range("A4").Value
Else: ws2.Range("A" & lRow).Offset(1).Value = ws1.Range("A4").Value
End If

以上是关于将数据从一个工作簿复制并粘贴到另一个工作簿,导致随机单元格获取数据/空行而不会粘贴数据的主要内容,如果未能解决你的问题,请参考以下文章

Excel VBA 宏将复制一系列单元格并粘贴到另一个工作簿中

如何将文件夹中的多个源工作簿中的数据复制到另一个工作簿,然后另存为新工作簿

VBA:如果工作簿中的工作表名称等于从用户窗体中选择的组合框值,则复制该工作表并将其粘贴到另一个工作簿中

打开用户指定的 Excel 工作簿并将数据范围复制到另一个工作簿

在同一活动工作簿中从一个工作表复制和粘贴到另一个工作表时出现错误 1004

Excel工作表:将数据从一个工作簿复制到另一个工作簿