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

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

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



的VBA程序。  
1。  关闭对象浏览器,如果你已经打开了的话  
2。  在模块Sample8里面,输入下列过程WhatRange:  
Sub WhatRange()   
       Dim newRange As Range   
       Dim tellMe As String   
       tellMe = 〃Use the mouse to select a range:〃   
       Set newRange = Application。InputBox(prompt:=tellMe; _   
              Title:=〃Range to format〃; _   
              Type:=8)   
       newRange。NumberFormat = 〃0。00〃   
       newRange。Select   
End Sub   
过程WhatRange开始于一对象变量的声明——newRange。试回想一下第三章,对象变量指向数据的 
地址。用户选择的单元格被赋值给对象变量newRange。注意变量名称前面的关键字Set:  
Set newRange = Application。InputBox(prompt:=tellMe; _   
  Title:=〃Range to format〃; _   
  Type:=8)   
类型参数(Type:=8)使用户能够选择任何单元格区域。当用户选中单元格区域时,下句指令:  

                                         98 

… 页面 115…

newRange。NumberFormat = 〃0。00〃  
改变所选单元格的格式。最后一句选择用户加亮的区域。  
3。  运行过程WhatRange。VB显示一个对话框,提示用户在工作表里选择一个单元格区域。  
4。  使用鼠标选择你要的单元格,当鼠标在单元格上拖动时,VB就会将选择的区域引用到对话框的 
    编辑框里面。  

                                                                       
图4…13 使用Excel的InputBox方法,你可以从用户处获得区域地址  
5。  你选择了单元格后,点击对话框上的确定按钮,被选择的区域就已经设置好格式了。要检查是 
    否按你的意思设置了,你可以在该区域的任意单元格里输入一个整数,这个数字应该显示为两 
    位小数。  
6。  重新运行该过程,并且当出现对话框时,点击取消按钮。如果你在选择了一个单元格或者一个 
    区域后点击确定按钮,过程WhatRange将工作正常。不幸地是,当你点击取消按钮或Esc按钮, 
    VB将显示一错误信息——“要求对象”。当你点击错误对话框上的调试按钮,VB就会加亮导致 
    错误的代码行。因为你不希望在取消对话框时选择任何单元格,所以你必须想个法子忽略VB 
    显示的这个错误。使用一个专门的语句,On Error GoTo 标志,你就可以绕过错误的发生。该 
    指令的语法如下:  
    On Error GoTo 标志  
    这个指令应该放在变量声明行的下面。标志可以是除了VB关键字之外的任何你想要的词语。如 
    果错误发生时,VB就会直接跳到该特别的标志,如下面步骤8所示。  
7。  选择“运行”…“重新设置”以取消正在运行的程序。  
8。  将过程WhatRange修改为如下所示WhatRange2:  
     Sub WhatRange2()   
       Dim newRange As Range   
       Dim tellMe As String   
       On Error GoTo VeryEnd   
       tellMe = 〃Use the mouse to select a range:〃   

                                          99 

… 页面 116…

       Set newRange = Application。InputBox(prompt:=tellMe; _   
          Title:=〃Range to format〃; _   
          Type:=8)   
       newRange。NumberFormat = 〃0。00〃   
       newRange。Select   
     VeryEnd:   
     End Sub   
9。  运行程序WhatRange2,一旦出现对话框时就点击取消按钮。注意,这次程序没有产生错误。当 
    VB遭遇错误时,就会跳到位于程序结尾处的标志VeryEnd。位于错误和标志VeryEnd之间的语句 
    被忽略了(原文不当:The statements placed between On Error Goto VeryEnd and the VeryEnd  
    label are ignored)。你将在第十三章里面找到更多的诱捕VBA程序里错误的例子。  
技巧4…14 子程序和函数:你应该使用哪个?  
创建子程序的时候:  
创建函数的时候:  

16。使用主过程和子过程  

当你大VBA程序得越来越大,要很好地维护这么多的代码行是很困难的。要让你的程序容易编写、 
理解和改变,你就应该使用井井有条的结构化程序。如何创建结构化程序?你只要简单地将大问题 
分成一些可以同时执行的小问题就行。在VBA中,你可以通过创建一个主过程和一个或多个子过程 
来实现它。因为主过程和子过程都是子程序,所以你都可以用关键字Sub将它们声明。主过程可以 
调用所需的子过程,并且将参数传递给它们。它也可以调用函数。下面的例子显示过程AboutUser。 
该过程要求用户姓和名,并且将姓和名从全名中分离出来。最后的语句显示用户的姓,随后是逗号 
和名。你再读下去,该过程将被分割成几个任务,以示范使用主过程,子过程和函数的概念。  
Sub AboutUser()   
  Dim fullName As String   
  Dim firstName As String   
  Dim lastName As String   
  Dim space As Integer   
  'get input from user 从用户获取信息  
  fullName = InputBox(〃Enter first and last name:〃)   
  'get first and last name strings 获得姓和名字符串  
   space = InStr(fullName; 〃 〃)   
  firstName = Left(fullName; space – 1)   
   lastName = Right(fullName; Len(fullName) – space)   
  'display last name; first name 显示姓和名  
  MsgBox lastName & 〃; 〃 & firstName   
