Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel VBA-要将值粘贴到的查找单元格_Vba_Excel - Fatal编程技术网

Excel 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:

我试图构建一个宏,通过查找行值和列值,并使用该值确定要粘贴到的单元格,将值插入表的特定单元格中。我对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
我不断得到一个运行时错误对象的要求,但我不太确定我做错了什么

任何帮助都将不胜感激

更新

这也是粘贴单元格的表(此表不是实际表,只是一个示例,用于隐藏表中的名称,但除了实际表从第一行开始外,它看起来完全相同)

这是输入页面:

注意:此后,我在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
声明为Type
Variant
(如果未声明,则为Type
Variant

这将引发您描述的错误

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

此外,未能声明
名称
也将引发
424所需对象
错误。它们应该是
String
数据类型,并使用range
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
,然后更改赋值,以确保该值在工作表中被解释为
日期
,然后在分配给该变量时被解释为
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)? 在宏代码中?它似乎什么也没做就完成了。