内部错误424如果使用偏移

时间:2016-12-24 11:58:43

标签: excel vba excel-vba

我是Visual Basic的初学者,并试图将具有大量随机空白单元格的某些列的所有值放在另一个工作表中,而在另一个没有空白单元格的列中连续。我使用命令 FormulaR1C1 ,而不是复制值(不知道这是否是这种方法的智能方法)。

调试时,会弹出一条消息,说明当我尝试将x1向下移动一行时出现错误424,在第二个 Else 中。

代码如下:

Sub Copiar() ' ' Copiar Macro '

Dim x1, y1 As Object
Set x1 = Sheets("Hoja1").Cells(1, "C")
Set y1 = Sheets("Hoja2").Cells(3, "D")

contador = 0
 10
If x1 = "" Then
    x1 = x1.Offset(1, 0)
    contador = contador + 1
    If contador < 20 Then
        GoTo 10
        Else: GoTo 20
    End If
Else:
    y1.FormulaR1C1 = x1
    x1 = x1.Offset(1, 0)
    y1 = y1.Offset(1, 0)
    contador = contador + 1
    GoTo 10 End If

  20

 End Sub

任何帮助将不胜感激。谢谢!!!

1 个答案:

答案 0 :(得分:0)

除了我在上面的评论中所写的内容之外,还有另一种方法可以考虑复制非空白单元格:

Option Explicit
Sub vbaCopy()
    Dim x1 As Range, y1 As Range

With Worksheets("sheet1")
    Set x1 = .Range(.Cells(1, "C"), .Cells(.Rows.Count, "C").End(xlUp))
End With

Set y1 = Worksheets("sheet2").Cells(3, "D")
y1.EntireColumn.Clear

x1.SpecialCells(xlCellTypeConstants).Copy Destination:=y1

'If you have both constants and formulas, try:

'With x1
'  Union(.SpecialCells(xlCellTypeConstants), .SpecialCells(xlCellTypeFormulas)).Copy Destination:=y1
'End With

End Sub

您使用的SpecialCells个参数究竟取决于您是复制公式,常量还是两者。目标范围内的结果只是值;公式不会被复制。