Excel VBA-要将值粘贴到的查找单元格
我试图构建一个宏,通过查找行值和列值,并使用该值确定要粘贴到的单元格,将值插入表的特定单元格中。我对VBA很陌生,所以我不确定自己在做什么 这就是我到目前为止所做的:Excel VBA-要将值粘贴到的查找单元格,vba,excel,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:
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
我不断得到一个运行时错误对象的要求,但我不太确定我做错了什么
任何帮助都将不胜感激
更新
这也是粘贴单元格的表(此表不是实际表,只是一个示例,用于隐藏表中的名称,但除了实际表从第一行开始外,它看起来完全相同)
这是输入页面:
注意:此后,我在week变量周围添加了更多代码:
If WorksheetFunction.CountA(Sheets("Input").Range("C19")) = 0 Then
Week = Sheets("Input").Range("C20").Value
Else
Week = Sheets("Input").Range("C19").Value
End If
Week = CLng(DateValue(Sheets("Input").Range("C19").Value))
非常感谢你们的帮助 在没有看到更多代码的情况下,我假设您已将
copyCell
和pasteCell
声明为TypeVariant
(如果未声明,则为TypeVariant
)
这将引发您描述的错误
通过正确声明变量并在分配对象变量时使用Set
关键字来解决此问题
此外,未能声明名称
和周
也将引发424所需对象
错误。它们应该是String
数据类型,并使用rangeValue
方法分配。如果任一匹配函数返回错误(未找到匹配),则此错误将持续存在,而不会对代码进行更多修改
我认为这会奏效:
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
,然后更改赋值,以确保该值在工作表中被解释为日期
,然后在分配给该变量时被解释为Long
整数:
If WorksheetFunction.CountA(Sheets("Input").Range("C19")) = 0 Then
Week = Sheets("Input").Range("C20").Value
Else
Week = Sheets("Input").Range("C19").Value
End If
Week = CLng(DateValue(Sheets("Input").Range("C19").Value))
现在,如果您的日期并非都是实际日期(google it…),那么这可能不是万无一失的,但事实上,这种情况经常发生,一些日期输入为日期(数字格式为日期),而另一些日期输入为字符串文字。如果是这种情况,则仍应正确处理
Week
值,但查找范围的格式也应相同,以避免再次出现潜在错误。谢谢!因此,它似乎一直在工作,直到IF Not iError部分,它一直告诉我,名称和周无法找到,即使我确信它们在那里(我已经检查了空格,并确保查找值和表头和列中的值相同),如果您执行Debug.Print Application.Match(周,工作表(“Resources”).Range(“A2:A50”)、0”)
和Debug.Print Application.Match(名称、工作表(“Resources”).Range(“B1:AZ1”)、0)
它告诉你什么?A列和第1行中数据的截图会有所帮助。我似乎无法上传图片,因为我没有足够的声誉:基本上,它的名字从B1:AZ1穿过第一行,日期从A2:A50穿过。我应该把Debug.Print Application.Match(周,表(“资源”).Range(“A2:A50”)放在哪里"), 0)? 在宏代码中?它似乎什么也没做就完成了。