2017-08-07 4 views
0

次のマクロを作成して、いくつかのブックからWorkTrackerシートのエントリをコピーすることができました。 1.空であるか、または「報告済み」が各セルに更新されている場合は、個々のファイルから列Xを確認してください 2.列Xが空白で、列a〜wコピーした後、列Xを "報告済み"で更新する必要があります。 3.列Xに既に "レポート済み"が設定されている場合は、スキップする必要があります次のエントリを確認する必要があります列値に基づいて行をコピーし、コピー後に列を更新します。

効率的な方法はありますか?基本的に、マクロは個々のエントリを統合する必要があります。また、以前に報告されたエントリを識別できるようにする必要があるため、マクロを別の時間(毎週実行する)に再度コピーしません。

どうもありがとうございます! Forループ

Sub LoopThroughDirectory() 
Dim MyFile As String 
Dim erow 
Dim lRow As Long 
Dim lCol As Long 

MyFile = Dir("C:\Users\bmsand\Documents\Agatha\FY18\Test 2\") 

Do While Len(MyFile) > 0 
If MyFile = "zmaster.xlsm" Then 
Exit Sub 
End If 

Workbooks.Open (MyFile) 
Sheets("WorkTracker").Select 
lRow = Cells(Rows.Count, 1).End(xlUp).Row 
lCol = Cells(1, Columns.Count).End(xlToLeft).Column 

Range(Cells(4, 23), Cells(lRow, lCol)).Copy 
Application.DisplayAlerts = False 
ActiveWorkbook.Close 

erow = Sheet1.Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Row 
ActiveSheet.Paste Destination:=Worksheets("Consolidate").Range(Cells(erow, 1), Cells(erow, 23)) 

MyFile = Dir 
Loop 

End Sub 
+0

このテキストの壁は理解できない横にあるため、説明を少し読みやすくしてください。あなたの作業をより小さなステップに分けるのに役立つかもしれません。一度に1つのステップを取る。値が "報告"されているかどうかを確認するには、次のようにします:Cell(行、列).text = "報告"してから何もしない、何かをする終了する場合 – Luuklag

+0

ありがとう@Luuklag ...あなたが条件をどこに行かせるべきかを私に示すためにコードを編集してもよろしいですか?ありがとう! – agatha

答えて

0
Sub LoopThroughDirectory() 
Dim MyFile As String 
Dim erow 
Dim lRow As Long 
Dim lCol As Long 
Dim i as Long 

MyFile = Dir("C:\Users\bmsand\Documents\Agatha\FY18\Test 2\") 

Do While Len(MyFile) > 0 
If MyFile = "zmaster.xlsm" Then 
Exit Sub 
End If 

Workbooks.Open (MyFile) 
Sheets("WorkTracker").Select 
lRow = Cells(Rows.Count, 1).End(xlUp).Row 
lCol = Cells(1, Columns.Count).End(xlToLeft).Column 

For i = 4 to lRow 
    If Cells(i,24).text = "reported" Then 
    Else 
     Exit for 
    End if 
Next i 

Range(Cells(i, 23), Cells(lRow, lCol)).Copy 
Application.DisplayAlerts = False 
ActiveWorkbook.Close 

erow = Sheet1.Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Row 
ActiveSheet.Paste Destination:=Worksheets("Consolidate").Range(Cells(erow, 1), Cells(erow, 23)) 

MyFile = Dir 
Loop 

End Sub 

のIはマークされていない最初のインスタンスをチェック含まれる「報告」し、それに応じてコピー範囲を設定します。これは、元のコードから最小限に逸脱しますが、.SelectとAchtiveSheetを使用することをお勧めしません。これらの関数は揮発性であり、たとえばブックを閉じるときに予期しない動作につながる可能性があります。 7月31日のあなたの質問に対する彼の答えでShai Radoによって示されたように、すべてのオブジェクトを完全に修飾する方が良いです。

+0

ありがとう@Luuklag!それは働いた...私はあなたの助言に感謝し、これを念頭に置くでしょう。 – agatha

関連する問題