2016-04-12 10 views
1

昨日、VBAを学ぶことにしました。それは期待通りに進んでいますが、私は今このコードで何時間も歯を壊しています。VBAのワークシートによるループ処理が優れています:ActiveWorkbook.Worksheets(I)?

すべての空の(タイトルを除く)列とこれをブックのすべてのシートで削除しようとしています。 多くのグーグルで私は自分のニーズに適応できるいくつかの例を見つけることができました。

私はこのコードを使用:私はこれを実行するとのみ、

Sub WorksheetLoop() 

Dim WS_Count As Integer 
Dim I As Integer 
Dim MyRange As Range 
Dim iCounter As Long 

WS_Count = ActiveWorkbook.Worksheets.Count 
For I = 1 To WS_Count 

'removecode 

    ' Define the target Range. 
     Set MyRange = ActiveWorkbook.Worksheets(I).UsedRange 

    'Start reverse looping through the range. 
    For iCounter = MyRange.Columns.Count To 1 Step -1 

    'If entire column is empty then delete it. 
    If Application.CountA(Columns(iCounter).EntireColumn) = 1 Then 
    Columns(iCounter).Delete 
    End If 

    Next iCounter 

'endremovecode 

     MsgBox ActiveWorkbook.Worksheets(I).Name 

    Next I 

    End Sub 

remove columns 、その後、私はこの中にそれをfrankensteined一緒に懐かしいマイクロソフトsupport

を使用することにより、シートをループし、それを試してみました開始ワークシートがクリーンアップされます。メッセージボックスはすべてをループします。

なぜですか?私は間違って何をしていますか? 私は解決策を見つけようとしましたが、ここのトピックのどれもがより明確になるように思われませんでした。

正しい方向に私を導いてくれてありがとう。

ララ

+0

ませんが、あなたはのように各ループにのためにあなたを変更することを検討する必要があります:

はこれを試してみてくださいActiveWorkbook.Worksheetsの各WSのために。 –

答えて

2
Columns(iCounter).EntireColumn 

Columns(iCounter).Delete 

のでアクティブシートの列ではないMyRangeを含むシートを参照MyRange付いていません。スティックMyRange.

+0

それはまったくそれだった。今私は愚かな気がする。 – Lara

1

あなたはほぼあります。 application.counta.columns().delete.の資格を取得するだけで、問題のシートに直接対応できるようになります。それ以外の場合は、アクティブシートで作業しているだけです。あなたの質問への答え

Sub WorksheetLoop() 

Dim WS_Count As Integer 
Dim I As Integer 
Dim MyRange As Range 
Dim iCounter As Long 
Dim ws As Worksheet 

WS_Count = ActiveWorkbook.Worksheets.Count 

For I = 1 To WS_Count 
    Set ws = ActiveWorkbook.Worksheets(I) 
    'removecode 

    With ws 
    ' Define the target Range. 
     Set MyRange = .UsedRange 

     'Start reverse looping through the range. 
     For iCounter = MyRange.Columns.Count To 1 Step -1 

      'If entire column is empty then delete it. 
      If Application.CountA(.Columns(iCounter).EntireColumn) = 0 Then 
      .Columns(iCounter).Delete 
      End If 

     Next iCounter 
    End With 

'endremovecode 

     MsgBox ws.Name 

    Next I 

    End Sub 
関連する問題