Excel VBA学习笔记-1

1.Union的用法:

组合

 

Sub SeveralRows()
    Worksheets("Sheet1").Activate
    Dim myUnion As Range
    Set myUnion = Union(Rows(1), Rows(3), Rows(5))
    myUnion.Font.Bold = True
End Sub 

 

 2.Array函数:

 

Sub FormatSheets()
    Sheets(Array("Sheet2", "Sheet3", "Sheet5")).Select
    Range("A1:H1").Select
    Selection.Borders(xlBottom).LineStyle = xlDouble
End Sub 

 

 3.单元格错误值列表:

 

常量错误号单元格错误值
xlErrDiv02007#DIV/0!
xlErrNA2042#N/A
xlErrName2029#NAME?
xlErrNull2000#NULL!
xlErrNum2036#NUM!
xlErrRef2023#REF!
xlErrValue2015

#VALUE!

 

4.

由命名冲突所引起的典型错误包括有仿真两可的名称、重复声明、未声明标识符,以及找不到过程。在模块开头加上 Option Explicit 语句,可以强迫在变量被使用前对变量做明确的声明,如此可以避免一些可能的命名冲突以及和标识符有关的错误。

 

5.调用具有多个参数的 Sub 过程

使用 Call 语句所以需要利用括号将参数括起来。

 

Sub Main()
    HouseCalc 99800, 43100
    Call HouseCalc(380950, 49500)  //如果换成  Call HouseCalc 380950,49500, 则报错
End Sub

Sub HouseCalc(price As Single, wage As Single)
    If 2.5 * wage <= 0.8 * price Then
        MsgBox "You cannot afford this house."
    Else
        MsgBox "This house is affordable."
    End If
End Sub

 6.在调用 Function 过程时使用括号

 

Answer3 = MsgBox("Are you happy with your salary?", 4, "Question 3")

 

 

 7.传递命名参数

 

SubFunction 过程中的语句可以利用命名参数来传递值给被调用的过程。可以将命名参数以任何顺串行出。命名参数的组成是由参数名称紧接着冒号(:=)以及等号,然后指定一个值给参数。

 

answer3 = MsgBox(Title:="Question 3", _
Prompt:="Are you happy with your salary?", Buttons:=4)

 

 

8.赋值对象变量给对象

 

使用 Set 语句可以赋值一个对象给对象变量。可以赋值对象表达式或是 Nothing 。例如,下列的对象变量赋值是有效的:

 

Set MyObject = YourObject    ' 赋值对象引用。
Set MyObject = Nothing    ' 中断关联。
 

 

可以同时使用 New 关键字和 Set 语句来声明对象变量,并赋值一对象给它。例如:

 

Set MyObject = New Object    ' 创建和赋值

 

 设置一个对象变量等于 Nothing,会中断此对象变量与任何特定对象的关联,如此可预防因意外的改变变量而更改对象。在关闭关联对象后,对象变量总是设置为 Nothing,所以可以检测对象变量是否指到有效的对象。例如:

 

If Not MyObject Is Nothing Then
' 变量引用有效的对象。
    . . .
End If

 

 当然,该检测不能绝对的决定用户是否已关闭包含对象变量所引用对象的应用程序。

 

 

9.引用对象的当前实例

 

Me 关键字可用来引用对象的当前实例,而此为代码正在执行的对象。所有与当前对象关联的过程都可以通过 Me 来引用。使用 Me 来传递关于对象的当前实例信息到其它模块中的过程显得特别有用。例如,假设在模块中有以下这些过程:

 

'*********
' 类名:clsPerson
'*********
Option Explicit

Private name As String
Private age As Integer

Public Property Let setName(n As String)
   name = n
End Property

Public Property Let setAge(y As Integer)
   age = y
End Property

Public Property Get getName()
    getName = name
End Property

Public Property Get getAge()
  getAge = age
End Property

Public Sub prints()
   Debug.Print Me.getAge & "," & Me.getName
End Sub

 

 

10.创建递归过程

 

Function Factorial (N)
    If N <= 1 Then    ' 到达递归调用的末尾。
        Factorial = 1    
    Else    ' 如果 N > 0 再调用 Factorial 。
        Factorial = Factorial(N - 1) * N
    End If
End Function

 

 

11.声明数组

 

数组是否从 0 或 1 索引是根据 Option Base 语句的设置。如果 Option Base 没有指定为 1,则数组索引从零开始。

a,固定大小的数组

 

ReDim MyIntegerArray(10) As Integer

 

 b,动态数组

 

Dim sngArray() As Single

 注意 可以在过程中使用 ReDim 语句来做隐含性的数组声明。当使用 ReDim 语句时要小心点,不要拼错数组的名称。否则即使在模块中有包含 Option Explicit 语句,仍然会因此而生成第二个数组。

 

对于过程中的数组范围,可以使用 ReDim 语句去改变它的维数,去定义元素的数目以及每个维数的底层绑定。每当需要时,可以使用 ReDim 语句去更改动态数组。然而当做这个动作时,数组中存在的值会丢失。若要保存数组中原先的值,则可以使用 ReDim Preserve 语句来扩充数组。例如,下列的语句将 varArray 数组扩充了10 个元素,而原本数组中的当前值并没有消失掉。

 

ReDim Preserve varArray(UBound(varArray) + 10)
 

 

  12.传递参数

所有的参数传递给过程都是按地址的,默认是以Byref传递

可以按值的来传递参数,只要在过程的声明中包含 ByVal 关键字,使用按值的方法时会将原来的变量复制一份,当做参数传递过去。改变过程内部的参数时将不会影响到原来的变量。

 

Sub Factorial1(ByVal MyVar As Integer)       ' Function declaration.
    MyVar = 12
End Sub

Sub Factorial2(MyVar As Integer)       ' Function declaration.
    MyVar = 12
End Sub


Sub Factorial3(ByRef MyVar As Integer)       ' Function declaration.
    MyVar = 12
End Sub

Sub test()

    Dim aa As Integer
    aa = 5
    Call Factorial1(aa)
    Debug.Print aa
    
    aa = 5
    Call Factorial2(aa)
    Debug.Print aa
    
    aa = 5
    Call Factorial3(aa)
    Debug.Print aa

End Sub
 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值