立即运行多个子从一个独特的VBA子
我在VBA模块中有三个不同的子系统可用,并且想要通过一个VBAbutton激活一个独特的子系统来调用这些子系列。
下面的代码运行:
Sub Updateworkbook() Call Unprotectworkbook Call CopyAndPaste Call Protectworkbook End Sub
第一个Sub Unprotectworkbook()
运行后,另一个Sub
不被调用和执行。 为什么会发生?
在Unprotectworkbook()
子代码下面供您参考
Sub Unprotectworkbook() Dim myCount Dim i myCount = Application.Sheets.Count Sheets(1).Select For i = 1 To myCount ActiveSheet.Unprotect "password" If i = myCount Then End End If ActiveSheet.Next.Select Next i End Sub
修改您的代码,如下所示(将End
更改为Exit Sub
):
Sub Unprotectworkbook() Dim myCount Dim i myCount = Application.Sheets.Count Sheets(1).Select For i = 1 To myCount ActiveSheet.Unprotect "password" If i = myCount Then Exit Sub End If ActiveSheet.Next.Select Next i End Sub
或者您可以简单地将其更改为下一个:
Sub Unprotectworkbook() Dim sh For Each sh In Sheets sh.Unprotect "password" Next End Sub
没有看到所有三个子代码,很难回答你的问题。
一些指针虽然:
-
您不需要select每个工作表来修改它 – 只需使用
Sheet(i).Unprotect "password"
。而不是在for循环中Sheet(i).Unprotect "password"
。 -
另外,因为你有一个for循环,所以如果你已经正确的定义了
For i = 1 To myCount
语句,你不需要编码什么时候结束。 换句话说,删除If i = myCount Then End
部分。 -
你可以像下面那样定义For循环:
For i = 1 To Application.Sheets.Count
简化你的代码,你可以删除myCount
variables。 -
您应该始终使用数据types定义您的variables,以最大限度地减less错误,例如使用
Dim i As Integer
代替。 -
始终在每个模块的顶部使用
Option Explicit
,以最大限度地减less由拼写错误等引起的混淆和错误。
我强烈build议你在VBA上运行几个教程,周围有很多。 以下是search时仅有的第一个,我还没有尝试过: Excel VBA基础教程1
如果这有帮助的话,我build议先制作另外一组3个零件来testing空白项目。 否则使用上面的其他答案之一。
Sub msgTEST0() 'Call msgTEST0 Call msgTEST1 Call msgTEST2 Call msgTEST3 End Sub Sub msgTEST1() MsgBox "MSG1" & Space(10), vbQuestion End Sub Sub msgTEST2() MsgBox "MSG2" & Space(10), vbQuestion End Sub Sub msgTEST3() MsgBox "MSG3" & Space(10), vbQuestion End Sub