应用程序或对象定义错误更新macros

我有下面的代码,应该比较两张表,并更新第一个与第二个的信息。 但是,我有一个“应用程序定义或对象定义的错误”,我不知道如何解决这部分代码: Sheets("LAT - Master Data").Range(Cells(Ligne, "E"), Cells(Ligne, "AS")).Copy Sheets("Launch Tracker").Cells(Lig, "E")

我试图找出为什么它不工作,但是当我检查variables是正确的…会有人有一个线索,为什么发生这种情况?

 Option Explicit Option Base 1 Dim Ttrak_concat, Tdata_concat, Derlig As Integer Sub mettre_a_jour() Dim Cptr As Integer, D_concat As Object, Ref As String, Ligne As Integer, Lig As Integer Dim Start As Single Dim test 'pour essais Start = Timer Application.ScreenUpdating = False Call concatener("LAT - Master Data", Tdata_concat) Call concatener("Launch Tracker", Ttrak_concat) 'creation d'une collection: concaténation - ligne dans tracker Set D_concat = CreateObject("scripting.dictionary") For Cptr = 1 To UBound(Ttrak_concat) Ref = Ttrak_concat(Cptr, 1) If Not D_concat.exists(Ref) Then: D_concat.Add Ref, Ttrak_concat(Cptr, 2) Next 'comparaison entre les feuilles For Cptr = 1 To UBound(Tdata_concat) Ref = Tdata_concat(Cptr, 1) 'chaineIPR feuil data Ligne = Tdata_concat(Cptr, 2) 'localisation feuil data If D_concat.exists(Ref) Then Lig = D_concat.Item(Ref) 'localisation feuil track Else Lig = Derlig + 1 End If Sheets("LAT - Master Data").Range(Cells(Ligne, "E"), Cells(Ligne, "AS")).Copy Sheets("Launch Tracker").Cells(Lig, "E") Next Sheets("Launch Tracker").Activate Application.ScreenUpdating = False MsgBox "mise à jour réalisée en: " & Round(Timer - Start, 2) & " secondes" End Sub '--------------------------------------- Sub concatener(Feuille, Tablo) Dim T_coli, T_colp, T_colr, Cptr As Integer Dim test With Sheets(Feuille) 'mémorisation des colonnes IPR Derlig = .Columns("H").Find(what:="*", searchdirection:=xlPrevious).Row T_coli = Application.Transpose(.Range("H3:H" & Derlig)) T_colp = Application.Transpose(.Range("O3:O" & Derlig)) T_colr = Application.Transpose(.Range("Q3:Q" & Derlig)) 'concatène les données IPR pour comparaison ReDim Tablo(UBound(T_colr), 2) For Cptr = 1 To UBound(T_colr) Tablo(Cptr, 1) = T_coli(Cptr) & " " & T_colp(Cptr) & " " & T_colr(Cptr) Tablo(Cptr, 2) = Cptr + 2 'ligne de la concaténation Next End With End Sub 

因为您没有指定工作表,所以Cells(Ligne, "E")Cells(Ligne, "AS")指的是活动工作表上的单元格。 如果活动工作表不是“LAT – 主数据”,您将收到一个错误,因为您无法使用一个工作表上的单元格来指定另一个工作表的范围。 要修复它,请为Cells指定表格或使用string:

 With Sheets("LAT - Master Data") .Range(.Cells(Ligne, "E"), .Cells(Ligne, "AS")).Copy Sheets("Launch Tracker").Cells(Lig, "E") End With 

要么

 Sheets("LAT - Master Data").Range("E" & Ligne & ":AS" & Ligne).Copy Sheets("Launch Tracker").Cells(Lig, "E") 

我最喜欢的是完全跳过复制(如果你不需要复制格式或公式):

 Sheets("Launch Tracker").Range("E" & Ligne & ":AS" & Ligne).Values = Sheets("LAT - Master Data").Range("E" & Ligne & ":AS" & Ligne).Values