友情提示:如果本网页打开太慢或显示不完整,请尝试鼠标右键“刷新”本网页!阅读过程发现任何错误请告诉我们,谢谢!! 报告错误
飞读中文网 返回本书目录 我的书架 我的书签 TXT全本下载 进入书吧 加入书签

excel_vba_编程教程(完整版)-第94章

按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
————未阅读完?加入书签已便下次继续阅读!



语句,或者按下F8。调试菜单包含好几个选项供你在逐步模式下执行(参见图13…14)  

                                                                                                 
图13…14 调试菜单提供了许多命令以逐步VBA过程  

                                           258 

… 页面 275…

当你每次运行一条语句时,VB将会执行每条语句,直到它碰到关键字End Sub。如果你不希望VB逐 
句运行的话,那么你随时可以按下F5来运行过程中剩余的代码,而不必逐步运行。  

11。逐句运行过程  

1。  将插入点置于你想要追踪的过程中代码的任意地方  
2。  按下F8或者选择调试|逐语句。VB就会执行当前语句,并且自动跳到下一句并中断执行。在中 
    断模式下,你可以激活立即窗口,监视窗口或者本地窗口,查看某特定语句中变量和表达式的 
    值。以及,如果你正在逐语句执行的过程调用了其它过程,那么你也可以激活调用堆栈窗口来 
    查看当前哪些过程是活动的  
3。  再次按下F8,执行被选中的语句。执行完该语句后,VB会选中下一条语句,并且该过程将再次 
    中断  
4。  按下F8继续逐语句执行该过程,或者按F5无停止的执行完剩余的代码。你也可以选择运行|重 
    新设置来终止该过程的执行,而不执行剩下的语句  
当你逐过程运行某个过程(Shift+F8)时,VB将一次执行一个过程,好像里面只有一条语句一样。 
如果某过程调用了其它过程,并且你并不像逐语句执行这些过程,因为你已经测试过了,或者因为 
你只想侧重于尚未被调试的新代码,那么该选项特别有用。  

12。逐过程执行过程  

假设过程MyProcedure的当前语句调用过程SpecialMsg。如果你选择调试|逐过程(Shift+F8),而 
非调试|逐语句(F8),那么VB就会快速地执行过程SpecialMsg里面的所有语句,并且选择主调过程 
MyProcedure里的下一条语句。在过程SpecialMsg的执行期间,VB将继续显示当前过程于代码窗口。  
1。  在当前模块里输入下述过程:  
     Sub MyProcedure()   
         Dim myName As String   
         Workbooks。Add   
         myName = ActiveWorkbook。Name   
           ‘ choose Step Over to avoid stepping through the   
           ‘ lines of code in the called procedure … SpecialMsg   
         SpecialMsg myName   
         Workbooks(myName)。Close   
     End Sub   
     Sub SpecialMsg(n As String)   
          If n = 〃Book2〃 Then   
              MsgBox 〃You must change the name。〃   
         End If   
     End Sub   
2。  在下面语句处添加一个断点:  
    SpecialMsg myName  
3。  将插入点置于过程MyProcedure的代码中,并按下F5运行它。VB到达断点时将中断执行  
4。  按下Shift+F8,或者选择调试|逐过程。VB将会快速的运行过程SpecialMsg并且跳到紧挨着调 
    用过程SpecialMsg的语句下面的那条语句  
5。  按下F5无间断地完成过程的运行  
当你不要分析被调过程中具体语句的话,逐过程执行是非常有用的。  
调试菜单上的另外一个命令,跳出(Ctrl+Shift+F8),当你步入了某个过程,然后决定不继续逐步 
执行它,那么就可以使用该命令。当你喧杂该选项时,VB就会一步执行完该过程里的剩余语句,然 
后继续去激活主调过程中的下一条语句。  
在逐步运行过程期间,你可以在逐语句,逐过程和跳出选项之间切换。选择哪个取决于这时你想要 
分析哪个代码片断。  
调试菜单中运行到光标处(Ctrl+F8)命令让你运行过程,直到碰到你选中的行。如果你想要在执 
行一个大循环之前停止,或者想要跳过一被调过程时,该命令非常有用。  
假设你想要执行过程MyProcedure到调用过程SpecialMsg的行。  
                                          259 

… 页面 276…

1。  点击语句SpecialMsg myName内部  
2。  选择调试|运行到光标处。当到达特定行时,VB将停止执行  
3。  按下Shift+F8以逐过程地运行过程SpecialMsg  
4。  按下F5无间断地执行完剩下的代码  

13。设置下一条语句  

