【问题标题】:Excel VBA copying rows in For loopExcel VBA在For循环中复制行
【发布时间】:2020-11-18 15:35:27
【问题描述】:

感谢您的帮助。

我正在尝试将一些行复制到新工作表中,稍后将添加一些条件,但我想把基础知识搞好。

我想将 wsCurrent 工作表上的第 4 行复制到 wsReview 工作表上的第 1 行,然后将第 5-200 行也复制到该工作表上。最终,我将根据条件跳过 for 循环,因此只会复制某些行。

复制第 4 行的第一部分工作正常,但是 for 循环会抛出错误,并且没有按照我的预期执行,例如,它将“j”作为列引用,而不是值,如果我尝试使用更复杂的列引用,然后它不会编译。

Sub exportForReview()
Dim wbCurrent As Workbook
Set wbCurrent = ThisWorkbook
Dim wsReview As Worksheet
Set wsReview = wbCurrent.Worksheets("ExportForReview")
Dim wsCurrent As Worksheet
Set wsCurrent = wbCurrent.Worksheets("Master")
Dim j As Integer
j = 2

wsCurrent.Range("4:4").Copy
wsReview.Range("1:1").PasteSpecial Paste:=xlPasteFormats
wsReview.Range("1:1").PasteSpecial Paste:=xlPasteValues

For i = 5 To 200
    wsCurrent.Cells(i).EntireRow.Copy
    wsReview.Cells(j).EntireRow.PasteSpecial Paste:=xlPasteFormats
    wsReview.Cells(j).EntireRow.PasteSpecial Paste:=xlPasteValues
    j = j + 1

Next i    
End Sub

我也试过

    For i = 5 To 200
    wsCurrent.Range("i:i").Copy
    wsReview.Range("j:j").EntireRow.PasteSpecial Paste:=xlPasteFormats
    wsReview.Range("j:j").PasteSpecial Paste:=xlPasteValues
    j = j + 1

Next i

尝试在代码中使用变量来选择和复制行似乎有问题,有人可以建议吗?

【问题讨论】:

  • wsReview.Cells(j,1).EntireRow.PasteSpecial 怎么样?你真的需要复制整行吗?为什么不一口气完成呢?
  • 我明白你的意思,我需要复制表格的整行,而不是工作表的整行,所以是的,我将使用下面建议的范围来解决该反馈观点。此外,我将通过检查特定行中是否存在某些数据进行迭代,如果没有,则跳过而不复制它。正如我所提到的,这只是基本的一点,我将添加一些条件以便跳过,希望这很清楚,非常感谢你回复我并给我建议。

标签: excel vba


【解决方案1】:

你很亲密:)

改变这部分:

For i = 5 To 200
    wsCurrent.Cells(i).EntireRow.Copy
    wsReview.Cells(j).EntireRow.PasteSpecial Paste:=xlPasteFormats
    wsReview.Cells(j).EntireRow.PasteSpecial Paste:=xlPasteValues
    j = j + 1
Next i    

到这里:

For i = 5 To 200
    wsCurrent.Rows(i).Copy
    wsReview.Rows(j).PasteSpecial Paste:=xlPasteFormats
    wsReview.Rows(j).EntireRow.PasteSpecial Paste:=xlPasteValues
    j = j + 1
Next i

友情提示,是要考虑定义范围! 示例:

wsCurrent.Range(wsCurrent.Cells(i, "A"), wsCurrent.Cells(i, "DA")).Copy 
wsReview.Range(wsReview.Cells(i, "A"), wsReview.Cells(i, "DA")).PasteSpecial Paste:=xlPasteFormats

您要复制和粘贴的大量数据在大型工作簿中会大大降低性能。运行代码时,您可能会在短时间内“无响应”。

Cells(row, column) 需要一个行和列值,而rows()columns() 只需要一个值:)

【讨论】:

  • 您可以将Cells 与单个参数一起使用,但例如cells(3).address 将返回 C1 而不是 A3。
  • 感谢工作,感谢您定义范围,是的,处理代码确实需要一段时间。很高兴我很接近,总是觉得我会因为在这里发布一个明显的问题而被告知!
猜你喜欢
  • 2017-08-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-13
相关资源
最近更新 更多