VBA入门的基础语句 自己整理了一些VBA基础语句分享给大家: 选择当前活动的工作簿: ThisWorkbook.Activate 如果选择其他工作簿,注意该工作簿一定是打开的,并且不要忘记加上后缀'.xls' ,例如: Windows('Totol.xls').Activate 选择一个工作表: Sheets('Balance').Activate. 选择单元格: Range('A1').Select 选择连续的单元格: Range('A1:G8').Select 选择不连续的单元格: Range('A1,B6,D9').Select Range('A1,B6:B10,D9').Select 单元格间移动: ActiveCell.Offset(13, 14).Select Selection.Offset(-3, -4).Select Range('G8').Offset(-3, -4).Select 注意:你可以定义一变量,并且用offset来实现,例如: varFreightRowsCount = Range('A1').CurrentRegion.Rows.Count ActiveCell.Offset(varFreightRowsCount, 0).Select 选择整个工作表: Cells.Select 选择当前单元格所在的区域(遇到空行/空列即止): Range('A1').CurrentRegion.Select 选择行或列: Rows('1').Select Columns('A').Select 或者: ActiveCell.EntireRow.Select ActiveCell.EntireColumn.Select 选择相邻的多行/多列: Columns('A:C').Select Rows('1:5').Select 选择不相邻的多行/多列: 注意:和选择相邻的多行/多列不同,使用'Range'而不是'Columns/Rows': Range('A:A, C:C, E:F').Select Range('1:1,5:6,9:9').Select 选择当前活动单元格向下至最后一个非空单元格: Range('A1', Range('A1').End(xlDown)).Select Range(ActiveCell, ActiveCell.End(xlDown)).Select 选择当前活动单元格向上至第一个非空单元格: Range('A32', Range('A32').End(xlUp)).Select Range(ActiveCell, ActiveCell.End(xlUp)).Select 选择当前活动单元格向右至第一个非空单元格。 注意:是 'xlTORight'而不是 'xlRight' Range('A1', Range('A1').End(xltoRight)).Select Range(ActiveCell, ActiveCell.End(xltoLeft)).Select 选择当前活动单元格向右至第10个单元格。 Range('A2', Range('A2').Offset(0, 10)).Select Range(ActiveCell, ActiveCell.Offset(0, 10)).Select 选择当前活动单元格向左至第10个单元格。 Range('A20', Range('A20').Offset(0, -10)).Select Range(ActiveCell, ActiveCell.Offset(0, -10)).Select 选择当前活动单元格向下至第10个单元格。 Range('a2', Range('a2').Offset(10, 0)).Select Range(ActiveCell, ActiveCell.Offset(10, 0)).Select 选择当前活动单元格向上至第10个单元格。 Range('A1').End(xlDown).Offset(1, 0).Select 选择该行中第一个空单元格: Range('A1').End(xltoRight).Offset(0,1).Select 改变区域的大小(由 A1:B5 变为 A1:D10): 注意:改区域并不是向外扩张,而是重新定义了。即' Selection.Resize(10, 4).Select 而不是 Selection.Resize(5, 2).Select Excel的宏不能记录移至当前行的第一个单元格的动作(即你按下'Home'键的动作),下面的语句则可以做到: ActiveCell.Offset(0, -ActiveCell.Column + 1).Select 移至当前列的第一个单元格: ActiveCell.Offset( -ActiveCell.Row + 1,0).Select 关于If..Then...EndIf 如果只有一个条件及一个动作,你可以用以下语句: If Selection.Value > 10 Then Selection.Offset(1,0) = 100 End If 或者更简单的: If Selection.Value > 10 Then Selection.Offset(1,0) = 100 如果有两个条件及两个动作,你可以用下面的语句 If Selection.Value > 10 Then If Selection.Value = 12 Then Selection.Offset(1,0) = 100 End If Selection.Offset(1,0) = 20 End If 关于If..Then...And...EndIf 当有双重条件和一个动作时,你可以用下面的语句: If Selection.Value = 10 And Selection.Offset(0,1).Value = 20 Then Selection.Offset(1,0) = 100 End If 关于If..Then...Or...EndIf 当有双重条件和一个动作时,你可以用下面的语句: If Selection.Value = 10 Or Selection.Offset(0,1).Value = 20 Then Selection.Offset(1,0) = 100 End If 关于If..Then...Else...EndIf 当只有一个条件和两个动作时,你可以用下面的语句: If Selection.Value > 10 Then Selection.Offset(1,0) = 100 Else Selection.Offset(1,0) = 0 End If 关于If..Then..ElseIf...EndIf 当有不止一个条件,且每个条件都跟随不同的动作时,你可以用下面的语句: If Selection.Value = 1 Then Selection.Offset(1, 0) = 10 ElseIf Selection.Value = 2 Then Selection.Offset(1, 0) = 20 ElseIf Selection.Value = 3 Then Selection.Offset(1, 0) = 30 ElseIf Selection.Value = 4 Then Selection.Offset(1, 0) = 40 ElseIf Selection.Value = 5 Then Selection.Offset(1, 0) = 50 End If 关于Select Case 当你不得不测试很多条件,你可以用Select Case 语句来代替If Then..ElseIf 。语法如下: Sub test() Select Case Selection.Value Case Is >= 85 Selection.Offset(0, 1) = 'A' Case Is >= 75 Selection.Offset(0, 1) = 'B' Case Is >= 65 Selection.Offset(0, 1) = 'C' Case Is >= 50 Selection.Offset(0, 1) = 'D' Case Else Selection.Offset(0, 1) = 'F' End Select End Sub 这段语句的意思就是:如果所选单元格的值大于85时,则其右边那个单元格的值为'A'…… 所选单元格的值小于50时,其右边那个单元格的值为'F' 这里有一些关于VBA函数 LCase, Now(), UCase 的例子: 注意:很多EXCEL函数都可以以下面的形式用在VBA中: varAnswer = Application.WorksheetFunction.Sum(Range('A1:A32')) 或者 varAnswer = Application.Sum(Range('A1:A32')) LCase 当对输入的字符做判断时,我们无法知道用户输入的字符是大写还是小写,用LCase函数可以将其转化为小写: If LCase(Selection.value)= 'toto' then... or Select Case LCase(Selection.value) or DO WHILE LCase(Selection.value)<>'toto' NOW() NOW() 既是Excel 函数也是VBA 函数。 通过下面的语句,在打开工作簿时,单元格 'A1'就会显示为当前时间: Range('A1').Formula = '=Now()' 下面的语句则在执行后赋予单元格'A1'当前时间,该时间不会改变除非你再次执行语句。并且你每次打开工作簿后,单元格'A1'的值不会改变。 Range('A1').Value = Now() UCase 当对输入的字符做判断时,我们无法知道用户输入的字符是大写还是小写,用LCase函数可以将其转化为大写: If UCase(Selection.value)= 'TOTO' then... or Select Case UCase(Selection.value) or DO WHILE UCase(Selection.value)<>'TOTO' |
|