VBA的一点东西

因为帮一个朋友弄excel中的一些数据处理,然后用到了VBA的编程。其中要点如下:


Sub MyFirstVBAProgram()
    Dim strName As String  ' As String 定义了变量的数据类型
    Dim strHello As String
    strName = InputBox("输入名字:")
    strHello = "你好," & strName & "!"
    MsgBox strHello
End Sub

Function MyAdd(varA, varB) As Variant
    MyAdd = varA + varB
End Function

Sub TestAdd()
    Dim a,b,c
    a = 12
    b = 34
    c = MyAdd(a,b)
    MsgBox c
End Sub

Public Function Shipping(Price)
    Shipping = Price * 0.1
End Function

' 注释

VBA中的数据类型
Byte        0 - 255
Bollean     True 或者 False
Integer     -32768 - 32767
Long        
Single
Double
Date        
String(变长)
Variant 是一个特殊的数据类型,可以表示任意类型的数据,对于没有定义数据类型的变量,
默认为这个类型

创建变量
    使用Dim语句
    Dim 变量名 As 数据类型

& 表示连接两个字符串
+ 也可以用来表示连接两个字符串

运算符
    ^(某次方) * / \(整除) Mod + -

Function Add(a As Double, b As Double) As Double
最后一个As Double表示返回值的类型,返回值为Add

条件语句
If T < 2 Then
    Target = 200
ElseIF T >= 2 And T < 3 Then
    Target = 300
Else
    Target = 500
End If
注意,在判断值相等时候,用的是=号

逻辑运算符
    And Or Not

循环语句
    Dim i As Long
    Dim sum As Long
    For i = 1 To 8 Step 2
        sum = sum + i
    Next i ' 循环结束

    DO While count <= 100
        sum = sum + count
        count = count + 1
    LOOP

Exit提前结束循环
    For i = 1 To 100
        If i = 50 Then
            Exit For
        End If
    Next i
嵌套循环中,Exit语句会退出他所在的那层循环,而不会退出其他循环

ActiveSheet.Cells(i,j).Value为Excel对象,ActiveSheet表示当前的数据表,
Cell(i,j)表示数据表的第i行第j列的单元格,Value表示单元格的值。

数组
    Dim Months(11) As String
    Months表示数组名称,11表示数组的最大索引,String为元素类型

_ 可以将几行代码算作一行,相当于\

Rnd是VBA的函数,返回一个0到1之间的平均值

Application对象代表了Excel程序,通过Excel的Application对象,可以操作当前激活的工作薄,
工作表或者活动单元格

将活动工作表的第一行第二列的单元格设置为当前时间
Application.ActiveSheet.Cells(1,2) = Time

ActiveCell.Value 表示当前活动单元格的值

Workbok对象代表Excel的一个工作薄,通过Workbok可以得到工作薄中的工作表(Sheets),
获得当前工作薄的名称,保存路径,保存工作薄等。
Application.ActiveWorkbok.Save  ' 保存工作薄

Worksheet
Worksheet对象代表了一个工作表,可以进行拷贝、粘贴、打印等工作

Range对象
代表工作表的一个单元格或者单元格区域
Worksheets("Sheet1").Range("A1").Value = 20
Range的Value属性可以返回Range的值,如果是一个单元格,那么就是一个具体的数值或者字符串,
如果是一个单元格区域,则返回一个数组。
同样,我们可以通过Value属性给Range赋值

将第一列和第二列的单元格的内容连接之后,赋值给第三列
Sub MergeTest()
    Dim i As Long
    For i = 3 To 30
        Cells(i,3) = Cells(i,1) & " " & Cells(i,2)
    Next
End Sub
使用Application对象的Cells属性来返回表格数据(Application可以省略)

使用VBA操作工作表单元格
    [A1]    = 100   ' 在A1 单元格输入100
    [A2:A4] = 10    ' 在A2:A4单元格输入10

    Range("B1") = 200
    Range("C1:C3")=300

    Cells(1,4) = 400 ' 在D1单元格输入400
    Range(Cells(1,5),Cells(5,5)) =50 ' 在E1:E5单元格输入50

在单元格D1:D20中循环,将所有绝对值小于0.1的数字都设置为0
    Sub RoundToZero()
        Dim i As Long
        Dim rCell As Range
        For i = 1 To 20
            Set rCell = Worksheets("Sheet2").Cells(i, 4)
            If IsNumeric(rCell.Value) Then
                If Abs(rCell.Value) < 1# Then
                    rCell.Value = 0
                End If
            End If
        Next i
    End Sub

posted @ 2013-03-28 20:58  三更_雨  阅读(340)  评论(0编辑  收藏  举报