【问题标题】:VBA loop enhancementVBA 循环增强
【发布时间】:2018-07-10 20:22:54
【问题描述】:

从 A 列到 K 获取数据,但是如果 Column K = "TRUE" ,我只需要从 A 到 J 复制粘贴到特定的工作表,这可以用 For Each 代替吗?

'if line contains XE copy to XE sheet
raw1 = Worksheets("RAW").Cells(Rows.Count, 1).End(xlUp).Row
For i = 4 To raw1
    If Worksheets("RAW").Cells(i, 11).Value = "True" Then
    Worksheets("RAW").Rows(i).Copy
    Worksheets("XE").Activate
    raw2 = Worksheets("XE").Cells(Rows.Count, 1).End(xlUp).Row
    Worksheets("XE").Cells(raw2 + 1, 1).Select
    ActiveSheet.Paste
End If

谢谢你的帮助

【问题讨论】:

  • 当涉及到嵌套的控制结构时,糟糕的缩进很容易导致令人沮丧的难以发现的编译器错误。试试Rubberduck's Smart Indenter(免责声明:我拥有这个网站并管理它的OSS项目)。请注意,它可能不适用于您提供的代码,因为 For 块缺少其 Next 令牌。你能edit你的帖子包含整个For...Next块吗?
  • 为什么要使用For Each 循环来执行此操作?是否因为您在某处读到使用For Each 循环迭代对象集合更快(这是真的)?请注意,使用SelectActivate 可能会破坏您获得的任何收益。我在这里看到的主要问题是SelectActivate,而不是For...Next

标签: vba loops foreach


【解决方案1】:

稍微不同的做法怎么样:

Sub foo()
Dim wsRAW As Worksheet: Set wsRAW = Worksheets("RAW")
Dim wsXE As Worksheet: Set wsXE = Worksheets("XE")

raw1 = wsRAW.Cells(wsRAW.Rows.Count, 1).End(xlUp).Row

For i = 4 To raw1
    If wsRAW.Cells(i, 11).Value = "True" Then
        wsRAW.Range("A" & i & ":J" & i).Copy
        raw2 = wsXE.Cells(wsXE.Rows.Count, 1).End(xlUp).Row + 1
        wsXE.Range("A" & raw2).PasteSpecial xlPasteAll
        Application.CutCopyMode = False
    End If
Next i
End Sub

【讨论】:

  • 感谢您的帮助,我尝试这样做但是我在这行 wsXE.Cells(raw2, 1).Paste 中得到“对象不支持此属性或方法”,我试图替换它使用 wsXE.Cells(raw2 + 1, 1).Select ActiveSheet.Paste 但也不起作用 =(
  • @Juanjo,如果有帮助,您能否将我的回复标记为答案?谢谢你:)
  • 确实有很大帮助
  • @JuanjoPiñaG Muchas gracias,是的,现在已标记,谢谢! :)
猜你喜欢
  • 1970-01-01
  • 2014-02-23
  • 2011-01-25
  • 2011-01-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-14
相关资源
最近更新 更多