2017-04-13 9 views
2

私は次のコードを作成しました。マクロでは、セルA2:G3000に1を掛けて、フォーマットがテキストから数値に変わるようにする必要があります。私が書いたマクロはそうしていますが、アクティブなワークシートだけです。私はそれを学んだのでFor Each/Nextループを使いました。各/次のループがすべてのワークシートを巡回しない

誰かが私のミスをコードに見つけるのを助けることができますか?一般的に

Sub Format_Change() 

Dim sht As Worksheet 

For Each sht In Worksheets 
    Range("M2").Select 
    ActiveCell.FormulaR1C1 = "=RC[-12]*1" 
    Range("M2").Select 
    Selection.AutoFill Destination:=Range("M2:W2"), Type:=xlFillDefault 
    Range("M2:W2").Select 
    Selection.AutoFill Destination:=Range("M2:W3000"), Type:=xlFillDefault 
    Range("M2:W3000").Select 
    Selection.Copy 
    Range("A2").Select 
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ 
    :=False, Transpose:=False 
    Range("M2").Select 
    Range(Selection, Selection.End(xlDown)).Select 
    Range(Selection, Selection.End(xlToRight)).Select 
    Application.CutCopyMode = False 
    Selection.ClearContents 
Next sht 

End Sub 

答えて

5

@Vityataが述べたように非常に多くのSelectSelectionを使用する必要は本当にありません、以下のコードを試してみてください、それは多くのコードを遅くします。

は、以下のコードのバージョンを試してみてください。

Option Explicit 

Sub Format_Change() 

Dim sht As Worksheet 

For Each sht In Worksheets 
    With sht 
     .Range("M2").FormulaR1C1 = "=RC[-12]*1" 
     .Range("M2").AutoFill Destination:=.Range("M2:W2"), Type:=xlFillDefault 
     .Range("M2:W2").AutoFill Destination:=.Range("M2:W3000"), Type:=xlFillDefault 
     .Range("M2:W3000").Copy 
     .Range("A2").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ 
      :=False, Transpose:=False 
     Application.CutCopyMode = False 
     .Range(.Range("M2"), .Range("M2").CurrentRegion).ClearContents 
    End With 
Next sht 

End Sub 
+1

+1しかし、もしOPが実際にページが変化していて、仕事が完了しているのを見たいのであれば?それはどういうわけかExcelファイルを "働く"と思っていい感じです... '選択 'がなければ' action'は表示されません:) – Vityata

+0

@Vityataそれはいいです;) –

+2

@Vityataええ、あなたは前に座っていますあなたのフロントローディングワッシャーと電子レンジのちょうどそれらを見終えるために見て? –

2

コードは、それがあまりにも多くの選択使用しているため、良くないとなど、ここでHow to avoid using Select in Excel VBA macrosをお読みください。しかし、それを実行中のものにしたい場合は、for-eachループの後にsht.Selectを追加するだけです。

Option Explicit 


Sub Format_Change() 

    Dim sht As Worksheet 

    For Each sht In Worksheets 
     sht.Select 
     Range("M2").Select 
     ActiveCell.FormulaR1C1 = "=RC[-12]*1" 
     Range("M2").Select 
     Selection.AutoFill Destination:=Range("M2:W2"), Type:=xlFillDefault 
     Range("M2:W2").Select 
     Selection.AutoFill Destination:=Range("M2:W3000"), Type:=xlFillDefault 
     Range("M2:W3000").Select 
     Selection.Copy 
     Range("A2").Select 
     Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ 
      :=False, Transpose:=False 
     Range("M2").Select 
     Range(Selection, Selection.End(xlDown)).Select 
     Range(Selection, Selection.End(xlToRight)).Select 
     Application.CutCopyMode = False 
     Selection.ClearContents 
    Next sht 
End Sub 
+3

をいいえ、いいえ、いいえ、是非、あなたはそれより優れている;) –

+1

@ShaiRado - 今日ない+それは働きます! – Vityata

+1

OK、+1ですが、私のOCDは「選択」を使わずに答えを出させませんでした。私を許して欲しいです;) –

関連する問題