是我的逻辑还是我写的语法错误? (如果还有其他语法)

时间:2019-01-21 15:52:16

标签: excel vba

我想使用循环(for)和条件(if elseif else)将数据从一个工作表复制到另一工作表。条件:

  • 如果wsCopy中的E10列=空,则代码将循环...
  • 具有以下条件:如果wsCopy中的B10列= wsDestI中的Gs列中的值
  • 然后将值从Gs wsDestI列复制到M列wsDest
  • 否则,如果B10列中的值wsCopy =空
  • 然后做条件。
  • 否则,代码将从wsCopy复制到wsDest

但是Else子句中的代码会触发错误:

  

运行时错误'1004'

我试图激活工作表,但仍然卡住了。谁能解释为什么我的源代码不起作用?是我的逻辑还是语法不正确?

 For i = 1 To lCopyLastRow
    If IsEmpty(wsCopy.Range("E" & 9 + i).Value) = True Then
        For s = 4 To b
            If (wsCopy.Range("B" & 9 + i).Value = wsDestI.Range("G" & s).Value) Then
                wsDestI.Range("C" & s).copy wsDest.Range("M").End(xlUp).Offset(1, 0)
                wsDestI.Range("G" & s).copy wsDest.Range("S").End(xlUp).Offset(1, 0)
                wsDestI.Range("M" & s).copy wsDest.Range("P").End(xlUp).Offset(1, 0)
            End If
        Next s
    ElseIf IsEmpty(wsCopy.Range("B" & 9 + i).Value) = True Then
            wsCopy.Range("E" & i + 9).copy wsDest.Range("M").End(xlUp).Offset(1, 0)
            wsCopy.Range("K" & 9 + i).copy wsDest.Range("P").End(xlUp).Offset(1, 0)
            wsDest.Range("S").End(xlUp).Offset(1, 0) = "0"
    Else:
    wsCopy.Activate
    wsDest.Activate
    'this below line is error and I don't know why its error
    wsCopy.Range("E" & 9 + i).copy wsDest.Range("M").End(xlUp).Offset(1, 0)
    wsCopy.Range("B" & 9 + i).copy wsDest.Range("S").End(xlUp).Offset(1, 0)
    wsCopy.Range("K" & 9 + i).copy wsDest.Range("P").End(xlUp).Offset(1, 0)
    End If

Next i

1 个答案:

答案 0 :(得分:4)

实际上,在wsDest.Range的每一行都会出现此错误,因为您没有为.End(xlUp)定义行号,因此错误为1004

如果您要查找指定列的最后一行,请尝试在要指定的范围内添加& Rows.Count

wsDest.Range("M" & Rows.Count).End(xlUp).Offset(1, 0)