我目前有2个宏:
在第一个宏中调用第二个宏来执行任务。但是我在第二个宏中有逻辑,表明我的变量 LastRow< 3 然后退出子。这当然会让我们立即回到宏1.我想要的是然后立即退出宏1 。我尝试这样做的方法是在两个宏中公开LastRow ..所以当我们退回到宏1时,我们有:
sub macro1()
application.run("macro2")
if LastRow < 3 then
exit sub
end sub
其中宏2()
sub macro1()
Static LastRow As Long
if LastRow < 3 then
exit sub
else do something
end if
end sub
我相信我的问题可能是静态没有给宏变量LastRow的宏1访问权限。
最好的方法是什么?
问候!
答案 0 :(得分:7)
您可以这样使用End statement
:
sub macro2()
Static LastRow As Long
if LastRow < 3 then
'...here is End
End
else
'do something
end if
end sub
但是,End
有一些你应该注意的缺点。让我以MSDN为基础引用它们:
立即终止执行。从来没有要求,但可能是 放置在程序中的任何位置以结束代码执行,关闭文件 用Open语句打开并清除变量。
执行时,End语句重置所有模块级变量和 所有模块中的所有静态局部变量。保持价值 这些变量,请改用Stop语句。然后你可以恢复 执行时保留这些变量的值。
End语句提供了一种强制程序停止的方法。对于 正常终止Visual Basic程序,你应该卸载所有 形式。一旦没有其他程序,您的程序就会关闭 保存对从公共类模块创建的对象的引用 并且没有代码执行。
答案 1 :(得分:1)
您可以使用Function而不是Sub,例如返回一个布尔值。
Function macro2() As Boolean
'returns false if the last row is 2 or less, true otherwise
LastRow As Long
if LastRow >= 3 then
macro2 = True
'do something
end if
End Function
然后在你的第一个宏中:
sub macro1()
if Not macro2 Then Exit Sub
end sub
答案 2 :(得分:0)
在第一个宏中声明变量并将其ByRef传递给第二个宏。
Sub Mac1()
Dim lLastRow As Long
Mac2 lLastRow
If Not IsTooBig(lLastRow) Then
'do stuff
End If
End Sub
Sub Mac2(ByRef lLastRow As Long)
lLastRow = 5
If IsTooBig(lLastRow) Then
Exit Sub
End If
End Sub
Function IsTooBig(ByVal lLastRow As Long) As Boolean
IsTooBig = lLastRow >= 5
End Function
ByRef意味着您在Mac2中对lLastRow所做的任何更改都将反映在Mac1中的lLastRow中。