2012-07-09 198 views
0

首先,我從未使用過VBA(或VB),因此請記住這一點。我正試圖將行復制到我的工作簿中的另一個工作表。因此,無論何時第2行中的任何更改將發生在sheet1中,該行都應該​​複製到sheet2上的第2行中。如果在Sheet1中修改了第3行,則應在Sheet2上修改第5行。我希望在sheet2上的每行之間有一個空行。我將嘗試使用VBA創建一個新表以放置在此空行內。無論如何,我在我的Selection.Paste行發生錯誤。我對VBA的知識(一個小時的價值)非常有限,所以我可能完全不瞭解我想要做的事情。使用VBA將行復制到Excel中的另一個表格

Private Sub Worksheet_Change(ByVal Target As Range) 
'Do not worry about column headers 
    If Target.Row = 1 Then Exit Sub 

    'On Error GoTo ErrHandler 
    Application.EnableEvents = False 'This might be necessary? 

    Sheet1.Rows(Target.Row).Select 
    Selection.Copy 
    Sheet1.Rows(Target.Row).Copy 

    If Target.Row = 2 Then 
    Sheet2.Rows(Target.Row).Select 
    Selection.Paste 
    Else 
    Sheet2.Select 
    Sheet2.Rows(Target.Row + Target.Row - 1).Select 
    Selection.Paste 
    End If 

ErrHandler: 
    Application.EnableEvents = True 'This might be necessary? 
End Sub 

編輯:改變Selection.PasteActiveSheet.Paste之後,它現在的工作。

+0

什麼錯誤,你得到的'Selection.Paste'線? – LittleBobbyTables 2012-07-09 17:55:44

+0

啊,我現在開始工作了--_-。我將'Selection.Paste'改爲'ActiveSheet.Paste' – Justin 2012-07-09 17:57:38

+0

@Justin,如果你有它的工作,請設置你自己的問題來回答。 – danielpiestrak 2012-07-09 18:50:49

回答

2

編輯:添加處理多區域選擇

Private Sub Worksheet_Change(ByVal Target As Range) 
    Dim a As Range, rw As Range 
    For Each a In Selection.Areas 
     For Each rw In a.Rows 
      If rw.Row >= 2 Then 
       rw.EntireRow.Copy Sheet2.Cells(2 + (rw.Row - 2) * 3, 1) 
      End If 
     Next rw 
    Next a 
End Sub 
+0

確實比我的實現更緊湊:) – Justin 2012-07-09 19:12:27

+0

注意這隻能處理一個連續的區域 - 如果用戶可能更新多個不連續的單元格,那麼您需要遍歷'Selection.Areas'中的每個範圍,然後遍歷每個區域中的行。 – 2012-07-09 19:14:44

+0

+ 1爲更好的答案,這不僅解決了當前的問題,而且還幫助提問者在他最初試圖達到的目標:) – 2012-07-09 19:14:46

相關問題