2011-09-16 34 views
1

我發現了一個幾乎可以滿足我需要的宏。它複製一個名爲「Totals」的行並將行粘貼到一個新表中。行「總計」有公式,我需要值。如何調整宏以正確工作?複製一行的宏

下面是宏代碼:

Sub RowCopy2() 
Dim rngFind As Range 

With Worksheets("Hol. Stats").UsedRange 
Set rngFind = .Find("Totals", _ 
      LookIn:=xlValues, _ 
      LookAt:=xlWhole, _ 
      SearchOrder:=xlByRows, _ 
      SearchDirection:=xlNext, _ 
      MatchCase:=True) 
End With 
rngFind.EntireRow.Copy _ 
Destination:=Worksheets("Sheet2").Range("A1") 
End Sub 

回答

4

使用

Sub RowCopy2() Dim rngFind As Range 
    With Worksheets("Hol. Stats").UsedRange 
    Set rngFind = .Find("Totals", _ 
     LookIn:=xlValues, _ 
     LookAt:=xlWhole, _ 
     SearchOrder:=xlByRows, _ 
     SearchDirection:=xlNext, _ 
     MatchCase:=True) 
    End With 

    rngFind.EntireRow.Copy 
    Sheets("Sheet2").Range("A1").PasteSpecial xlPasteValues 
End Sub 
+0

謝謝 - 這很好。 –

+0

@ J.米勒:你可以接受一個答案,這將表明你的問題得到了回答。在答案旁邊應該有一個複選標記供您點擊。 – adamleerich

+0

我點擊了選中標記。再次感謝你。 –

1

這是值得利用的範圍對象來測試,如果搜索字符串居然發現,然後你可以採取替代措施,提供信息給用戶等

而fwiw你可以繞過複製和粘貼通過設置目標值爲源的值。

Sub RowCopy2() 
Dim rngFind As Range 
Set rngFind = Worksheets("Hol. Stats").UsedRange.Find("Totals", LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=True) 
If Not rngFind Is Nothing Then Worksheets("Sheet2").Rows(1).Value = rngFind.EntireRow.Value 
End Sub 
0

使用行範圍名稱查找行「彙總」會更快。然後你可以在兩行中做...

Rows(Range("Totals").Row).Copy 
Sheets("Sheet2").Range("A1").PasteSpecial xlPasteValues 

這就是在Visual Basic中使用範圍名稱的原因。其他屬性的範圍涵蓋在此文本Excel help video

+0

Ed,#1爲什麼發現這個「更快」 - 如果範圍存在,兩者都是兩行,兩者都將立即執行#2有學術證據表明範圍名稱會導致財務模型中出現更多錯誤,請參閱http:// arxiv.org/ftp/arxiv/papers/1009/1009.2765.pdf – brettdj

+0

我的意思是輸入/不需要任何變量可以在VBA中定義 –

+0

(編輯時間過長!)快速輸入/更容易請記住,不要記錄宏或執行網絡搜索/不需要在VBA中定義任何變量 就導致錯誤的範圍名稱而言......所研究的問題與公式有關...... VBA更進一步從普通用戶中刪除,假設變成「如果它停止正常工作,沒有人會注意到,即使他們這樣做,也不會得到糾正」。因此,您必須選擇一種方法來引用電子表格位置,這些位置最不會受到用戶移動行/列等的嚴重影響。 –