在macros中嵌套一个macros

我有两个独立工作的macros。 我想在另一个之内嵌套一个。

我收到一个反复出现的文件,其底部有几行零星的页脚。 我需要删除这些页脚。 每个文件中的行数有所不同,但数据结尾和页脚之间总是有一个空行。

第一个macros通过查看列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 

第二个macros删除行“X”下面的所有内容

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

我想嵌套的第一个macros(FTPstep2)“X”在第二个macros(FTPstep3)中。 我尝试了各种各样的路线,但它往往不喜欢和号或期望结束语句等。

你需要的是一个函数,返回一个你可以在macros“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”中find的第一个空白单元格下面的任何行。

函数与subs相似,它们可以被赋予任何input(在这种情况下,我不会将任何parameter passing给函数“FTPstep2”),并且它们返回一个可以在其他过程中使用的值(注意行FTPstep2 = returnValue )。 我们也取消了所有的Select指令,因为在这里不需要,所以不build议使用它们,因为VBA不需要select单元格来修改它们。 即使在这种情况下,我们依靠使用End()Offset()在整个工作表中移动,您应该看看是否可以改进

顺便说一句,我会select更多的信息名称为您的潜艇和function,它会让你更容易重用你写的function和维护它们。 例如,你可以使自己成为一个插件,并在你认为合适的时候重新使用你的代码,或者导出一个代码模块,其中包含了你可能想在其他项目中重用的各种有用的自定义函数。

快乐的编码!

编辑 :更正VBA Function简短定义,谢谢@barrowc指出这一点!