第3章 Excel VBA基础语法 【下】

概述:接上一章 中篇, 本节涉及是Sub Function 等过程和函数

8、Sub 过程, 基本的程序单元

过程处理事情的步骤,例如:坐公交 , 上车-》刷卡-》找位子-》坐下

8.1、 关于VBA过程

什么是VBA过程

其实你要完成某一任务所需要步骤,也就是代码块集合

VBA里有哪些过程

VBA的基本过程有Function过程和Sub过程两种

8.2、 编写Sub过程需要了解的内容

语法:
[Private| Public] [Static] Sub 过程名([参数列表])   (如果不写默认是Public, Static表示保存该过程里声明的本地变量)

[语句块]

[Exit Sub]       (退出过程)

[语句块]

End Sub 

8.3、从另一个过程执行过程

以上篇评定学生成绩为例

方法一:输入过程名以及参数、参数用逗号隔开

Sub caseTest()
  
 Dim i#    '定义变量保存结果,你是否记得#代表整数
    
For i = 1 To 10 Step 1
  
 rank (i)
  
Next i

End Sub


Sub rank(i)

    Dim score As String
    
     Select Case Range("A" & i) '获取单元格Ai的值
        
          Case Is >= 90
            
            score = "优"
              
          Case Is >= 80
              
            score = "良"
          
          Case Is >= 70
              
            score = "中"
              
          Case Is >= 60
            
            score = "及格"
              
         Case Else
           
            score = "不及格"
          
    End Select
    
    Range("B" & i) = score  '将值写到单元格Bi
   
End Sub



方法二:在过程名称以及参数前使用Call关键字,参数用括号括起来,并用逗号隔开

语法: Call 过程名 [(参数1,参数2,...)]

上面例子只要将 rank(i)   修改成 Call rank(i) 即可

方法三:利用 Application 对象的Run方法

语法:  Application.Run 表示过程名的字符串(或字符串变量) , 变量一,变量二。。。。

上面例子:将rank(i)  修改成 Application.Run "rank", i

8.4、过程的作用域

公共过程(默认就是公共过程)

Public Sub 公共() 

MsgBox "公共过程"

End Sub

私有过程 (Private修饰,表示只能在本模块使用)

Public Sub 私用() 

MsgBox "这是私有过程"

End Sub

注意:如果你将一个模块所有的方法声明为私有方法,只要在最前面写上"Option Private Module"可以了。

3.9、 自定义函数、Function过程

Function与Sub的区别就是Function有返回值,而Sub没有

语法:

Function  函数过程名(参数1,参数2,...)

函数过程名 = 结果     (注意返回的结果变量和过程名一样)

End  Function



9.3、怎么统计指定颜色的单元格个数

问题一:单元格是什么颜色

Range("B1").Interior.Color = RGB(255, 255, 0)    (意思就是将单元格B1设置底纹为黄色)

写一个判断是否单元格是否为黄色函数,如果是值为1,否则为0


'温馨提示:在写过程或函数,先写死后写活。
'就是先指定某个单元格,后设置为变量
Function countColor()
    '引用单元格的值改变函数会重写计算,注意是值
    '利用背景色,字体颜色都不会引起函数重新计算
    Application.Volatile True
    
    If Range("A1").Interior.Color = RGB(255, 255, 0) Then
    
        countColor = 1
    Else
        countColor = 0
    End If
    
End Function


修改一下,计算A1:A10单元格所有颜色为黄色的单元格的数量

'温馨提示:在写过程或函数,先写死后写活。
'就是先指定某个单元格,后设置为变量
Function countColor()
    '引用单元格的值改变函数会重写计算,注意是值
    '利用背景色,字体颜色都不会引起函数重新计算
    Application.Volatile True
    
    Dim rng As Range
    For Each rng In Range("A1:A10")
     
         If rng.Interior.Color = RGB(255, 255, 0) Then
         
             countColor = countColor + 1
        
         End If
    
    Next rng
End Function



继续修改升级,计算某个区域所有的黄色单元格的数量

Function countColor(arr As Range)
   
    Application.Volatile True
    
    Dim rng As Range
    For Each rng In arr
     
         If rng.Interior.Color = RGB(255, 255, 0) Then
         
             countColor = countColor + 1
        
         End If
    
    Next rng
End Function


继续升级,自定义函数指定第二个参数,第二参数就是某个单元格,与这个单元格底纹颜色的个数是多少

Function countColor(arr As Range, c As Range)
   
    Application.Volatile True
    
    Dim rng As Range
    For Each rng In arr
     
         If rng.Interior.Color = c.Interior.Color Then
         
             countColor = countColor + 1
        
         End If
    
    Next rng
End Function



9.4、声明函数过程、规范的语句

[Public | Private] [Static] Function 函数名([参数列表])     (As 数据类型)

[语句块]

[函数名=过程结果]

[Exit Function]

[语句块]

[函数名=过程结果]

End Function

10、合理地组织程序,让代码更优美

10.1、代码排版,必不可少的习惯

10.2、怎么排版代码

  缩进、代码更优层次

 更改长行代码为短行代码

Sub test()
    Application.Workbooks("Book1").Worksheets("Sheet1") _ 
        .Range("A1:D100").Font.Bold = True
  
End Sub
也就是采用 “ _”  空格下划线进行换行

把多行合并为一行

Sub test()
   Dim a%, b%, c%: a = 1: b = 2: c=3
End Sub
采用“ :”  采用冒号,注意都是英文模式下的  

10.3、注释,让代码的意图清晰明了

添加注释

方法一: "'" 单引号开头 (英文模式下的)

方法二: Rem 替换 单引号

10.4、批量注释


  • 0
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值