我有以下代码可以比较两张纸,并用第二张纸的信息更新第一张。但是,我有一个"应用程序定义或对象定义错误"我不知道如何解决这部分代码:Sheets("LAT - Master Data").Range(Cells(Ligne, "E"), Cells(Ligne, "AS")).Copy Sheets("Launch Tracker").Cells(Lig, "E")
我试图弄清楚为什么它不起作用但是当我检查变量是否正确时...有人会知道为什么会发生这种情况吗?
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 I P R
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
答案 0 :(得分:1)
Cells(Ligne, "E")
和Cells(Ligne, "AS")
引用活动工作表上的单元格。如果活动工作表不是“LAT - 主数据”,您将收到错误,因为您无法在一个工作表上使用单元格来指定另一个工作表上的范围。要解决此问题,请指定Cells
的工作表或使用字符串:
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