2012-12-20 133 views
0

當前問題:VBA:我收到以下錯誤:運行時錯誤「1004」應用程序定義或對象定義的錯誤

我使用,直到我添加額外的數據到Sheet2部分地工作,現在代碼當它失敗和調試送我去:

Set partsheet = Worksheets("Sheet1").Range("A1", Range("A65536").End(xlUp)) 

實用這個代碼:

我基本上有兩列在不同的表:我想比較&,當類似的進口數據:

工作表Sheet1 - COLUMN1是工號

工作表Sheet1 - COLUMN2是一個零件號

同樣的工作號碼,你可以有多個部件 - 這意味着就業人數重演在COLUMN1

Sheet2中 - COLUMN1是同樣的工作號作爲工作表Sheet1,但數據永遠不會重複

Sheet2中 - 列2是具體到每個崗位數(所以爲什麼在這種情況下,就業數字不重複的ID號他們自己)

因此,我想導入數據從Sheet2 - column2使用共同工作號碼作爲參考點。當我將數據導入到工作表Sheet1 - Column3時,唯一的ID號碼必須在列1(工作表1)中重複的工作號重複 - 因此爲double for循環。

我所用的意思,以部分工作:

要啓動的代碼只是部分的工作,我認爲這是由於這樣的事實:在Sheet1中某些工作數量 - COLUMN1在Sheet2中沒有相應的值 - column1(數據不完美)。也許我需要爲if語句的else部分添加代碼,但我不知道是什麼。

VBA代碼:

Option Explicit 

Sub testFil() 
    Dim Jobref_in_partsheet As Range 
    Dim Jobref_in_jobsheet As Range 
    Dim partsheet As Range 
    Dim jobsheet As Range 
    Dim MyRow As Long 
    Dim MyOtherRow As Long 

    Set partsheet = Worksheets("Sheet1").Range("A1", Range("A65536").End(xlUp)) 
    Set jobsheet = Worksheets("Sheet2").Range("A1", Range("A65536").End(xlUp)) 

    For Each Jobref_in_partsheet In partsheet 
     For Each Jobref_in_jobsheet In jobsheet 
      If Jobref_in_partsheet.Value = Jobref_in_jobsheet.Value Then 
       MyRow = Jobref_in_partsheet.Row 
       MyOtherRow = Jobref_in_jobsheet.Row 
       Worksheets("Sheet1").Cells(MyRow, 3) = Worksheets("Sheet2").Cells(MyOtherRow, 2) 
      Else 
       'Do nothing 
      End If 
     Next 
    Next 
End Sub 

我真的很感謝所有幫助我能得到。

+0

您應該能夠編輯原始帖子以反映這些更改嗎? –

回答

0
Worksheets("Sheet1").Range("A1", Range("A65536").End(xlUp)) 

這裏有一個問題:你要創建一個Range對象,第一個單元格,其中爲Sheet1A1,和最後一個單元格是活動工作表中A列中使用的最後一個單元格。您可以猜到,Sheet1和活動工作表可以是不同的工作表,並且不能創建屬於多個工作表的範圍。

你應該爲你的最後一個單元格明確提供父表:

Worksheets("Sheet1").Range("A1", Worksheets("Sheet1").Range("A65536").End(xlUp)) 

Using .Address是不是一個真正的解決方法,因爲它可能導致地址從一個表中取出要對另一片使用。

0

答案更新:

我認爲這可能是更容易使用= VLOOKUP,這只是一個普通的Excel函數來完成的。基本上你會想這個公式適用於每一個細胞在Sheet1行C.

'Psudeo Code 
=VLOOKUP([look up value] A1, [range to look in] Sheet2!A:B, [row to return] 2, [use exact match] false) 

你需要使用它之前VLOOKUP讀了,但我希望我的僞代碼點點可以,如果你告訴你實際上可以用於您的目的。如果你像我說的那樣實現它,那麼基本上它會使用第一個值(A1)來查找另一個範圍內的東西(A:B的第一列)。如果它找到匹配,它將返回第二列中的內容(因此A,B的第2列是B)。假只是爲了告訴程序你不想要類似的匹配,你只需要匹配完全相同的匹配。

是的,VLOOKUP令人困惑,因爲所有人都出去了,但它非常有用。

這比使用VBA執行相同的任務要容易得多。我想這可能會也可能不會真正回答你的問題,但是我認爲我會提起來,因爲你沒有考慮到它。

老了,錯了,回答:

我傾向於確保我創建一個範圍時,把一切都爲字符串。 EG:

Set partsheet = Worksheets("Sheet1").Range("B1:" & Range("B65536").End(xlUp).Address) 

範圍( 「B65536」)結束(xlUp)。地址將返回表示列頂部的地址字符串。例如,如果頂部是「B31」,那麼「B1:」&範圍(「B65536」)。結束(xlUp)。地址應返回「B1:B31」作爲範圍。

+0

Cheers Doug,將地址轉換爲字符串,與我的代碼完美結合:)我還是有一個關於VLOOKUP的閱讀。再次感謝。 –

+0

很高興幫助:-)。如果我的回答是正確的,那麼如果你接受它作爲你的回答就會很好。 –

相關問題