2017-11-11 10 views
0

1つのExcelワークブックで、VBAサブルーチンを実行するためにさまざまなワークシートを選択します。選択したワークシートをループする方法を示すコードが見つかりました。 "MsgBox sh.Name"を使用しています。ただし、コードを配置すると、最後に選択したシートにのみ影響します。選択したExcelワークシートをループする

たとえば、Sheet1、Sheet2、およびSheet3を(この順序で)選択すると、Sheet3のみが変更されます。以下は私のコードの簡単な例です。最後に選択したシートには、 "123"がセルA1に割り当てられます。

Sub SimplifiedExample() 

    Dim sh As Worksheet 
    Dim selectedshs As Object 
    Set selectedshs = ActiveWindow.SelectedSheets 
    For Each sh In selectedshs 
     'MsgBox sh.Name 
     Range("A1") = 123 
    Next sh 

End Sub 

以下は、私がループしているコードです。テストに合格すると、データのリストに行が追加されます。このコードは、一度に1枚のシートに対して機能します。

Sub LoopingWorksheets() 

    Dim sh As Worksheet 
    Dim selectedshs As Object 

    Set selectedshs = ActiveWindow.SelectedSheets 

    For Each sh In selectedshs 

     Do While Application.WorksheetFunction.Max(Range("A:A")) < Range("Z2") 

      ActiveSheet.Range("A50000").Select 
      Selection.End(xlUp).Select 
      Selection.EntireRow.Insert 
      ActiveCell.Offset(-1, 0).Rows("1:1").EntireRow.Select 
      Selection.Copy 
      ActiveCell.Offset(1, 0).Range("A1:A2").Select 
      ActiveSheet.Paste 
      Application.CutCopyMode = False 
      Range("A1").Select 

     Loop 

    Next sh 

End Sub 
+1

[Excel VBAでの選択の使用を避ける方法](https://stackoverflow.com/q/10714251/6535336)を参照してください。 – YowE3K

+0

期間識別子で範囲を限定する必要があります。いいえ、どこで 'sh'をループで使用しますか? – Parfait

答えて

2

Rangeオブジェクトをアクティブなワークシート(私が推論するのはあなたが参照する最後のシート)にデフォルト設定しています。

Dim sh As Worksheet 
Dim selectedshs As Object 
Set selectedshs = ActiveWindow.SelectedSheets 
For Each sh In selectedshs 
    with sh 
     debug.print .Name 
     .Range("A1") = 123 
    end with 
Next sh 

あなたは、あなたが同様に実際にそれらをごサイクルとして各SHを使用する場合がありますActiveWindow.SelectedSheetsを巡回しようとしている場合。

+0

私は簡単な例を得ることができます。しかし、私の実際のコード(上記を参照)が挿入されても、それでもすべてのシートを順番に処理しません。それ以上の提案はありますか? – John63

関連する問題