VBA 过程的基本语法如下:
Sub 过程名(参数)
语句1
语句2
...
End Sub
VBA 函数与 VBA 过程很相似,除了使用的关键词外,主要区别是,函数可以返回值。
Function [函数名]([参数]) As [返回值类型]
语句1
语句2
...
语句n
[函数名] = [返回值]
End Function
函数包含的语句中,相比过程,可以看到多一个 [函数名] = [返回值] 语句,这是函数的返回值语句
Excel VBA对象模型
- 应用程序(Application)
- 工作簿(Workbook)
- 工作表(Worksheet)
- 范围(Range)
许多使用 Excel 完成的工作都是围绕这四种对象及其成员进行的。位于顶层的是Application对象,也就是Excel应用程序本身,它包含Excel中的其它的对象,如Workbook对象;一个Workbook对象包含其它一些对象,如Worksheet对象;而一个Worksheet对象又可以包含其它对象,如Range对象, 一个 Range 对象,表示一个单元格、行、列、包含一个或多个单元格块的单元格选定区域(选定区域可能是连续的,也可能不是连续的)或甚至多个工作表上的一组单元格)。
Application.Workbooks(“Book1.xls”).Worksheets(“Sheet1”).Range(“A1”)
表明是对工作簿Book1上的工作表Sheet1中单元格A1的引用,其中Application代表Excel应用程序本身,可省略。特别地,若Book1是当前活动工作簿,则上述语句可简写为 Worksheets(“Sheet1”).Range(“A1”)
;若Sheet1是当前活动工作表,则又可简写为 Range(“A1”)
。因此,若在引用中省略了工作簿对象,则表明是使用当前活动工作簿;若再省略了工作表对象,则表明是使用当前活动工作表。
Worksheet.Cells语法Worksheets("Sheet1").Cells(5, 3).Font.Size = 14
将 Sheet1 中单元格第5行第3列的字号设置为 14 磅。
一个简单的比较程序,比较两个sheet的序号是否一致
Sub compare()
Sheet1.Range("C2:C1000").ClearContents
'Dim sheet1_rows, sheet2_rows
sheet1_rows = Worksheets("Sheet1").Cells(Rows.Count, 1).End(xlUp).Row
sheet2_rows = Worksheets("Sheet2").Cells(Rows.Count, 1).End(xlUp).Row
For i = 2 To sheet1_rows
Worksheets("Sheet1").Cells(i, 3) = "不一致"
For j = 2 To sheet2_rows
If Worksheets("Sheet1").Cells(i, 1) = Worksheets("Sheet2").Cells(j, 1) Then
Worksheets("Sheet1").Cells(i, 3) = "一致"
Exit For
End If
Next
Next
End Sub
其中
求出A列最后1行:Cells(Rows.Count, 1).End(3).Row "Cells(Rows.Count, 1)
表示是查找A列最后一个非空单元格,按列的可以改Cells(1, Columns.count)
,end(xlup)
表示的向上查找,还有其他3个方向,向下,向左,向右:xldown、xltoleft、xltoright
结果如下