End Sub   
过程AboutUser可以分割为一些细小的任务。第一个任务便是获取用户的全名;下一个任务则需要 
你将用户提供的数据分割为两个字符串:姓和名,这些任务可以交给不同的函数(例如:GetLast 
和GetFirst);最后的任务是显示重新排列的姓名字符串信息。既然你已经知道了你应该注重于哪 
些任务,我们现在就来看看如何完成每个任务。  
1。  在你当前的VBA工程里面添加一个模块,并重命名为Sample9  
2。  在Sample9模块窗口里面输入下列过程AboutUserMaster:  

                                            100 

… 页面 117…

Sub AboutUserMaster()   
  Dim first As String; last As String; full As String   
  Call GetUserName(full)   
  first = GetFirst(full)   
   last = GetLast(full)   
  Call DisplayLastFirst(first; last)   
End Sub  
上面显示的主过程通过调用适当的子程序和函数来控制程序的主流程。该主过程以变量生命开始, 
第一条语句Call GetUserName (full)调用子过程GetUserName(见第三步)并且传递给一参数—— 
变量full的内容。  
因为变量在执行调用语句之前没有赋与任何值,所以它的值是一个空字符串(“ ”)。注意,子过程 
的名称在Call之后。尽管你在调用过程时并没有要求使用关键字Call,但是,你在调用一个需要参 
数的过程时就必须使用它。参数列表必须包括在括号里面。  
3。  输入下面的GetUserName子程序:  
Sub GetUserName(fullName As String)   
  fullName = InputBox(〃Enter first and last name:〃)   
End Sub   
过程GetUserName示范了两个非常重要的VB编程概念:如何传递参数给一子程序以及如何将值从子 
程序传递回给主调过程。  
在主过程(见第二步)中,你调用了过程GetUserName,并且将其作为一参数传递:变量full。该 
变量被参数fullName接收,该参数子过程GetUserName的Sub语句里声明了。因为在VB调用子过程 
GetUserName的时候,变量full包含一空字符串,参数fullName同样也接收了这个空字符串。当VB 
显示对话框并且获得用户的姓名时,这个姓名将赋给参数fullName。赋给参数的值被传递回给子过 
程执行后的匹配参数。因此,当VB返回主过程时,变量full就回包含用户的姓名。  
传递给子过程的自变量将被其参数接收。注意,参数名称(fullName)后面紧跟着数据类型的声明 
 (As String)。虽然,参数的数据类型必须和相匹配的自变量的数据类型一致,但是,不同的名称 
还是可以使用给一个自变量和它相应的参数。  
技巧4…15 自变量(Arguments)和参数(Parameters)  
4。  输入下述函数GetFirst:  
Function GetFirst(fullName As String)   
  Dim space As Integer   
   space = InStr(fullName; 〃 〃)   
  GetFirst = Left(fullName; space … 1)   
End Function   
主过程中的第二条语句(见第二步)first = GetFirst(full),将变量full的值传递给函数GetFirst。 
函数的参数fullName接收到该值。要从用户提供的数据里分出姓和名,你就必须找到姓和名中间的 
空格。因此,该函数的开头是当地变量space的声明,下条语句则使用VBA内置函数InStr返回字符 
串fullName里空格(“ ”)的位置。然后将获得的数字赋值给变量space。最后,Left函数用来提取 
字符串fullName从左到某特定个数(space …1)的字符。名的长度比储存在变量space的值少一个 
字符。函数的结果(用户的名)赋值给函数名。当VB返回主过程时,它就将结果放置于变量first。  
5。  输入下列函数GetLast:  
Function GetLast(fullName As Strin
返回目录 上一页 下一页 回到顶部 1 1
未阅读完?加入书签已便下次继续阅读!
温馨提示: 温看小说的同时发表评论,说出自己的看法和其它小伙伴们分享也不错哦!发表书评还可以获得积分和经验奖励,认真写原创书评 被采纳为精评可以获得大量金币、积分和经验奖励哦!