2013-07-29 122 views
1

我試圖通過查找行值並查找列值並使用它來確定單元格以將值插入到特定的表格單元格中粘貼到。我對VBA相當陌生,所以我不確定自己在做什麼。Excel VBA-查找單元格將值粘貼到

這是我到目前爲止有:

Name=Sheets("Input").Range("C5") 
Week=Sheets("Input").Range("C19") 
copyCell=Sheets("Input").Range("C18") 

pasteCell = Application.Index(Sheets("Resources").Range("B2:AZ50"),Application.Match(Week,Sheets("Resources").Range("A2:A50"),0),Application.Match(Name,Sheets("Resources").Range("B1:AZ1"),0)) 

copyCell.Copy 
pasteCell.PasteSpecial PasteValues 

我不斷收到要求運行時錯誤的對象,但我不能肯定我做錯了什麼......

任何幫助將不勝感激!

UPDATE

這是該小區被粘貼過(這個表不是真正的表只是一個例子,以隱藏在表中的名稱,但它看起來只是完全相同的表真正的表格從第一行開始)。

enter image description here

這是輸入頁面:

enter image description here

注:因爲我已經把更多的代碼周圍的一週變量:

If WorksheetFunction.CountA(Sheets("Input").Range("C19")) = 0 Then 
Week = Sheets("Input").Range("C20").Value 
Else 
Week = Sheets("Input").Range("C19").Value 
End If 

非常欣賞幫助你們給予!

回答

0

沒有看到更多的代碼,我假設你已經宣佈copyCellpasteCellVariant類型(如果未聲明,它Variant)。

這會引發你描述的錯誤。

通過正確聲明變量並在分配對象變量時使用Set關鍵字來解決此問題。

此外,未能聲明NameWeek也會引起424 Object Required錯誤。它們應該是String數據類型,並使用範圍.Value方法進行分配。如果兩個匹配函數中的任何一個返回錯誤(未找到匹配),則此錯誤將持續存在,而不會對代碼進行更多修訂。

我認爲這將工作:

Sub Test() 
Dim Name As String 
Dim Week As Long 
Dim copyCell As Range 
Dim pasteCell As Range 

Name = Sheets("Input").Range("C5").Value 
Week = CLng(DateValue(Sheets("Input").Range("C19").Value)) 
Set copyCell = Sheets("Input").Range("C18") 

If Not IsError(Application.Match(Week, Sheets("Resources").Range("A2:A50"), 0)) And _ 
    Not IsError(Application.Match(Name, Sheets("Resources").Range("B1:AZ1"), 0)) Then 

    Set pasteCell = Application.Index(Sheets("Resources").Range("B2:AZ50"), _ 
     Application.Match(Week, Sheets("Resources").Range("A2:A50"), 0), _ 
     Application.Match(Name, Sheets("Resources").Range("B1:AZ1"), 0)) 

    copyCell.Copy 
    pasteCell.PasteSpecial PasteValues 
Else: 
    MsgBox Name & " and/or " & Week & " not found!", vbInformation 
End If 
End Sub 

修訂

的Excel並不總是知道如何處理日期值做。這裏就是這種情況。在工作表上,日期值被存儲爲長整數。在宏中,我們將它稱爲一個字符串,它可能會引發多個錯誤,包括'1004'(無法匹配)。

我發了修訂上面的代碼,Dim Week as Long然後改變了分配,以確保值被解釋爲從所述工作表中的Date,然後當分配給該變量一個Long整數:

Week = CLng(DateValue(Sheets("Input").Range("C19").Value)) 

現在,如果你的日期不是全部實際的日期(谷歌它......)但這實際上經常發生某些日期輸入日期(數字格式化爲日期),其他日期輸入爲字符串文字,這可能不是萬無一失。如果是這種情況,Week值仍應該被正確處理,但查找範圍也應該以相同的方式進行格式化,以避免再次發生潛在的錯誤。

+0

謝謝!所以它似乎正在努力,直到IF Not IsError部分,它一直告訴我即使我確信他們在那裏也找不到名字和星期(我檢查了空格並確保查找值和表頭和列中的值相同) –

+0

如果您執行'Debug.Print Application.Match(Week,Sheets(「Resources」)。Range(「A2:A50」),0))' Debug.Print Application.Match(Name,Sheets(「Resources」)。Range(「B1:AZ1」),0)'它告訴你什麼? –

+0

列A和行1中的數據看起來像是一個屏幕截圖。 –

相關問題