2017-01-23 7 views
0

私は独立して動作する2つのマクロを持っています。私はもう一方を入れ子にしたい。マクロ内でのマクロのネスト

私は、それらの下に散発的なフッターの行のカップルを持っている定期的なファイルを受け取ります。私はこれらのフッターを削除する必要があります。各ファイルの行数はさまざまですが、データの末尾とフッターの間には常に空の行があります。

最初のマクロは、第2のマクロは、私はネスト最初のマクロ(したい行の下のすべて「X」

Sub FTPstep3() 
' 
' FTPstep3 Macro 
' 
With Sheets("Sheet1") 
    .Rows(X & ":" & .Rows.Count).Delete 
End With 
End Sub 

を削除列に

Sub FTPstep2() 
' 
' FTPstep2 Macro 
' 

' 
If Application.WorksheetFunction.CountA("A:A") = 0 Then 
    [A1].Select 
Else 
    On Error Resume Next 
    Columns(1).SpecialCells(xlCellTypeBlanks)(1, 1).Select 
    If Err <> 0 Then 
     On Error GoTo 0 
     [A65536].End(xlUp)(2, 1).Select 
    End If 
    On Error GoTo 0 
End If 
End Sub 

を見ることによって、空の行を検索しFTPstep2)ここで、 "X"は2番目のマクロにあります(FTPstep3)。あなたが必要なもの

+0

A1:A500にデータがあり、A1000:A1005にデータがあり、後者を削除したいとお考えですか? – SJR

+1

['.Select' /' .Activate'の使用を避けることもベストです(https://stackoverflow.com/questions/10714251/how-to-avoid-using-select-in-excel-vba-macros) – BruceWayne

+0

あなたはあまりにもひどく設計されたコードではあまりできません。 –

答えて

1

は、あなたがマクロ「FTPstep3」で使用できる値を返す関数であるなど、

を私は、様々な経路を試みたが、それはアンパサンドが好きまたは終了ステートメントを期待していない傾向がありますこのコードをチェックして動作するか確認してください。

Function FTPstep2() As String 
' 
' FTPstep2 Macro 
Dim returnValue As Integer 

' 
If Application.WorksheetFunction.CountA("A:A") = 0 Then 
    returnValue = 1 
Else 
    On Error Resume Next 
    returnValue = Columns(1).SpecialCells(xlCellTypeBlanks)(1, 1).Row 
    If Err <> 0 Then 
     On Error GoTo 0 
     returnValue = [A65536].End(xlUp)(2, 1).Row 
    End If 
    On Error GoTo 0 
End If 

FTPstep2 = returnValue 

End Function 

Sub FTPstep3() 
' 
' FTPstep3 Macro 
' 
With Sheets("Sheet1") 
    .Rows(FTPstep2 & ":" & .Rows.Count).Delete 
End With 

End Sub 

このコードは、「A」列にある最初の空白セルの下の行を削除します。

関数はサブルーチンと同様であり、それらは、任意の入力を与えることができる(この場合、私が「FTPstep2」関数に任意のパラメータを渡さない)、彼らは(ラインに気づく他の手順で使用することができる値を返すFTPstep2 = returnValue )。ここでは不要なので、すべてのSelect命令は削除されており、VBAはセルを変更するためにセルを選択する必要がないため、使用することはお勧めしません。この場合でも、End()Offset()を使用してワークシート全体を移動することに依存している場合は、これを改善できるかどうかを確認する必要があります。

ところで、私はあなたのサブと関数のより有益な名前を選択します。あなたが書いて維持している機能を再利用しやすくなります。たとえば、自分自身をアドインにして、適切にコードを再利用したり、他のプロジェクトで再利用したいあらゆる種類の便利なカスタム関数を持つコードモジュールを書き出すことができます。

ハッピーコーディング!

編集:これを指摘して@barrowc、VBA Functionの短い定義を修正し感謝!

+2

「関数はサブと似ていますが、ワークシートを変更しません」という一般的なVBAの説明ではなく、UDF(つまり式で呼び出すことができる特定の種類の「関数」) Function' – barrowc

+1

'Function'は「サブと似ていますが、出力として値を与えます」というものを簡単に定義したかったのです。たぶん、私が使った言葉は、最も正確ではありません。私は別の定義を使用し、答えを編集することができます、あなたは何を示唆しますか? –

+1

答えは「ワークシートを変更しないでください」部分を除いてうまくいくようです。 – barrowc