2013-07-29 150 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中的数据看起来像是一个屏幕截图。 –

相关问题