繁体   English   中英

Excel VBA-将值粘贴到的查找单元格

[英]Excel VBA- Lookup cell to paste value to

我正在尝试构建一个宏,该宏通过查找行值和查找列值,然后使用该值来确定要粘贴到的单元格,从而将值插入到表的特定单元格中。 我对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

我一直在获取运行时错误对象,但我不确定自己在做什么错...

任何帮助,将不胜感激!

更新

这也是要粘贴单元格的表(该表不是真实表,只是为了在表中隐藏名称的一个示例,但它看起来完全一样,只是真实表从第一行开始)。

在此处输入图片说明

这是输入页面:

在此处输入图片说明

注意:此后,我在周变量周围添加了更多代码:

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

非常感谢你们提供的帮助!

在没有看到更多代码的情况下,我假设您已将copyCellpasteCell声明为Type Variant (如果未声明, 则为 Variant类型)。

这将引发您描述的错误。

通过正确地声明变量并在分配对象变量时使用Set关键字来解决该问题。

此外,如果未声明NameWeek也会引发424 Object Required错误。 它们应为String数据类型,并使用range .Value方法进行分配。 如果任何一个match函数返回错误(找不到匹配项),则该错误将持续存在,而无需对代码进行更多修改。

我认为这会起作用:

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))

现在,如果您的日期并非全部都是实际日期(google ...),这可能并非万无一失,但实际上这确实经常发生,有些日期输入为日期(数字格式为日期),而另一些输入为字符串文字。 在这种情况下,“ Week值仍应正确处理,但查找范围也应采用相同的格式,以避免再次发生潜在错误。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM