2017-01-23 102 views
0

我有兩個獨立工作的宏。我想在另一箇中嵌套一個。在宏中嵌套一個宏

我收到一個反覆出現的文件,其底部有幾行零星的頁腳。我需要刪除這些頁腳。每個文件中的行數都不相同,但數據結尾和頁腳之間總是有一個空行。

第一個宏通過查看列找到空行A

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 

第二個宏刪除下面一行「X」

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

我想窩第一個宏(一切FTPstep2)其中「X」在第二個宏(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」欄刪除它發現的第一個空白單元格下方的任何行。

函數與subs相似,它們可以被賦予任何輸入(在這種情況下,我不會將任何參數傳遞給函數「FTPstep2」),並且它們返回一個可用於其他過程的值(注意行FTPstep2 = returnValue )。我們也消除所有Select說明,因爲它們是不必要在這裏,它是不推薦使用它們,因爲VBA並不需要爲了修改它們選擇單元格。即使在這種情況下,我們依靠整個使用End()Offset()工作表中移動,你應該看到,如果這可以提高

順便說一句,我會選擇更多的信息名稱爲您的潛艇和功能,它會讓你更容易重用您編寫的功能並維護它們。例如,你可以讓自己的插件和重用代碼,你認爲合適,或導出具有各種有用的自定義函數,你可能希望在其他項目中重用代碼模塊。

快樂編碼!

編輯:更正了VBA的簡短定義Function,謝謝@barrowc指出這一點!

+2

「函數與subs相似,但它們不修改任何工作表」聽起來像是對UDF的描述(即可在公式中調用的特定受限種類的「Function」),而不是對一般VBA的描述。 Function' – barrowc

+1

我想給的'Function'就是一個簡單的定義,這種「像一個子,但它給出的值作爲輸出」。也許我用的措辭不是最準確的。我可以使用另一個定義並編輯答案,你會建議什麼? –

+1

答案看起來很好,除了「但他們不修改任何工作表」部分,所以也許只是刪除那一點 – barrowc