2012-07-05 73 views
0

我試圖將數據從一個Excel工作表複製到另一個工作表,但粘貼目標需要是一個變量。在VBA-Excel中粘貼變量位置中的數據

本質上,我想要做的是打開兩個Excel表。在第一片材,將有一些字符串,其座標我保存這樣的:

sCurrentAddress = Selection.Address(True, True, xlA1, True)

基於已經填充表2的數據,一種算法整齊地找到所期望的粘貼位置和如下保存這些座標:

sDestinationAddress = Selection.Address(True, True, xlA1, True)

然後,我喜歡做的是從第一頁中的信息粘貼到第二如下:

Selection.Copy (sDestinationAddress) 但我收到錯誤1004:運行時錯誤:選擇範圍類的方法失敗。

現在,我工作的第一個值正好是A4,而當我將鼠標懸停我的鼠標移到「sDestinationAddress」,它表明我保存在sDestinationAddress值 '[exampleFile.xlsx]Sheet 1'!$A$4

宏失敗,除非我插上這樣的實際值:

'Selection.Copy (Worksheets(1).Range("A4"))

什麼我需要做的,用我的sDestinationAddress作爲Selection.Copy的說法?


(對不起這個漫長而仍然口齒不清,昨天是字面上我第一次看的Visual Basic。)

關於算法: 我有144個不同的頁眉標記中的信息6排以下。例如,我將數據從一個標題爲:Inventory_S1_1的列移動到一個新的電子表格。在這張表上的'S1_1'意味着另一張表:S =鑽石,1 =黑色,_1 =播放器1.所以我的算法找到一個它還沒有處理的頭(假設這裏是Inventory_S1_1是它沒有處理的第一個頭)處理),複製標題下方的列,在新電子表格中找到與玩家1的黑鑽石相對應的位置,然後進行粘貼。由於模板是手工製作的,因此粘貼算法可以正常工作,但是由於搜索潛在的混亂數據,搜索算法會迷失方向尋找標題。

問題是返回到工作表上的原始數據。
懸停我的鼠標,我稱之爲設置sCurrentAddress = Selection表明,我已經貼了sDestinationAddress = 0
sCurrentAddress= Inventory_S1_2一旦我轉移到第二個標題,然後後我相當肯定這是完全有問題的線路:

Set rCurrentRange = .Find(What:=sCurrentAddress, LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext) 我遵循

Application.Goto rCurrentRange, True ActiveCell.Select Selection.Offset(-1, 1).Select Set sCurrentAddress = Selection

這是這條線,我正在尋找下一個報頭。當我嘗試使用精確的座標時,這個.Find似乎可以工作,但現在它找到了0(sDestinationAddress)的第一個實例,這是複製材料中的第一個值。由於它總是複製0,然後查找第一個0,它從不查找下一個標題。

我意識到Range對象具有.Address屬性,但我不知道在這種情況下它是否會有所幫助。

回答

1

您只需直接使用,而不是使用地址範圍

Dim rngSrc as Range, rngDest as range 

Set rngSrc = Selection 
'do your destination-finding thing 
Set rngDest = Selection 

rngSrc.Copy rngDest 'no need for parentheses here 

編輯

你很少需要選擇的範圍與他們合作,並存儲在一個變量的實際範圍對象幾乎總是比嘗試使用範圍地址更好。

如果您需要保留特定單元格或範圍的座標,那麼將其存儲在範圍變量中是最簡單的方法。

有一點需要記住的是,範圍對象的默認屬性是「值」 - 這可以解釋爲什麼當單步執行代碼時將光標懸停在範圍變量上時會看到範圍的值 - 這是Value被展示。

如果你只是複製單元格值從一個地方到另一個地方,那麼你甚至不需要使用.Copy如果兩個範圍是相同的尺寸:

rngDestination.Value = rngSource.Value 
+0

這確實完成了任務,但現在我失去了「我的地方」。該變量似乎被替換爲單元格的值,並且座標不存在。我需要從Sheet1複製下一列,並將其放在Sheet2的不同位置。也許我也可以爲地址製作一個變量。 – emmagras 2012-07-05 20:46:42

+0

下一欄是'rngSrc.Offset(0,1)' – 2012-07-05 21:34:52

+0

這是一個怎樣的問題?你正試圖將一個單元格的內容複製到另一個單元格,不是嗎? – 2012-07-05 21:44:50