2017-11-08 9 views
0

私は私が私のワークブックに追加したいと思い、このサイト上のコードの逸品を見つけました:マクロとして表示されないサブを実行するにはどうすればよいですか?

Trim all cells within a workbook(VBA)

コードがある:

Sub DoTrim(Wb As Workbook) 
    Dim aCell As Range 
    Dim wsh As Worksheet 

    '~~> If you are using it in an Add-In, it is advisable 
    '~~> to keep the user posted :) 
    Application.StatusBar = "Processing Worksheets... Please do not disturb..." 
    DoEvents 

    Application.ScreenUpdating = False 

    For Each wsh In Wb.Worksheets 
     With wsh 
      Application.StatusBar = "Processing Worksheet " & _ 
            .Name & ". Please do not disturb..." 
      DoEvents 

      For Each aCell In .UsedRange 
       If Not aCell.Value = "" And aCell.HasFormula = False Then 
        With aCell 
         .Value = Replace(.Value, Chr(160), "") 
         .Value = Application.WorksheetFunction.Clean(.Value) 
         .Value = Trim(.Value) 
        End With 
       End If 
      Next aCell 
     End With 
    Next wsh 

    Application.ScreenUpdating = True 
    Application.StatusBar = "Done" 
End Sub 

私はコピーして試してみましたこれをExcelモジュールに貼り付けますが、実行方法を理解することはできません。私はです。実際にはですので、これは愚かな質問であれば事前にお詫び申し上げます。 Subがマクロとして表示されない理由を調べたところ、変数が含まれているため、Subがマクロとして表示されない可能性があります。

元のポスターがアドインを修正しようとしていたことを認識しています。私はちょうどそこにワークブックでこれを呼び出す方法があると思っています。

ありがとうございます!

+3

あなたは別の手順、例えばからそれを呼び出す必要がありますので、あなたのサブは、引数 'Wb'を持っています'DoTrim(Wb1)'ここで、wb1は呼び出しプロシージャで宣言され割り当てられたワークブック変数です。 – SJR

答えて

3

サブルーチンは、パラメータSub DoTrim(Wb As Workbook)としてブックを期待しているので、あなたがすることができます、Excelのモジュールは、あなたがトリミングする同じワークブック内にある場合は、マクロウィンドウ

からそれを実行することはできませんパラメータを削除し、ワークブックでワークシートをループに代わりThisWorkbookオブジェクトを使用して、以下のように:

Sub DoTrim() 
    Dim aCell As Range 
    Dim wsh As Worksheet 

    '~~> If you are using it in an Add-In, it is advisable 
    '~~> to keep the user posted :) 
    Application.StatusBar = "Processing Worksheets... Please do not disturb..." 
    DoEvents 

    Application.ScreenUpdating = False 

    For Each wsh In ThisWorkbook.Worksheets 
     With wsh 
      Application.StatusBar = "Processing Worksheet " & _ 
            .Name & ". Please do not disturb..." 
      DoEvents 

      For Each aCell In .UsedRange 
       If Not aCell.Value = "" And aCell.HasFormula = False Then 
        With aCell 
         .Value = Replace(.Value, Chr(160), "") 
         .Value = Application.WorksheetFunction.Clean(.Value) 
         .Value = Trim(.Value) 
        End With 
       End If 
      Next aCell 
     End With 
    Next wsh 

    Application.ScreenUpdating = True 
    Application.StatusBar = "Done" 
End Sub 
+1

「ThisWorkbook」の代替案は、コードを含むワークブックではなく、選択されたブック(つまり、Excelウィンドウの上部)でコードを実行する「ActiveWorkbook」にすることができます。 –

+1

変数を削除する代わりに、変数をオプションにしてデフォルトの 'ThisWorkbook'または' ActiveWorkbook'にすることで、必要に応じて特別に呼び出すことができます。 – NickSlash

関連する問題