2016-12-14 55 views
-1

我在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 
+0

將'PasteSelection.'更改爲'Selection'。但你應該學會避免使用選擇見:http://stackoverflow.com/questions/10714251/how-to-avoid-using-select-in-excel-vba-macros –

+0

你也可以做到這一行內IF:'ActiveSheet.Range(「A5」&lastRow).Offset(1,0).Value = ActiveSheet.Range(「A5」&lastRow).Value'並避免剪貼板。 –

+1

你爲什麼刪除你的代碼? – YowE3K

回答

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 
+0

再次感謝您的回覆。您提供的代碼是將列A中的數據向下移動一行,但是,我需要整個範圍A5:AZ1000(最後一行和列有數據)向下移動,因爲點擊了宏並且用戶可能開始輸入新的行A5中的數據:A5。這是否會爲您解決問題? – Ben

+0

@ben - 嗯 - 對於我的測試,我有第4行的列L(用於測試要複製多少列的數據),並將A5:L21向下移動到A6:L22。你的AZ4是否包含任何東西? – YowE3K

+0

它似乎現在工作得很好!我的錯誤,我不知怎的消失了。再次感謝。 – Ben

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 

另一個錯誤:

你聲明爲r NG的範圍,然後你測試它是否> 0

If rng > 0 Then ... 

這是不可能

相關問題