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

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

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



vbThursday                    5  
vbFriday                      6  
vbSaturday                    7  
  
4。  从VB窗口运行该程序。运行几次,每次提供不同的日期。对照你的桌面或日历检查VB的答案是 
    否正确。  
技巧5…3 什么是结构化程序?  
结构化编程要求所有的程序具有模块化的设计,并使用三种逻辑结构:顺序,决定和循环。顺序结 
构为一条接一条地执行语句;决定结构则是让你基于一些条件的测试来执行一些特定的语句;而只 
要某特定的条件为真,循环结构就重复地执行某条或某些语句。循环是下章的主题。在结构化编程 
里,其它一些逻辑语句,例如GoTo,是不允许的。结构化程序的代码容易跟踪——它从上到下平稳 
地走下来,没有任何跳跃到特定标志去的语句。下面就是一个结构化程序和非结构化程序的例子:  
非结构化程序:   
  Sub GoToDemo()   
  Dim num; mystr   
    num = 1   
  If num = 1 Then   
    GoTo line1   
  Else   
    GoTo Line2   
  Line1:   
    mystr = “Number equals 1”   
    GoTo LastLine   
  Line2:   
    mystr = “Number equals 2”   
  LastLine:   

                                          107 

… 页面 124…

    Debug。Print mystr   
  End sub   
结构化程序:  
  Sub Structure()   
    Dim num; mystr   
    num = 1   
    If num = 1 Then   
      mystr = “Number equals 1”   
      Debug。Print mystr   
    Else   
      mystr = “Number equals 2”   
    End if   
  End Sub   
当你在起草你的VBA程序,并且需要从一个程序的一行跳到另一行时,你可能会被使用GoTo语句所 
诱惑,不要跳跃。依赖于使用GoTo语句来你程序的路径将导致令人迷惑的代码,被称为意大利式面 
条代码。使用结构化编程,你可以轻易地到达你程序里的目的地。  
这里是另外一个示范If…Then…Else语句的过程:  
Sub EnterData()   
  Dim cell As Object   
  Dim strmsg As String   
  On Error GoTo VeryEnd   
  strmsg = 〃Select any cell:〃   
  Set cell = Application。InputBox(prompt:=strmsg; Type:=8) cell。Select   
     If IsEmpty(ActiveCell) Then   
         ActiveCell。Formula = InputBox(〃Enter text or number:〃)   
     Else   
         ActiveCell。Offset(1; 0)。Select   
     End If   
  VeryEnd:   
End Sub   
上面的字程序EnterData提示用户选择任意单元格,然后单元格地址赋值于对象变量cell。 
If…Then…Else结构检查被选择的单元格是否为空。IsEmpty是个内置函数,用来决定某个变量是 
否已经被初始化了。如果该变量没有被初始化,那么IsEmpty函数返回true(真)。回想我们说过, 
当变量被赋予第一个值时,它就被初始化了。在本过程中,如果当前单元格为空时,VB将它当作一 
个零长度的字符串(””)。除了:  
If IsEmpty(ActiveCell) Then  
你还可以使用下述指令:  
If ActiveCell。Value = 〃〃 Then   
如果当前单元格为空,Then后面的语句就会被执行。该语句提示用户输入一个文本或数字,并且一 
旦数据被提供,该数据就会输入给当前单元格。如果当前单元格不为空,VB将跳到子句Else后面的 
指令。该指令将让VB选择同列里的下一个单元格。当你运行该过程,信息框提示你选择一个单元格, 
在工作表上,点击任何单元格。被选择的单元格地址就会出现在信息框的编辑框里面。点击确定退 
出信息框。VB检查被选择单元格的内容并且跳到你过程里的true或false指令块(true指令块在Then 
后面,而false指令块在Else后面)。  

5。If…Then…ElseIf 语句  

很多时候,你需要检查很多种情况,你可以使用子句ElseIf来将一些If条件结合在一起。使用 
If…Then…ElseIf语句,你可以比用前面章节中的If…Then…Else语句评估更多的条件。这里是 
If…Then…ElseIf语句的语法:  
If 条件1 Then   

                                          108 

… 页面 125…

  条件1为真时要执行的语句   
ElseIf 条件2 Then   
  条件2为真时要执行的语句   
ElseIf 条件3 Then   
  条件3为真时要执行的语句   
ElseIf 条件N Then   
  条件N为真时要执行的语句   
Else   
  所有条件都为假时要执行的语句   
