更新宏

时间:2016-12-05 09:47:15

标签: excel vba excel-vba macros

我有以下代码可以比较两张纸,并用第二张纸的信息更新第一张。但是,我有一个"应用程序定义或对象定义错误"我不知道如何解决这部分代码: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

1 个答案:

答案 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