有时,你也许想要重新运行过程中前面的几行代码,或者想要跳过一段将导致麻烦的代码。每遇到 
这种情况,你可以使用调试菜单里的设置下一条语句选项。当你中断过程的执行时,你可以随意恢 
复任何语句。VB将会跳过所选语句和中断处语句之间的语句。假设在过程MyProcedure(参见前面 
部分的代码)中,你已经在调用过程SpecialMsg的语句处设置了断点。要跳过过程SpecialMsg的执 
行,你可以将光标置于语句Workbooks(myName)内,关闭并按下Ctrl+F9(或者选择调试|设置下一 
条语句)。除非你中断了过程的执行,否则不能使用设置下一条语句选项。  
技巧13…4 跳过代码行  
尽管跳过代码行在你的过程调试中非常有用,但是你得非常小心。当你使用下一条语句选项时,你 
告诉VB这是你想要执行的下一条语句。中间的所有代码行将被忽略,这意味着期间有很多你本预期 
要发生的事情并没有发生,这将可能导致意想不到的错误。  

14。显示下一条语句  

如果你不肯定过程的执行会从哪里继续,那么你可以选择调试|显示下一条语句,这样VB就会将光 
标放置到下次将运行的代码行。当你正在看别的过程,不知道下面会执行哪条代码的时候,该命令 
尤其有用。显示下一条语句选项仅在中断模式下可用。  

15。终止和重新设置 VBA 过程  

任何时候在逐步过程代码时,你可以:  
* 按下F5无间断地执行剩余指令  
* 选择运行|重新设置来终止过程,而不执行剩下的语句  
当你重新设置过程时,所有变量将丢失它们的当前值。数字型变量恢复为其初始值0,变化长度的 
字符串变量初始化为0长度字符串(””),而固定长度的字符串用ASCII码0代表的字符或者Chr(0) 
填充。Variant型变量初始化为Empty,对象变量则设置为Nothing。  

16。了解和使用条件编译  

当你第一次运行某个过程时,VB会将你使用的VBA语句转变为计算机能够理解的机器码。该过程被 
称为编译。你也可以选择调试|编译(当前VBA工程名称),在你运行该过程之前执行整个VBA工程的 
编译。  
使用条件编译,你可以告诉VB在编译或者运行时包括或者忽略某些代码块。取决于你设置的条件, 
你的过程可能会表现不同。例如,条件编译用来编译一个将会运行于不同平台(Windows 或者 
Macintosh,Win16或者Win32)上的应用软件。条件编译对于本地化使用于不同语言的应用软件也 
是很有用的。在条件编译时排除的程序代码将从最终文件中忽略掉,因此,它对文件大小或程序功 
效没有影响。  
要激活条件编译的话,你应该使用叫做指示的特殊表达式。首先,你需要使用#Const指示声明一个 
布尔值(True或者False)常量,接下来,你在#If 。 。 。Then。。。 #Else指示中核实该常量。你需 
要进行条件编译的代码部分必须包括在这些指示中。注意,关键字If和Else前面都带有一个数字符 
号(#)。  
如果一部分代码将要运行,那么该条件常量必须设置为真(…1),否则为假(0)。在模块的声明部 
分声明条件常量,例如:  
#Const User = True   
声明名为User的条件常量。  
在接下来的过程中,当名叫verPolish条件常量为True时,数据就显示为波兰语。过程WhatDate调 
用函数DayOfWeek,它基于提供的日前返回星期名称。要用英语编译该程序的话,你所要做的全部 
就是将该条件常量改为False,然后VB就会跳到#Else指示后面的指令块去。  
1。  在当前VBA工程插入一个新模块,并重命名为Conditional  

                                            260 

… 页面 277…

2。  输入下述过程和函数:  
      ‘ declare a conditional piler constant   
     #Const verPolish = True   
     Sub WhatDay()   
         Dim dayNr As Integer  
         #If verPolish = True Then   
              dayNr = WeekDay(InputBox(“Wpisz date; np。 01/01/2000”))   
              MsgBox “To bedzie “ & DayOfWeek(dayNr) & “。”   
         #Else   
              WeekdayName   
         #End If   
     End Sub   
     Function DayOfWeek(dayNr As Integer) As String   
         DayOfWeek = Choose(dayNr; “niedziela”; “poniedzialek”; “wtorek”; _   
               “sroda”; “czwartek”; “piatek”; “sobota”)   
     End Function   
     Function WeekdayName() As String   
         Select Case WeekDay(InputBox(“Enter date; e。g。 01/01/2000”))   
            Case 1   
              WeekdayName = “Sunday”   
            Case 2   
              WeekdayName = “Monday”   
            Case 3   
              WeekdayName = “Tuesday”   
            Case 4   
              WeekdayName = “Wednesday”   
            Case 5  
              WeekdayName = “
返回目录 上一页 下一页 回到顶部 1 1
未阅读完?加入书签已便下次继续阅读!
温馨提示: 温看小说的同时发表评论,说出自己的看法和其它小伙伴们分享也不错哦!发表书评还可以获得积分和经验奖励,认真写原创书评 被采纳为精评可以获得大量金币、积分和经验奖励哦!