2016-09-27 5 views
0

データベースから更新する必要があるプリンシパルシート(起動トラッカー)があります。私は隣接するシート(LAT - マスターデータ)にデータベースの抽出を入れました。VBAは、2枚のシートを比較しながらセルを交換して追加します。

私がしたいのは、列H、O、Qの値が似ていると、列( "Launch Tracker")の列 "E"から列 "一致しません(Launch Tracker)シートの最後に行全体を追加したいと思います。

私はテストをしたときに実行していたこのコードをすでに持っていますが、今は動作していないように見えます。

Option Explicit 
Option Base 1 
Dim Ttrak_concat, Tdata_concat, Derlig As Integer 
Sub General_update() 
Dim Cptr As Integer, D_concat As Object, Ref As String, Ligne As Integer, Lig As Integer 
Dim Start As Single 
Dim test 'for trials 
    Start = Timer 
    Application.ScreenUpdating = False 
    Call concatenate("LAT - Master Data", Tdata_concat) 
    Call concatenate("Launch Tracker", Ttrak_concat) 
    'collection 
    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 
    'comparison between the sheets 
    Sheets("LAT - Master Data").Activate 
    For Cptr = 1 To UBound(Tdata_concat) 
     Ref = Tdata_concat(Cptr, 1) 'chaineIPR feuil data 
     Ligne = Tdata_concat(Cptr, 2) 'localisation sheet data 
     If D_concat.exists(Ref) Then 
       Lig = D_concat.Item(Ref) 'localisation sheet track 
     Else 
       Lig = Derlig + 1 
     End If 
     Sheets("LAT - Master Data").Range(Cells(Ligne, "E"), Cells(Ligne, "AL")).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 concatenate(Feuille, Tablo) 
Dim T_coli, T_colp, T_colr, Cptr As Integer 
Dim test 
With Sheets(Feuille) 
     'memorizing columns H O Q 
     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)) 
     'concatenate for comparison 
     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 
     Next 
    End With 
End Sub 

誰かが私の問題の解決策をお探しですか?

は、事前にありがとう:)

EDIT 11:48

は、実際にコードが実行されますが、それは、私はそれがする必要があるように動作しません。 H、O、Qの3つの列が同じ場合は、LAT - Masterデータシートからシート起動ロッカーの情報を更新したいと思います。問題は私がチェックして、LAT - Master Dataシートにあるいくつかの行が、マクロを実行した後でLaunch trackerシートに追加されていないことです。なぜ誰かが考えているのですか?

ガット

+0

正確にはどのような問題がありますか? – arcadeprecinct

+0

この部分のバグReDim Tablo(UBound(T_colr)、2) – MopMop

+0

「バグ」とはどういう意味ですか?どのようなエラーが出ますか? – arcadeprecinct

答えて

0

型の不一致は、関数に間違った型を持つパラメータを与えたことを意味します。あなたの場合は、UBoundT_colrまたはReDimを扱うことができませんので、UBound(T_colr)を扱うことはできません。 Uboundは常に整数を返しますので、T_colrである必要があります。

Derlig=3の場合、Application.Transpose(.Range("Q3:Q" & Derlig))は配列を返さず、単一の値(DoubleStringなど)を返しません。それはUBoundがエラーを投げる時です。

また、あなたはこれがDerlig = 3かどうかを確認し、個別にそのケースを扱うことである防ぐために何ができるかなど

T_coli(Cptr)でエラーが発生します。

If Derlig = 3 Then 
    ReDim Tablo(1, 2) 
    Tablo(1, 1) = T_coli & " " & T_colp & " " & T_colr 
    Tablo(1, 2) = 3 
Else 
    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 
    Next Cptr 
End If 
+0

これは私を狂ったようにしています^^私の 'If'には正しい構文がありません – MopMop

+0

これは別の問題です。 'If​​ ... Then'、' Else'と 'End If'はすべて個別の行になければなりません。 'If​​'、' For'と 'With'ブロックが適切に配置されていることを確認する必要があります。私は私の答えにforループを追加しました。 – arcadeprecinct

+0

あなたは最高です!私は私の貧しいVBAスキルについて何かをする必要がありますが、あなたの助けに感謝します。それは動作します:) – MopMop