Excel 如果在另一张图纸上找不到,请复制单元格
我正在编写一个VBA函数,以便在数据库工作表中不存在数据时从缓冲表中复制数据。它比较缓冲区卫生棉条QE当前行中D/4列中的id,如果没有,则将其添加到数据库表BD QE的末尾,并从数据库表中获取id数组。 我不能让它工作,有什么问题吗? 谢谢你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)
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由对象或应用程序库定义的错误时,就是这样!