2013-10-17 181 views
0

我當前正在嘗試使用一個按鈕來複制範圍內的所有值,以將這些值粘貼到另一個表格的範圍內。引用另一個表格中的一系列單元格

Excel中給了我這個代碼的第二行的錯誤:

Sub COPYVALUES() 
Range("Base_Copy!F15:Base_Copy!AK46").Select 
Selection.Copy 

Range("F15:AK46").Select 
ActiveSheet.Paste 
End Sub 

我的兩片是Base_Copy其中的值,一個我要粘貼到Final_Copy

回答

0

有3種不同的方法來引用不同的紙張。下面是從這裏被盜:http://www.ozgrid.com/VBA/excel-vba-sheet-names.htm

表標籤名稱

如果你曾經記錄在Excel中的宏引用特定工作表在工作簿中,你會知道這些代碼只會繼續如果紙張工作名稱保持不變。例如,代碼如;表格(「預算」)。如果重新命名預算表,則選擇將不再起作用。這是因爲宏記錄器基於Sheets選項卡名稱生成此類代碼,這是我們在Excel中看到的名稱。如果它讓你感覺好一些,許多VBA編碼器也會使用兩個更好的方式來使用Sheet選項卡名稱,因爲他們不知道更好。

索引號

A頁索引號由其在工作簿中的位置確定。最左邊的工作表總是有一個索引號1,右邊的下一個將是2,依此類推。 Excel VBA允許我們使用它的索引號來指定任何工作表,但不幸的是,當我們錄製一個宏時,這個方法不會被Excel使用。它使用表格標籤名稱,如;表格(「預算」)。選擇如果這張表是從左邊第三個,我們可以使用:表格(3)。選擇。這通常比使用工作表選項名稱更好,但仍有潛在的問題。我的意思是,如果我們添加,刪除或移動工作表,工作簿中的工作表位置可能會發生變化。

表代碼名稱

這是精明的VBA程序員使用的方法。工作簿中的每張工作表都有一個唯一的CodeName,即使該工作表被移動,重命名或添加了其他工作表,也不會更改。每個片代號只能通過進入Visual Basic編輯器(工具>宏> Visual Basic編輯器ALT + F11),然後顯示所述項目瀏覽器(視圖>項目瀏覽器CTL + R)

enter image description here 在屏幕中可以看出上面的拍攝,標籤名稱爲預算的工作表的CodeName是Sheet3。在工程瀏覽器中查看時,工作表CodeName始終是不在括號內的名稱。我們可以在工作簿中使用VBA代碼在工作簿中引用此工作表:選擇Sheet或Sheet選擇表格(「預算」)。選擇或表格(3)。選擇

如果您的工作簿已滿VBA代碼,或書面的,不使用CodeName,您可以通過在VBE(Visual Basic編輯器)中編輯>替換來更改它在項目級別(工作簿中所有模塊中的所有代碼)。 一個拉回

唯一倍不能使用一個片代號是當引用一個片,其是在不同的工作簿的代碼駐留的一個。

通過以上信息您的代碼現在變爲:

Sub COPYVALUES() 
    Sheets("Base_Copy").Range("F15:AK46").Copy 
    ' OR Sheets(2).Range("F15:AK46").Select 
    ' OR Sheet2.Range("F15:AK46").Select 

    Sheets("Final_Copy").Range("F15:AK46").Paste 
    Application.CutCopyMode = False  
End Sub 

現在,在一個側面說明:您沒有使用複製/粘貼到移動數據...

嘗試以下單行代碼:

Sub COPYVALUES() 
    Sheets("Final_Copy").Range("F15:AK46").Value = Sheets("Base_Copy").Range("F15:AK46").Value 
End Sub 
+0

在您的頂級解決方案中,您正在同一工作表上選擇範圍。這會將數據粘貼到您複製的相同單元格。你應該更新到'Worksheets(「Final_Copy」)。Range(「F15:AK46」)。選擇'。 – Harrison

+0

@哈里森我更新了腳本,但它更像是一個例子......我想我們都同意它應該是SheetCodeName.Range(x).Value = SheetCodeName.Range(x).Value –

+0

Excel 2007給了我一個錯誤與'Sheets(「Final_Copy」)。範圍(「F15:AK46」)。Paste。我正在使用你的第一個代碼,我想添加到一個按鈕的動作,所以它工作時,我單擊工作表上的按鈕編輯:您的第二個代碼完美的作品,但我想知道如何鏈接到一個按鈕,在先進的感謝 – fmonper1

0

使用方法:

Sheets("Base_Copy").Range("F15:AK46") 

你的想法更多的是單元格內部的類型,在工作表中是有效的,但VBA使它更簡單一些。

+0

'子COPYVALUES() 表( 「Base_Copy」)範圍。( 「F15:AK46」)選擇 Selection.Copy ř ange(「F15:AK46」)。選擇 ActiveSheet.Paste End Sub'它仍然不起作用 – fmonper1

0

就這麼簡單。您必須在Range之前的Worksheets對象中指定您的Worksheet

Sub COPYVALUES() 
    Worksheets("Final_Copy").Range("F15:AK46").Value = Worksheets("Base_Copy").Range("F15:AK46").Value 
End Sub 

example in Range Object (Excel)

這樣的事情,你可能要錄製宏,看它是怎麼寫的語法,然後修改您的需求。

相關問題