我有两个独立工作的宏。我想把一个嵌套在另一个里面。
我收到一个重复出现的文件,其底部有几排零星的页脚。我需要删除这些页脚。每个文件中的行数各不相同,但数据末尾和页脚之间始终存在空行。
第一个宏通过查看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 :(得分: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指出这一点!