2014-01-26 85 views
0

所以我構建了下面的宏,幾乎可以捕捉它需要做什麼。它從一張sheet3複製數據,將數據粘貼到sheet1中。之後,它將使用在sheet2中找到的值替換變量1-7。Excel VBA:如何在For Each語句中使用更改的單元格值?

當宏執行一行時,宏工作正常。不過,我希望它循環遍歷Sheet2中的所有行,並用Sheet2中相應的行值替換變量。

希望在這裏找到答案,因爲我是VBA的新手,還沒有找到答案。

Sub Macro1() 

For Each c In Sheets("Sheet2").Range("A2:G13").Rows 

Sheets("Sheet3").Activate 
Range("A1:AH125").Select 
Application.CutCopyMode = False 
Selection.Copy 
Sheets("Sheet1").Activate 
lMaxRows = Cells(Rows.Count, "A").End(xlUp).row 
Range("A" & lMaxRows + 1).Select 
ActiveSheet.Paste 

Selection.Replace What:="Variable1", Replacement:=Sheets("Sheet2").Range("A").Value, LookAt:=xlPart, _ 
    SearchOrder:=xlByRows, MatchCase:=True, SearchFormat:=False, _ 
    ReplaceFormat:=False 
Selection.Replace What:="Variable2", Replacement:=Sheets("Sheet2").Range("B").Value, LookAt:=xlPart, _ 
    SearchOrder:=xlByRows, MatchCase:=True, SearchFormat:=False, _ 
    ReplaceFormat:=False 
Selection.Replace What:="Variable3", Replacement:=Sheets("Sheet2").Range("C").Value, LookAt:=xlPart, _ 
    SearchOrder:=xlByRows, MatchCase:=True, SearchFormat:=False, _ 
    ReplaceFormat:=False 
Selection.Replace What:="Variable4", Replacement:=Sheets("Sheet2").Range("D").Value, LookAt:=xlPart, _ 
    SearchOrder:=xlByRows, MatchCase:=True, SearchFormat:=False, _ 
    ReplaceFormat:=False 
Selection.Replace What:="Variable5", Replacement:=Sheets("Sheet2").Range("E").Value, LookAt:= _ 
    xlPart, SearchOrder:=xlByRows, MatchCase:=True, SearchFormat:=False, _ 
    ReplaceFormat:=False 
Selection.Replace What:="Variable6", Replacement:=Sheets("Sheet2").Range("F").Value, LookAt:=xlPart, _ 
    SearchOrder:=xlByRows, MatchCase:=True, SearchFormat:=False, _ 
    ReplaceFormat:=False 
Selection.Replace What:="Variable7", Replacement:=Sheets("Sheet2").Range("G").Value, LookAt:=xlPart, _ 
    SearchOrder:=xlByRows, MatchCase:=True, SearchFormat:=False, _ 
    ReplaceFormat:=False 

Next 

End Sub 
+0

要循環,並取代:

要更換Selection我已經把解決這個Replace塊的外With聲明給下面我相信你想要做什麼的代碼來自sheet2的值?你的意思是sheet3? –

+0

是的,替換值可以在sheet2中找到。Sheet3包含由宏的第一部分粘貼到Sheet1中的信息。 –

回答

1

你已經很明顯的創建了宏記錄器。在嘗試理解新語句的語法時,這是一個很好的開始。但是,宏記錄器不知道您的目標,並將每個小步驟記錄爲單個語句。在試圖圍繞它們進行循環之前,有必要整理和合並這些語句。

考慮:

Sheets("Sheet3").Activate 
Range("A1:AH125").Select 
Application.CutCopyMode = False 
Selection.Copy 
Sheets("Sheet1").Activate 
lMaxRows = Cells(Rows.Count, "A").End(xlUp).row 
Range("A" & lMaxRows + 1).Select 
ActiveSheet.Paste 

我可以替換成:

lMaxRows = Cells(Rows.Count, "A").End(xlUp).Row 
    Sheets("Sheet3").Range("A1:AH125").Copy _ 
        Destination:=Sheets("Sheet1").Range("A" & lMaxRows + 1) 

我都保留你的語句來計算lMaxRows但已經取代所有單Copy聲明中的其他語句。此語句的語法爲:

SourceRange.Copy Destination:=TopLeftCellOfDestination 

Destination:=是可選的,但它有助於使語法更清晰。

我還沒有切換工作表或選擇任何東西。這個VBA要快得多,一旦你掌握了語法,就很容易理解VBA在做什麼。

現在考慮:

Selection.Replace What:="Variable1", Replacement:=Sheets("Sheet2").Range("A").Value, LookAt:=xlPart, _ 
    SearchOrder:=xlByRows, MatchCase:=True, SearchFormat:=False, _ 
    ReplaceFormat:=False 

Selection將不得不去,因爲我沒有選擇任何東西。但真正的問題是:

Sheets("Sheet2").Range("A").Value 

這是無效的VBA和不包括對於可變c

正確的對象是:

c.Columns("A").Value 

c是例如A2:G2A13:G13的範圍。我已經拿到了範圍的A列給我A2A13。然後,我已經看到了那個單元的價值。通過所有Sheet2中值

Sub Macro1() 

For Each c In Sheets("Sheet2").Range("A2:G13").Rows 

    lMaxRows = Cells(Rows.Count, "A").End(xlUp).Row 
    Sheets("Sheet3").Range("A1:AH125").Copy _ 
        Destination:=Sheets("Sheet1").Range("A" & lMaxRows + 1) 

    With Worksheets("Sheet1") 
    With .Range(.Cells(lMaxRows + 1, "A"), .Cells(lMaxRows + 126, "AH")) 

    .Replace What:="Variable1", Replacement:=c.Columns("A").Value, LookAt:=xlPart, _ 
     SearchOrder:=xlByRows, MatchCase:=True, SearchFormat:=False, _ 
     ReplaceFormat:=False 
    .Replace What:="Variable2", Replacement:=c.Columns("B").Value, LookAt:=xlPart, _ 
     SearchOrder:=xlByRows, MatchCase:=True, SearchFormat:=False, _ 
     ReplaceFormat:=False 
    .Replace What:="Variable3", Replacement:=c.Columns("C").Value, LookAt:=xlPart, _ 
     SearchOrder:=xlByRows, MatchCase:=True, SearchFormat:=False, _ 
     ReplaceFormat:=False 
    .Replace What:="Variable4", Replacement:=c.Columns("D").Value, LookAt:=xlPart, _ 
     SearchOrder:=xlByRows, MatchCase:=True, SearchFormat:=False, _ 
     ReplaceFormat:=False 
    .Replace What:="Variable5", Replacement:=c.Columns("E").Value, LookAt:= _ 
     xlPart, SearchOrder:=xlByRows, MatchCase:=True, SearchFormat:=False, _ 
     ReplaceFormat:=False 
    .Replace What:="Variable6", Replacement:=c.Columns("F").Value, LookAt:=xlPart, _ 
     SearchOrder:=xlByRows, MatchCase:=True, SearchFormat:=False, _ 
     ReplaceFormat:=False 
    .Replace What:="Variable7", Replacement:=c.Columns("G").Value, LookAt:=xlPart, _ 
     SearchOrder:=xlByRows, MatchCase:=True, SearchFormat:=False, _ 
     ReplaceFormat:=False 

    End With 
    End With 

Next 

End Sub 
相關問題