我目前有两个宏:
在第一个宏中调用第二个宏来执行任务。但是,我在第二个宏中有逻辑,该宏声明如果变量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我相信问题可能是静态没有赋予宏1对变量LastRow的访问权限。
最好的方法是什么?
致以问候!
发布于 2013-06-03 12:57:12
您可以以这种方式使用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程序,应卸载所有窗体。如果没有其他程序保存对从公共类模块创建的对象的引用,并且没有执行代码,程序就会立即关闭。
发布于 2013-06-03 11:57:10
例如,您可以使用函数而不是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发布于 2013-06-03 19:39:20
在第一个宏中声明变量,并将其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 FunctionByRef意味着您在Mac2中对lLastRow所做的任何更改都将反映在Mac1中的lLastRow中。
https://stackoverflow.com/questions/16895948
复制相似问题