Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/26.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
VBA运行时错误424(需要对象)/图纸之间的匹配单元格_Vba_Excel - Fatal编程技术网

VBA运行时错误424(需要对象)/图纸之间的匹配单元格

VBA运行时错误424(需要对象)/图纸之间的匹配单元格,vba,excel,Vba,Excel,我有一个x列的主表。我试图在每列中的第一个单元格和许多工作表中的另一个单元格之间找到匹配项。找到匹配项后,我将尝试复制整个列(不包括匹配的值),并将其粘贴到找到工作表的工作表上。我一直收到运行时错误424。我写的代码如下 Dim lc As Long Dim cell1 As Range, cell2 As Range Dim wbk As Workbook Dim sh4 As Worksheet Dim v As Long Set wbk = ThisWorkbook Set sh4 =

我有一个x列的主表。我试图在每列中的第一个单元格和许多工作表中的另一个单元格之间找到匹配项。找到匹配项后,我将尝试复制整个列(不包括匹配的值),并将其粘贴到找到工作表的工作表上。我一直收到运行时错误424。我写的代码如下

Dim lc As Long
Dim cell1 As Range, cell2 As Range
Dim wbk As Workbook
Dim sh4 As Worksheet
Dim v As Long


Set wbk = ThisWorkbook
Set sh4 = Sheets(4)

lc = sh4.Cells(1, Columns.Count).End(xlToLeft).Column

For v = 1 To lc
Set cell1 = sh4.Cells(1, v)

    For Each Sheet In wbk.Worksheets
        If Sheet.Index > 5 Then
        Sheet.Select
        Set cell2 = Range("B1")

            If StrComp(CStr(cell1.Value), CStr(cell2.Value), vbBinaryCompare) = 0 Then
                  If cell1.Offset(0, 0).Value = cell2.Offset(0, 0).Value Then
                    sh1.Range(Cells(2, v), Cells(28, v)).Resize(1, 2).Copy
                    Sheet.Range("F2").PasteSpecial xlPasteValues
                  End If
            End If
        End If

    Next Sheet
    Set cell1 = Nothing
    Set cell2 = Nothing
Next v

我觉得我错过了一些简单的东西。我们将不胜感激。谢谢。

您的代码似乎有很多地方出错。我继续,并添加了一些快速修复,希望能使它运行良好。一、 就个人而言,我讨厌Excel的
.Paste
.PasteSpecial
函数(这种讨厌是相互的),所以我总是创建列表或使用变量来复制东西

不幸的是,我不认为
.Resize
函数能达到您所期望的效果。通过使用它,您只需要从调整大小的范围的第一个单元格开始抓取第一行和前两列

这里有一些代码,除了错误消息之外,它们应该做与您的代码完全相同的事情!如果你需要一些帮助来理解我所做的一些改变或者如何实现你的目标,请不要犹豫

Dim lc As Long
Dim cell1 As Range, cell2 As Range
Dim wbk As Workbook
Dim sh4 As Worksheet, sh as Worksheet
Dim v As Long
Dim value1 As Variant, value2 As Variant

Set wbk = ThisWorkbook
Set sh4 = wbk.Sheets(4)

lc = sh4.Cells(1, Columns.Count).End(xlToLeft).Column

For v = 1 To lc
    Set cell1 = sh4.Cells(1, v)
    value1 = cell1.Value

    For Each sh In wbk.Worksheets
        If sh.Index > 5 Then
            sh.Select
            Set cell2 = sh.Range("B1")

            If StrComp(CStr(value1), CStr(value2), vbBinaryCompare) = 0 Then
                If value1 = value2 Then
                    sh.Range("F2") = sh4.Cells(2, v)
                    sh.Range("G2") = sh4.Cells(2, v + 1)
                End If
            End If
        End If
    Next sh

    Set cell1 = Nothing
    Set cell2 = Nothing

Next v

在您展示给我们的代码中,您没有在任何地方定义
sh1
,因此这可能是导致错误的原因。@djikay很抱歉,这里的输入错误应该是sh4。它仍然不起作用,我得到了一个不同的运行时错误(1004)。我将尝试在不同的标题下重新发布您还需要限定您的
单元格
对象。我怀疑您应该在它们之前添加
sh4.
,例如:
sh4.Range(sh4.Cells(2,v),sh4.Cells(28,v))。调整大小(1,2)。复制
。如果不这样做,则它们将引用当时处于活动/选定状态的任何工作表。很好的做法是明确说明各种对象所引用的工作表。您还没有告诉我们错误发生在哪一行,以及错误发生时该行上引用的变量值。太棒了。我试过了,没有错误,但不起作用。另外,如果我希望sh.Range(“F2”)等于从第2行开始到该列最后一行的sh4中的“v”列,该怎么办?非常感谢。