复制一个范围并在同一张纸上向下移动一行

时间:2016-12-14 18:53:37

标签: excel vba excel-vba macros

我在excel VBA中相当新,非常感谢你对此事的任何帮助。

工作簿包括来自范围A5的数据:AZ1000(新客户信息以新行输入,但某些单元格可能为空,具体取决于案例的性质)。当用户输入新的客户信息(开始一个新行)时,我希望现有数据(范围A5:AZ1000)向下移动一行,空白行显示在范围A5:AZ:5中。我希望用户能够单击一个宏“新客户端”来实现此目的。

应该注意的是,这是一个共享工作簿,因此我不能添加添加新行的宏。

以下是我正在使用的代码:

Sub shiftdown()
' shiftdown Macro
Dim lastRow As Long
Dim lastColumn As Long
Dim rngToCopy As Range
Dim rng As Range
Set rng = ActiveSheet.Range("A1").Value
lastColumn = ActiveSheet.Cells(4, Columns.Count).End(xlToLeft).Column
lastRow = ActiveSheet.Range("A" & Rows.Count).End(xlUp).Row
If rng > 0 Then
     ActiveSheet.Range("A5" & lastRow).Select
     Selection.Copy
     PasteSelection.Offset(1, 0).PasteSpecial xlPasteValues
     'Error Object Required
End If
End Sub

2 个答案:

答案 0 :(得分:0)

Set rng = ActiveSheet.Range("A1").Value ???

如果rng是一个范围,则将其替换为:

Set rng = ActiveSheet.Range("A1")

或如果rng是变量,请替换

Dim rng As Range

通过

Dim rng As variant
rng = ActiveSheet.Range("A1").Value

另一个错误:

您将rng声明为范围,然后测试它是否为> 0

If rng > 0 Then ...

不可能

答案 1 :(得分:0)

通常情况下,如果问题不包含任何显示努力的代码,我就不会回答,但是我开始编写以下内容,而实际上确实的问题显示代码,所以我也可以提供它。它可以实现你的目标。

Sub shiftdown()
' shiftdown Macro
    Dim rng As Range
    With ActiveSheet
        If .Range("A1").Value > 0 Then

            Set rng = .Range(.Cells(5, 1), _
                             .Cells(.Cells(.Rows.Count, 1).End(xlUp).Row, _
                                    .Cells(4, .Columns.Count).End(xlToLeft).Column))
            rng.Offset(1, 0).Value = rng.Value
            .Rows(5).EntireRow.ClearContents
        End If
    End With
End Sub