Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.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 如果在另一张图纸上找不到,请复制单元格_Excel_Vba - Fatal编程技术网

Excel 如果在另一张图纸上找不到,请复制单元格

Excel 如果在另一张图纸上找不到,请复制单元格,excel,vba,Excel,Vba,我正在编写一个VBA函数,以便在数据库工作表中不存在数据时从缓冲表中复制数据。它比较缓冲区卫生棉条QE当前行中D/4列中的id,如果没有,则将其添加到数据库表BD QE的末尾,并从数据库表中获取id数组。 我不能让它工作,有什么问题吗? 谢谢你 Function danstableau(tableau, arechercher) danstableau = False For i = LBound(tableau) To UBound(tableau)

我正在编写一个VBA函数,以便在数据库工作表中不存在数据时从缓冲表中复制数据。它比较缓冲区卫生棉条QE当前行中D/4列中的id,如果没有,则将其添加到数据库表BD QE的末尾,并从数据库表中获取id数组。 我不能让它工作,有什么问题吗? 谢谢你

Function danstableau(tableau, arechercher)
    danstableau = False
    For i = LBound(tableau) To UBound(tableau)        
        If tableau(i) = arechercher Then
            danstableau = True
            Exit For
        End If
    Next
End Function

Sub copieBDQE()
    Dim i As Integer
    Dim nblignetampon As Integer
    Dim nbligneBD As Integer
    Dim tableauref As Variant
    Dim msgString As String
    Dim var As Variant

    nblignetampon = Worksheets("Tampon QE").Cells(Rows.Count, 1).End(xlUp).Row
    nbligneBD = Worksheets("BD QE").Cells(Rows.Count, 1).End(xlUp).Row
    tableauref = Application.Transpose(Worksheets("BD QE").range(Worksheets("BD QE").Cells(1, 4), Worksheets("BD QE").Cells(nbligneBD, 4)))

    For i = 1 To nblignetampon + 1
    var = Worksheets("Tampon QE").Cells(i, 4).Value
        If danstableau(tableauref, var) Then
            i = i + 1
        Else
            nbligneBD = nbligneBD + 1
            Worksheets("tampon QE").range(Cells(i, 1), Cells(i, 22)).Copy Destination:=Worksheets("BD QE").range(Cells(nbligneBD, 1), Cells(nbligneBD, 22))
        End If
    Next i
End Sub

我怀疑您的问题可能与您处理的记录数量有关。i是一个整数,它将其最大容量限制在32000左右。如果在下一个i处未找到引用,则i=1到nblignetampon+1的循环将添加i=i+1。因此,我将以两倍于您预期的速度增长,并且可能超过整数允许的最大值。这就是为什么行和列总是声明为长的原因。在您的代码中有一个额外的错误,因为它只每隔一行检查一次。 顺便说一句,tableauref似乎给了你一个问题

tableauref = Worksheets("BD QE").Range(Worksheets("BD QE").Cells(1, 4), Worksheets("BD QE").Cells(nbligneBD, 4)).Value
将给您一个基于1的二维数组,这意味着它有nbligneBD行和1列。因此,单元格D1的值将在tableauref1,1中,D2=tableauref2,1,D[nbligneBD]=tableaurefUboundtableauref,1中 另一件让我印象深刻的事情是,您不需要在Copy函数中定义完整的目标范围。定义第一个单元格就足够了。当然,第一个单元格是WorksheetsBD QE.CellsWorksheetsBD QE.Rows.Count,A.EndXlUp 所以,你对NBLINGEBD的计算似乎是多余的。
我希望我正确地识别了问题。这是一个猜测。

< P>你应该考虑变量的点。

您的具体错误可能是由于缺少图纸参考。根据运行代码时哪个工作表处于活动状态,您的范围可能会偏离两个工作表,这将导致错误。完全限定所有范围/单元格,即:

With Worksheets("tampon QE")
    .Range(.Cells(i, 1), .Cells(i, 22)).Copy Destination:=Worksheets("BD QE").Cells(nbligneBD, 1)
End With

不能让它工作是没有多大帮助的。您是否收到错误消息?如果是,哪些错误消息和错误消息在哪一行?还是意外的结果?还是没有结果?请提供详细信息。第29行在复制'Worksheetstampon QE.rangeCellsi,1,Cellsi,22.复制目标:=WorksheetsBD QE.rangeCellsnbligneBD,1,CellsnbligneBD,22'错误1004由对象或应用程序库定义的错误时,就是这样!