2016-05-09 27 views
2

私は以前に意図したとおりに動作する他のプロジェクトで使用したコードを持っています。私は今、このコードを別の値で使用しています。しかし、"WorkGroup Manager"以外の値を含む行は削除されません。私は今Excel 2013で働いています(この会社は2007年からアップグレードされました)。これがコードが正しく機能しない原因になっていますか? Excel 2007とExcel 2013の違いは、VBAコーディングに関係しているのでわかりません。列の値に基づいて行を削除する

Sub Filter_WGM() 

    Dim PTASK_Template As Workbook 
     Set PTASK_Template = Workbooks("BCRS Unassigned Tasks Template.xlsm") 
    Dim WGMd As Worksheet 
     Set WGMd = PTASK_Template.Sheets("WGM") 

    Application.ScreenUpdating = False 
    Application.Calculation = xlCalculationManual 


     With WGMd 
     Dim LRMf As Long 
      For LRMf = Cells(Rows.Count, 3).End(xlUp).Row To 2 Step -1 
       If Cells(LRMf, 3).Value <> "WorkGroup Manager" Then 
        Rows(LRMf).Delete 
       End If 
      Next LRMf 
     End With 

    Application.ScreenUpdating = True 
    Application.Calculation = xlCalculationAutomatic 

End Sub 

このコードを別の2つのワークシートで使用するには、別の値でこのコードを繰り返してください。

+1

'with'を使用する場合は、' cells'の前に '.'を追加してください。編集:またはすべてのワークシートオブジェクト。 – findwindow

+0

@findwindowどちらも? –

+3

これらのすべて。行を含む。あなたがそれを使うつもりなら、 'with'を見てください。 – findwindow

答えて

1

私はwithステートメントを使用しましたが、読みやすくするためにいくつかのコードを再編集しました。

Sub Filter_WGM() 

Dim PTASK_Template As Workbook 
Dim WGMd As Worksheet 
Dim LRMf As Long 

    Set PTASK_Template = Workbooks("BCRS Unassigned Tasks Template.xlsm") 
    Set WGMd = PTASK_Template.Sheets("WGM") 

    Application.ScreenUpdating = False 
    Application.Calculation = xlCalculationManual 

    With WGMd 
     For LRMf = .Cells(.Rows.Count, 3).End(xlUp).Row To 2 Step -1 
      If .Cells(LRMf, 3).Value <> "WorkGroup Manager" Then 
       .Rows(LRMf).Delete 
      End If 
     Next LRMf 
    End With 

    Application.ScreenUpdating = True 
    Application.Calculation = xlCalculationAutomatic 

End Sub 

また、これをさまざまなシートで使い、さまざまな値を調べる場合は、次の行に沿って試してみることもできます。その後、このサブオフをキックして関連するパラメータを渡すことができます。 (このコードはテストされていないので注意してください)。

関連する問題