2012-10-04 359 views
0

我想寫一些代碼將一個特定的命名區域單元格的值複製到另一個命名區域中。將動態範圍文本複製到另一個範圍

的代碼如下:

If Not Intersect(Target, Target.Worksheet.Range("RaceDrop")) Is Nothing Then 
    If Range("RaceDrop") = Range("Races").Cells(1, 1) And Range("ClassDrop") = Range("Classes").Cells(1, 1) Or Range("Races").Cells(1, 1) And Range("ClassDrop") = Range("Classes").Cells(1, 2) Then 
     Range("OriginDrop") = Range("Origins").Cells(1, 1) 

像 「範圍(」 X 「)=範圍(」 Y 「)每個語句給出了一個錯誤,IF語句中的細胞(X,X)」。並在結果。但是,如果我將它定義爲一個靜態語句,例如Range(「Races」)的「Human」。Cells(1,1)。雖然此解決方法有效,但我希望使所有引用都是動態的,以便更改或移動數據值所需的時間更少。單元格(1,1).Text例如,但它仍然不起作用。還有另外一種方法可以解決這個問題嗎?

編輯:我還要補充一點,我得到的錯誤是「對象的方法‘範圍’「_Worksheet失敗」

補充:

與單元格(引用)是因爲它們指向實際範圍,而不僅僅是一個單元格。有些引用大表,所以有時它會是Range(「Table」)。單元格(5,3),它並不總是指向1,1。我不確定用另一種方法引用特定的單元格在一張桌子上。

例如,一個比特i想要做的是: 範圍( 「OriginDrop」)=範圍( 「起源」)細胞(4,1)

+0

你'If'聲明的這部分沒有任何意義:'...或區域( 「競賽」)單元(1,1)。 ..'只測試一個單元格而不與其他任何東西進行比較只會在該單元格保持一個布爾值時才起作用 - 也就是True或False – barrowc

+0

它確實有意義。 IF X和A或X和B.代碼繼續測試IF Y和A或Y和B,還有X和C等等。所以如果它不測試兩個值,那麼它會在錯誤的部分結束。如果我只測試X,則會導致C被跳過,因爲它稍後會被檢查並且會有不同的結果。例如,當我第一次做這個時,我只做了IF X和A或B,IF Y和A或B,它總是會導致第一行,因爲它只是「或B」,所以Y和B永遠不會用過的。整個支票必須在那裏。相信我,這很有道理。 – user1558773

+0

下面答案中的更新代碼將該部分更改爲'...或Range(「Races」)= Sheets(「Data」)。Range(「Races」)。Cells(1,1)and ...'Not確定如果你的問題有一個錯誤,但你沒有比較'Range(「Races」)。Cells(1,1)'在你的問題中提供的代碼中的任何內容 – barrowc

回答

0

兩件事情:

  • 使用Range("RaceDrop").Value來指示單元格的實際值。大多數情況下,Range("RaceDrop") =都可以工作,但最好總是明確地說.Value
  • 我不完全確定你想要用Cells(1,1)代碼做什麼,但是如果你想查找左上角的值的範圍內,你可以試試下面的代碼

更換

Range("Races").Cells(1, 1) 

Cells(Range("Races").row, Range("Races").column).Value 

如果你指的是細胞被命名的只有一個CellRanges你應該能夠使用的只是

Range("Races").Value 

,而不是上面。

+0

Cells()的引用是因爲它們指的是實際的範圍,而不僅僅是一個單元格。有些引用大表,所以有時它會是Range(「Table」)。單元格(5,3),它並不總是指向1,1。我不確定用另一種方法引用特定的單元格在一張桌子上。 例如,我想要做的一點是: Range(「OriginDrop」)= Range(「Origins」)。Cells(4,1) – user1558773

0

發現問題。通常,我不必特別鍵入數據所在的工作表,因爲這些表是全局工作的(通常我只有Range(「Table」),它無論代碼位於何處都可以工作,因爲它始終知道在哪裏參考)但是..看起來,因爲我試圖從表中複製數據到另一張表中的表,它不會這樣工作,並需要定義表格(「」)。

有點奇怪它似乎總是在全球工作,除非在這種情況下。好吧。感謝您的嘗試。新代碼

例子:

If Not Intersect(Target, Target.Worksheet.Range("RaceDrop")) Is Nothing Then 
If Range("RaceDrop") = Sheets("Data").Range("Races").Cells(1, 1) and Range("ClassDrop") = Sheets("Data").Range("Classes").Cells(1, 1) or Range("Races") = Sheets("Data").Range("Races").Cells(1, 1) and Ranges("ClassDrop") = Sheets("Data").Range("Classes").Cells(2, 1) 
    Range("OriginDrop") = Sheets("Data").Range("Origins").Cells(1, 1) 
相關問題