End If  
Else子句是可选的;如果当所有条件为假时,没有要执行的操作,那么你就可以忽略它。  
技巧5…4 ElseIf子句  
你的程序里可以包括任何多个ElseIf子句和条件。ElseIf子句总是出现在Else子句之前的,只有当 
ElseIf子句的条件为真时,它的语句才会被执行。  
我们来看看下述例子:  
If ActiveCell。Value = 0 Then   
  ActiveCell。Offset(0; 1)。Value = 〃zero〃   
  ElseIf ActiveCell。Value 》0 Then   
       ActiveCell。Offset(0; 1)。Value = 〃positive〃   
  ElseIf ActiveCell。Value 0),如果该值不大于0,VB将跳到下个ElseIf并检查条件 
ActiveCell。Value 0 Then   
       ActiveCell。Offset(0; 1)。Value = 〃positive〃   
     ElseIf ActiveCell。Value 《 0 Then   
       ActiveCell。Offset(0; 1)。Value = 〃negative〃   
      ‘End If (原文错误,多一个End If)  
  End If   
End Sub  
因为你需要运行过程WhatValue好几次来测试各种条件,所以,我们给它设置个临时的快捷键。  
4。  打开立即窗口,并且输入下列语句:  
Application。OnKey 〃^+y〃; 〃WhatValue〃  
一旦按下回车键,VB就会运行OnKey方法将过程WhatValue赋予组合键Ctrl+Shift+Y。这个键盘快捷 
键只是临时的——当你重新启动Excel后它就不起作用了。你同样也可以用Excel界面…工具菜单… 
宏对话框里的选项来设置快捷键。  
5。  切换到Excel界面,并激活Sheet1  
6。  在单元格A1里输入0,并且按下Ctrl+Shift+Y。VB将调用过程WhatValue并在单元格B1厘米输入 
     “zero”  

                                           109 

… 页面 126…

7。  在单元格A1里输入任意大于0的数字,并按下Ctrl+Shift+Y,VB将再次调用WhatValue。VB评估 
     第一种条件,因为该测试的结果为假,所以它跳到ElseIf语句。第二个条件为真,因此VB执行 
     Then后面的语句,并且跳过下一条语句,直接到End If。因为End If后面并没有其它的语句了, 
     该过程便结束了,单元格B1现在显示“positive”。  
8。  在单元格A1里输入任意小于0的数字,并按下Ctrl+Shift+Y。这次,前面两个条件都返回假, 
     因此VB继续检查第三个条件。因为这次的测试为真,VB就在单元格B1里贴上标签“negative”  
9。  在单元格A1里输入任何文本,并按下Ctrl+Shift+Y,VB的反应是“positive”,然而,这不是 
     个满意的答案。你也许希望VB通过显示“text”来区分开正数和文本。要使你的过程WhatValue 
     更“聪明”些,你就需要学习如何通过使用嵌套的If…Then语句来作一些更复杂的决定。  

6。嵌套的 If…Then 语句  

将一个If…Then语句或If…Then…Else语句放在另外一个If…Then语句或If…Then…Else语句里 
面,你可以在你的VBA过程里作出更复杂的决定。这种一个If语句里包含另一个If指令块的结构称 
为嵌套的If语句。  
接下来的过程TestConditions世上节里的过程WhatValue的修正版,演示嵌套的If…Then语句是如 
何工作的:  
Sub TestConditions()   
   Range(〃A1〃)。Select   
   If IsEmpty(ActiveCell) Then   
     MsgBox 〃The cell is empty。〃   
   Else   
        If IsNumeric(ActiveCell。Value) Then   
          If ActiveCell。Value = 0 Then   
               ActiveCell。Offset(0; 1)。Value = 〃zero〃   
          ElseIf ActiveCell。Value 》 0 Then   
               ActiveCell。Offset(0; 1)。Value = 〃positive〃   
          ElseIf ActiveCell。Value 《 0 Then   
               ActiveCell。Offset(0; 1)。Value = 〃negative〃   
          End If   
        Else   
          ActiveCell。Offset(0; 1)。Value = 〃text〃   
        End If   
   End If   
End Sub   
为了使过程TestConditions
返回目录 上一页 下一页 回到顶部 1 1
未阅读完?加入书签已便下次继续阅读!
温馨提示: 温看小说的同时发表评论,说出自己的看法和其它小伙伴们分享也不错哦!发表书评还可以获得积分和经验奖励,认真写原创书评 被采纳为精评可以获得大量金币、积分和经验奖励哦!