在宏中嵌套宏

时间:2017-01-23 21:35:02

标签: excel vba excel-vba

我有两个独立工作的宏。我想把一个嵌套在另一个里面。

我收到一个重复出现的文件,其底部有几排零星的页脚。我需要删除这些页脚。每个文件中的行数各不相同,但数据末尾和页脚之间始终存在空行。

第一个宏通过查看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)中。我尝试了各种各样的路线,但它往往不喜欢&符号或期望结束语句等。

1 个答案:

答案 0 :(得分:1)

你需要的是一个函数,它返回一个你可以在宏中使用的值&#34; FTPstep3&#34;

检查此代码以查看其是否有效

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

此代码将删除它在列#34; A&#34;中找到的第一个空白单元格下方的任何行。

函数类似于subs,它们可以被赋予任何输入(在这种情况下,我不会将任何参数传递给函数&#34; FTPstep2&#34;)并且它们返回一个可以在其他中使用的值程序(注意行FTPstep2 = returnValue)。我们还删除了所有Select指令,因为这里不需要它们,并且不建议使用它们,因为VBA不需要选择单元格来修改它们。即使在这种情况下,我们依靠使用End()Offset()在整个工作表中移动,您应该看看是否可以改进

顺便说一句,我会为你的子和函数选择更多信息的名称,它会让你更容易重用你编写和维护它们的函数。例如,您可以自己创建一个加载项并根据需要重用代码,或者导出一个代码模块,该代码模块具有您可能希望在其他项目中重用的各种有用的自定义函数。

快乐的编码!

修改:更正了VBA Function的简短定义,感谢@barrowc指出这一点!