将数据从一个工作簿复制到另一个工作簿会粘贴到随机单元格中

时间:2018-10-09 01:11:41

标签: excel vba excel-vba copy-paste

更新

我一直在研究我的代码,并且想出了第二次将数据粘贴到正确位置的方法,但是如果再次按下该按钮,数据将根本无法粘贴。这是更新的代码:

Dim kRow As Long
kRow = ws2.Range("W" & Rows.count).End(xlUp).Row

If ws2.Range("W4").Value = "" Then
ws2.Range("W4").Value = ws1.Range("A4").Value
Else:
kRow = ws2.Range("W" & Rows.count).End(xlUp).Row - 31
ws2.Range("W" & kRow).Offset(1).Value = ws1.Range("A4").Value
End If

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

If ws2.Range("V10").Value = "" Then
ws2.Range("V10").Value = ws1.Range("P2").Value
Else:
lRow = ws2.Range("V" & Rows.count).End(xlUp).Row - 31
ws2.Range("V" & lRow).Offset(1).Value = ws1.Range("P2").Value
End If

Dim mRow As Long
mRow = ws2.Range("Y" & Rows.count).End(xlUp).Row

If ws2.Range("Y10").Value = "" Then
ws2.Range("Y10").Value = ws1.Range("K37").Value
Else:
mRow = ws2.Range("Y" & Rows.count).End(xlUp).Row - 28
ws2.Range("Y" & mRow).Offset(1).Value = ws1.Range("K37").Value
End If

原始帖子


在将数据从一个工作簿复制并粘贴到另一个工作簿时,我遇到了这个烦人的问题。我试图将某些数据从用户窗体复制到保留所有数据的主工作簿中。我进行了设置,以便在用户完成表单操作后,单击宏按钮,然后打开主工作簿,将表单中的数据粘贴到主工作簿中,然后关闭。下次填写用户表单并按下宏按钮时,数据将粘贴到主工作簿的下一个可用行中。除了5条数据外,我要传输的大多数数据都有效。

我第一次按下按钮,一切都很好。但是,如果我再次按下该按钮,这五段数据将不会按预期粘贴到下一行,但会比预期的要粘贴31至28行。我一直在尝试解决此问题,但似乎找不到问题。

我将在下面发布相关代码。任何帮助将不胜感激。谢谢!

Dim kRow As Long
kRow = ws2.Range("W" & Rows.count).End(xlUp).Row

If ws2.Range("W10").Value = "" Then
ws2.Range("W10").Value = ws1.Range("A4").Value
Else: ws2.Range("W" & kRow).Offset(1).Value = ws1.Range("A4").Value
End If

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

If ws2.Range("V10").Value = "" Then
'ws2.Range("V10").Value = ws1.Range("P2").Value
Else: ws2.Range("V" & lRow).Offset(1).Value = ws1.Range("P2").Value
End If

Dim mRow As Long
mRow = ws2.Range("Y" & Rows.count).End(xlUp).Row

If ws2.Range("Y10").Value = "" Then
ws2.Range("Y10").Value = ws1.Range("K37").Value
Else: ws2.Range("Y" & mRow).Offset(1).Value = ws1.Range("K37").Value
End If

1 个答案:

答案 0 :(得分:0)

您要将偏移量设置为1,这意味着它将同时获取范围的两个维度并将其偏移那么多。

如果您希望它出现在最后一行之后,请尝试ws2.Range("Y" & mRow).Offset(1,0).Value