vba-基础1

合集下载

VBA常用技巧(一)

VBA常用技巧(一)

第1章Range(单元格)对象Range对象是Excel应用程序中最常用的对象,一个Range对象代表一个单元格、一行、一列、包含一个或者更多单元格区域(可以是连续的单元格,也可以是不连续的单元格)中选定的单元格,甚至是多个工作表上的一组单元格,在操作Excel 内的任何区域之前都需要将其表示为一个Range对象,然后使用该Range对象的方法和属性。

i.单元格的引用方法在VBA中经常需要引用单元格或单元格区域区域,主要有以下几种方法。

1. 使用Range属性VBA中可以使用Range属性返回单元格或单元格区域,如下面的代码所示。

#001 Sub RngSelect()#002 Sheet1.Range("A3:F6, B1:C5").Select#003 End Sub代码解析:RngSelect过程使用Select方法选中A3:F6,B1:C5单元格区域。

Range属性返回一个Range对象,该对象代表一个单元格或单元格区域,语法如下:Range(Cell1, Cell2)参数Cell1是必需的,必须为A1 样式引用的宏语言,可包括区域操作符(冒号)、相交区域操作符(空格)或合并区域操作符(逗号)。

也可包括美元符号(即绝对地址,如“$A$1”)。

可在区域中任一部分使用局部定义名称,如Range("B2:LastCell"),其中LastCell 为已定义的单元格区域名称。

参数Cell2是可选的,区域左上角和右下角的单元格。

运行Sub RngSelect过程,选中A3:F6, B1:C5单元格区域,如图i-1所示。

图i-1 使用Range属性引用单元格区域注意如果没有使用对象识别符,Range属性返回活动表的一个区域,如果活动表不是工作表,则该属性无效。

2. 使用Cells属性使用Cells属性返回一个Range对象,如下面的代码所示。

#001 Sub Cell()#002 Dim icell As Integer#003 For icell = 1 To 100#004 Sheet2.Cells(icell, 1).Value = icell#005 Next#006 End Sub代码解析:Cell过程使用For...Next语句为工作表中的A1:A100单元格区域填入序号。

VBA入门教程-1在单元格输入数据的方法

VBA入门教程-1在单元格输入数据的方法

程序说明:
几种用VBA在单元格输入数据的方法:
Public Sub Writes()
1-- 2 方法,最简单在 "[ ]" 中输入单元格名称。

1[A1] = 100 '在 A1 单元格输入100。

2 [A2:A4] = 10 '在 A2:A4 单元格输入10。

3-- 4方法,采用 Range(" "), " " 中输入单元格名称。

3 Range("B1") = 200 '在 B1 单元格输入200。

4Range("C1:C3") = 300 '在 C1:C3 单元格输入300。

5-- 6方法,采用 Cells(Row,Column),Row是单元格行数,Column是单元格栏数。

5 Cells(1, 4) = 400'在 D1 单元格输入400。

6Range(Cells(1, 5), Cells(5, 5)) = 50'在 E1:E 5单元格输入50。

End Sub
你点选任何单元格,按 Selection 按钮,則则所点选的单元格均会被输入文字 "Test"。

Public Sub Selection1()
Selection.Value = "Test" '在任何你点选的单元格输入文字 "Test"。

End Sub
观看本程序的方法:
粗体文字为程序,其它字体均为说明文字。

按快捷键 Alt+F11即可看到程序。

Excel VBA常用代码总结1

Excel VBA常用代码总结1

Excel VBA常用代码总结1•改变背景色Range(”A1”).Interior。

ColorIndex = xlNoneColorIndex一览•改变文字颜色Range("A1").Font.ColorIndex = 1•获取单元格Cells(1,2)Range(”H7")•获取范围Range(Cells(2,3), Cells(4, 5))Range(”a1:c3”)’用快捷记号引用单元格Worksheets(”Sheet1”)。

[A1:B5]•选中某sheetSet NewSheet = Sheets("sheet1")NewSheet。

Select•选中或激活某单元格'“Range”对象的的Select方法可以选择一个或多个单元格,而Activate方法可以指定某一个单元格为活动单元格.'下面的代码首先选择A1:E10区域,同时激活D4单元格:Range("a1:e10”).SelectRange(”d4:e5”).Activate’而对于下面的代码:Range("a1:e10")。

SelectRange("f11:g15")。

Activate’由于区域A1:E10和F11:G15没有公共区域,将最终选择F11:G15,并激活F11单元格。

•获得文档的路径和文件名ActiveWorkbook.Path '路徑 '名稱ActiveWorkbook。

FullName '路徑+名稱'或将ActiveWorkbook换成thisworkbook•隐藏文档Application.Visible = False•禁止屏幕更新Application。

ScreenUpdating = False•禁止显示提示和警告消息Application。

DisplayAlerts = False•文件夹做成strPath = ”C:\temp\"MkDir strPath•状态栏文字表示Application.StatusBar = ”计算中"•双击单元格内容变换Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)If (Target.Cells.Row 〉= 5And Target。

ExcelVBA解读:在VBA中使用公式1——Formula属性和FormulaR1C1属...

ExcelVBA解读:在VBA中使用公式1——Formula属性和FormulaR1C1属...

Excel VBA 解读(55):在VBA 中使用公式1Formula属性和FormulaR1C1 属...在Excel 中,我们经常使用各种各样的公式来进行数据的计算分析和处理,在VBA 中也不例外。

本文将介绍VBA 中使用公式的相关属性。

为了更好地使用公式,让我们先看看Excel 中的A1 引用样式和R1C1 引用样式,再来介绍VBA 中与使用公式相关的属性。

理解A1 引用样式和R1C1 引用样式Excel 默认设置为A1 样式引用,也就是我们熟悉的行以数字表示,列以字母表示。

例如,A1 表示工作表或者单元格区域左上角的单元格。

Excel 还可以设置为R1C1 样式引用,行列都以数字表示。

例如,使用R1C1 表示工作表左上角的单元格。

此时,需要调出“ Excel 选项”对话框,勾选“R1C1 引用样式”。

在下面的工作表中,我们使用了计算公式。

其中,列E = 列C * 列D 列F = 列E * 单元格I2 列G =列E -列F单元格G8 =单元格区域G2:G7之和我们就以这张工作表来分析理解A1 样式和R1 样式。

使用A1 样式公式如下图:通常,我们在单元格中输入公式后,往下拉即可复制公式。

例如,在单元格E2 中输入公式=C2*D2 ,下拉至单元格E7,Excel 会自动调整单元格相对引用并快速得出列E中的结果,列F、列G中也类似。

但列F中的单元格I2 不变,因为我们使用了绝对引用,即在行或列前加了$符号。

使用R1C1 样式公式如下图:可以看出,第5 列、第6 列、第7 列中每列的公式都是相同的。

也就是说,整个区域都可以使用同样的公式。

R1C1 样式中,字母R 代表行,字母C 代表列,字母后面的方括号代表相对引用。

字母R 后面的方括号中的数字代表相对于当前单元格移动的行数,负数表示向上移动,正数表示向下移动。

字母C 后面的方括号中的数字代表相对于当前单元格移动的列数,负数表示向左移动,正数表示向右移动。

VBA编程基础-ppt(共37张)

VBA编程基础-ppt(共37张)
Loop
F
条件表达 式
T
语句块
图8.13 Do While—Loop循环语句流程图
第25页,共37页。
7.4 VBA流程控制(kòngzhì)语句
26
3.Do Until—Loop语句
注意:“=”是赋值号,不是等号
第18页,共37页。
7.4 VBA流程控制(kòngzhì)语句
19
7.4.2 条件语句 1.If—Then语句(单分支结构) 语句结构为:
If <条件表达式1> Then <条件表达式1为真时要执行的语句>

If <条件表达式1> Then
<条件表达式1为真时要执行的语句序列> End If
循环体
结束条件语句序列] Next [循环变量]
循环变量=循环变量+步长值
第24页,共37页。
Next的下一条语句
图 8.12 For循环语句流程图
7.4 VBA流程控制(kòngzhì)语句
25
2.DoWhile—Loop语 句
使用格式如下: Do While <条件式>
循环体 [条件语句序列
Exit Do 结束条件语句序列]
MyValue = ( 10 > 4 )
’ 返回True
MyValue = ( 1=2 )
’ 返回False
MyValue = (”周” < ”刘” )
’ 返回False
MyValue = ( #2013/12/25# <= #2014/2/28# ) ’ 返回 True
第14页,共37页。
7.3 VBA程序设计(chénɡ xù shè jì)基础

在VBA中使用API函数的教程1

在VBA中使用API函数的教程1

在VBA中使用API函数的教程1VBA标识符一.定义标识符是一种标识变量、常量、过程、函数、类等语言构成单位的符号,利用它可以完成对变量、常量、过程、函数、类等的引用。

二.命名规则1)字母打头,由字母、数字和下划线组成,如 A987b_23Abc2)字符长度小于40,(Excel2002以上中文版等,可以用汉字且长度可达254个字符)3)不能与VB保留字重名,如public, private, dim, goto, next, with, integer, single等定义:运算符是代表VB某种运算功能的符号。

1)赋值运算符=2)数学运算符&、+ (字符连接符)、+(加)、-(减)、Mod(取余)、\(整除)、*(乘)、/(除)、-(负号)、^(指数)3)逻辑运算符Not(非)、And(与)、Or(或)、Xor(异或)、Eqv(相等)、I mp(隐含)4)关系运算符 = (相同)、<>(不等)、>(大于)、<(小于)、>=(不小于)、<=(不大于)、Like、Is5)位运算符Not(逻辑非)、And(逻辑与)、Or(逻辑或)、Xor(逻辑异或)、Eqv(逻辑等)、Imp(隐含)第三节数据类型VBA共有12种数据类型,具体见下表,此外用户还可以根据以下类型用Typ e第四节变量与常量1)VBA允许使用未定义的变量,默认是变体变量。

2)在模块通用说明部份,加入 Option Explicit 语句可以强迫用户进行变量定义。

3)变量定义语句及变量作用域Dim变量as类型 '定义为局部变量,如 Dim xyz as integer Private变量as类型 '定义为私有变量,如 Private xyz as byte Public变量as类型 '定义为公有变量,如 Public xyz as single Global变量as类型 '定义为全局变量,如 Globlal xyz as date Static变量as类型 '定义为静态变量,如 Static xyz as double一般变量作用域的原则是,那部份定义就在那部份起作用,模块中定义则在该模块那作用。

Excel-VBA教程完全版

Excel-VBA教程完全版

免费下载-分享--Excel VBA应用教程—目录一、VBA语言基础 (1)第一节标识符 (1)第二节运算符 (1)第三节数据类型 (1)第四节变量与常量 (1)第五节数组 (2)第六节注释和赋值语句 (2)第七节书写规范 (2)第八节判断语句 (2)第九节循环语句 (3)第十节其他类语句和错误语句处理 (4)第十一节过程和函数 (4)一.Sub过程 (4)二.Function函数 (5)三.Property属性过程和Event事件过程 (5)第十二节内部函数 (5)一.测试函数 (5)二.数学函数 (5)三.字符串函数 (5)四.转换函数 (6)五.时间函数 (6)第十三节文件操作 (6)文件 (6)删除 (6)打开 (6)读入 (7)写入 (7)关闭 (7)其他文件函数 (7)二、VISUAL BASIC程序设计网络教学 (1)第一课VBA是什么 (1)1.1VBA是什么 (1)1.2EXCEL环境中基于应用程序自动化的优点 (1)1.3录制简单的宏 (1)1.4执行宏 (2)1.5查看录制的代码 (2)1.6编辑录制的代码 (3)1.7录制宏的局限性 (3)1.8小结 (3)第二课处理录制的宏 (3)2.1为宏指定快捷键 (3)2.2决定宏保存的位置 (4)2.3个人宏工作簿 (4)2.3.1保存宏到个人宏工作簿 (4)2.3.2使用并编辑个人宏工作簿中的宏 (4)2.4将宏指定给按钮 (4)2.5将宏指定给图片或其他对象 (5)2.6小结 (5)第三课学习控件 (5)3.2认识不同的控件 (5)3.3向工作表添加控件 (6)3.4设置控件的特性 (6)3.5给控件命名 (6)3.6使用用户窗体 (6)3.7疑难解答 (7)第四课理解变量和变量的作用 (7)4.1代码存在的位置:模块 (7)4.2对模块的概览 (7)4.2.1创建过程 (8)4.2.2运行宏 (9)4.3保存对模块所做的改变 (9)4.4变量 (9)4.4.1变量的数据类型 (9)4.4.2用Dim语句创建变量(声明变量) (10)4.4.3变量命名的惯例 (10)4.4.4使用数组 (10)4.4.5变量赋值 (11)第五课利用VBA设置工作表使用权限 (11)1.使用W ITH语句。

第1章 Range(单元格)对象【超实用VBA】

第1章 Range(单元格)对象【超实用VBA】

第1章Range(单元格)对象范例1 单元格的引用方法1-1 使用Range属性引用单元格区域Sub MyRng()Range("A1:B4, D5:E8").SelectRange("A1").Formula = "=Rand()"Range("A1:B4 B2:C6").Value = 10Range("A1", "B4").Font.Italic = TrueEnd Sub1-2 使用Cells属性引用单元格区域Sub MyCell()Dim i As ByteFor i = 1 To 10Sheets("Sheet1").Cells(i, 1).Value = iNextEnd Sub1-3 使用快捷记号实现快速输入Sub FastMark()[A1] = "Excel 2007"End Sub1-4 使用Offset属性返回单元格区域Sub RngOffset()Sheets("Sheet1").Range("A1:B2").Offset(2, 2).SelectEnd Sub1-5 使用Resize属性返回调整后的单元格区域Sub RngResize()Sheets("Sheet1").Range("A1").Resize(4, 4).SelectEnd Sub范例2 选定单元格区域的方法2-1 使用Select方法Sub RngSelect()Sheets("Sheet2").ActivateSheets("Sheet2").Range("A1:B10").SelectEnd Sub2-2 使用Activate方法Sub RngActivate()Sheets("Sheet2").ActivateSheets("Sheet2").Range("A1:B10").ActivateEnd Sub2-3 使用Goto方法Sub RngGoto()Application.Goto Reference:=Sheets("Sheet2").Range("A1:B10"), Scroll:=True End Sub范例3 获得指定行的最后一个非空单元格Sub LastCell()Dim rng As RangeSet rng = Cells(Rows.Count, 1).End(xlUp)MsgBox "A列的最后一个非空单元格是" & rng.Address(0, 0) _& ",行号" & rng.Row & ",数值" & rng.ValueSet rng = NothingEnd Sub范例4 使用SpecialCells方法定位单元格Sub SpecialAddress()Dim rng As RangeSet rng = edRange.SpecialCells(xlCellTypeFormulas) rng.SelectMsgBox "工作表中有公式的单元格为: " & rng.AddressSet rng = NothingEnd Sub范例5 查找特定内容的单元格5-1 使用Find方法查找特定信息Sub FindCell()Dim StrFind As StringDim rng As RangeStrFind = InputBox("请输入要查找的值:")If Len(Trim(StrFind)) > 0 ThenWith Sheet1.Range("A:A")Set rng = .Find(What:=StrFind, _After:=.Cells(.Cells.Count), _LookIn:=xlValues, _LookAt:=xlWhole, _SearchOrder:=xlByRows, _SearchDirection:=xlNext, _MatchCase:=False)If Not rng Is Nothing ThenApplication.Goto rng, TrueElseMsgBox "没有找到匹配单元格!"End IfEnd WithEnd IfSet rng = NothingEnd SubSub FindNextCell()Dim StrFind As StringDim rng As RangeDim FindAddress As StringStrFind = InputBox("请输入要查找的值:")If Len(Trim(StrFind)) > 0 ThenWith Sheet1.Range("A:A").Interior.ColorIndex = 0Set rng = .Find(What:=StrFind, _After:=.Cells(.Cells.Count), _LookIn:=xlValues, _LookAt:=xlWhole, _SearchOrder:=xlByRows, _SearchDirection:=xlNext, _MatchCase:=False)If Not rng Is Nothing ThenFindAddress = rng.AddressDorng.Interior.ColorIndex = 6Set rng = .FindNext(rng)Loop While Not rng Is Nothing _And rng.Address <> FindAddressEnd IfEnd WithEnd IfSet rng = NothingEnd Sub5-2 使用Like运算符进行模式匹配查找Sub RngLike()Dim rng As RangeDim r As Integerr = 1Sheet1.Range("A:A").ClearContentsFor Each rng In Sheet2.Range("A1:A40")If rng.Text Like "*a*" ThenCells(r, 1) = rng.Textr = r + 1End IfNextSet rng = NothingEnd Sub范例6 替换单元格内字符串Sub Replacement()Range("A:A").Replace _What:="市", Replacement:="区", _LookAt:=xlPart, SearchOrder:=xlByRows, _MatchCase:=TrueEnd Sub范例7 单元格的复制7-1 复制单元格区域Sub RangeCopy()Sheet1.Range("A1:G7").Copy Sheet2.Range("A1")End SubSub Copyalltheforms()Dim i As IntegerSheet1.Range("A1:G7").CopyWith Sheet3.Range("A1").PasteSpecial xlPasteAll.PasteSpecial xlPasteColumnWidthsEnd WithApplication.CutCopyMode = FalseFor i = 1 To 7Sheet3.Rows(i).RowHeight = Sheet1.Rows(i).RowHeightNextEnd Sub7-2 仅复制数值到另一区域Sub CopyValue()Sheet1.Range("A1:G7").CopySheet2.Range("A1").PasteSpecial Paste:=xlPasteValuesApplication.CutCopyMode = FalseEnd SubSub GetValueResize()With Sheet1.Range("A1").CurrentRegionSheet3.Range("A1").Resize(.Rows.Count, .Columns.Count).Value = .Value End WithEnd Sub范例8 禁用单元格拖放功能Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Target.Column = 1 ThenApplication.CellDragAndDrop = FalseElseApplication.CellDragAndDrop = TrueEnd IfEnd SubPrivate Sub Worksheet_Deactivate()Application.CellDragAndDrop = TrueEnd Sub范例9 设置单元格格式9-1 设置单元格字体格式Sub CellFont()With Range("A1").Font.Name = "华文彩云".FontStyle = "Bold".Size = 22.ColorIndex = 3.Underline = 2End WithEnd Sub9-2 设置单元格内部格式Sub CellInternalFormat()With Range("A1").Interior.ColorIndex = 3.Pattern = xlPatternGrid.PatternColorIndex = 6End WithEnd Sub9-3 单元格区域添加边框Sub CellBorder()Dim rng As RangeSet rng = Range("B2:E8")With rng.Borders(xlInsideHorizontal).LineStyle = xlDot.Weight = xlThin.ColorIndex = xlColorIndexAutomaticEnd WithWith rng.Borders(xlInsideVertical).LineStyle = xlContinuous.Weight = xlThin.ColorIndex = xlColorIndexAutomaticEnd Withrng.BorderAround xlContinuous, xlMedium, xlColorIndexAutomatic Set rng = NothingEnd SubSub QuickBorder()Range("B12:E18").Borders.LineStyle = xlContinuousEnd Sub范例10 单元格的数据有效性10-1 添加数据有效性Sub AddValidation()With Range("A1:A10").Validation.Delete.Add Type:=xlValidateList, _AlertStyle:=xlValidAlertStop, _Operator:=xlBetween, _Formula1:="1,2,3,4,5,6,7,8".ErrorMessage = "只能输入1-8的数值,请重新输入!"End WithEnd Sub10-2 判断是否存在数据有效性Sub ErrValidation()On Error GoTo LineIf Range("A1").Validation.Type >= 0 ThenMsgBox "有数据有效性!"Exit SubEnd IfLine:MsgBox "没有数据有效性!"End Sub10-3 动态的数据有效性Private Sub Worksheet_SelectionChange(ByVal Target As Range)If Target.Column = 1 And Target.Count = 1 And Target.Row > 1 Then With Target.Validation.Delete.Add Type:=xlValidateList, _AlertStyle:=xlValidAlertStop, _Operator:=xlBetween, _Formula1:="主机,显示器"End WithEnd IfEnd SubPrivate Sub Worksheet_Change(ByVal Target As Range)If Target.Column = 1 And Target.Row > 1 And Target.Count = 1 Then With Target.Offset(0, 1).Validation.DeleteSelect Case TargetCase "主机".Add Type:=xlValidateList, _AlertStyle:=xlValidAlertStop, _Operator:=xlBetween, _Formula1:="Z286,Z386,Z486,Z586"Case "显示器".Add Type:=xlValidateList, _AlertStyle:=xlValidAlertStop, _Operator:=xlBetween, _Formula1:="15,17,21,25"End SelectEnd WithEnd IfEnd Sub范例11 单元格中的公式11-1 在单元格中写入公式Sub rngFormula()Dim r As Integerr = Cells(Rows.Count, 1).End(xlUp).RowRange("C2").Formula = "=A2*B2"Range("C2").Copy Range("C3:C" & r)Range("A" & r + 1) = "合计"Range("C" & r + 1).Formula = "=SUM(C2:C" & r & ")"End SubSub rngFormulaRC()Dim r As Integerr = Cells(Rows.Count, 1).End(xlUp).RowRange("C2:C" & r).FormulaR1C1 = "=RC[-2]*RC[-1]"Range("A" & r + 1) = "合计"Range("C" & r + 1).FormulaR1C1 = "=SUM(R[-" & r - 1 & "]C:R[-1]C)"End SubSub RngFormulaArray()Dim r As Integerr = Cells(Rows.Count, 1).End(xlUp).RowRange("C2:C" & r).FormulaR1C1 = "=RC[-2]*RC[-1]"Range("A" & r + 1) = "合计"Range("C" & r + 1).FormulaArray = "=SUM(R[-" & r - 1 & "]C[-2]:R[-1]C[-2]*R[-" & r - 1 & "]C[-1]:R[-1]C[-1])"End Sub11-2 判断单元格是否包含公式Sub rngIsHasFormula()Select Case Selection.HasFormulaCase TrueMsgBox "单元格包含公式!"Case FalseMsgBox "单元格没有公式!"Case ElseMsgBox "公式区域:" & Selection.SpecialCells(-4123, 23).Address(0, 0) End SelectEnd Sub11-3 判断单元格公式是否存在错误Sub CellFormulaIsWrong()If IsError(Range("A1").Value) = True ThenMsgBox "A1单元格错误类型为:" & Range("A1").TextElseMsgBox "A1单元格公式结果为" & Range("A1").ValueEnd IfEnd Sub11-4 取得公式的引用单元格Sub RngPrecedent()Dim rng As RangeSet rng = Sheet1.Range("C10").PrecedentsMsgBox "公式所引用的单元格是:" & rng.AddressSet rng = NothingEnd Sub11-5 将公式转换为数值Sub SpecialPaste()With Range("A1:A10").Copy.PasteSpecial Paste:=xlPasteValuesEnd WithApplication.CutCopyMode = FalseEnd Sub范例12 单元格添加批注Sub AddComment()With Range("A1")If Not .Comment Is Nothing Then .Comment.Delete.AddComment Text:=Date & vbCrLf & .Text.Comment.Visible = TrueEnd WithEnd Sub范例13 合并单元格操作13-1 判断单元格区域是否存在合并单元格Sub IsMergeCell()If Range("A1").MergeCells ThenMsgBox "合并单元格", vbInformationElseMsgBox "非合并单元格", vbInformationEnd IfEnd SubSub IsMergeCells()If IsNull(Range("A1:D10").MergeCells) ThenMsgBox "包含合并单元格", vbInformationElseMsgBox "没有包含合并单元格", vbInformationEnd IfEnd Sub13-2 合并单元格时连接每个单元格的文本Sub MergeCells()Dim MergeStr As StringDim MergeRng As RangeDim rng As RangeSet MergeRng = Range("A1:B2")For Each rng In MergeRngMergeStr = MergeStr & rng & " "NextApplication.DisplayAlerts = FalseMergeRng.MergeMergeRng.Value = MergeStrApplication.DisplayAlerts = TrueSet MergeRng = NothingSet rng = NothingEnd Sub13-3 合并内容相同的连续单元格Sub MergeLinkedCell()Dim r As IntegerDim i As IntegerApplication.DisplayAlerts = FalseWith Sheet1r = .Cells(Rows.Count, 1).End(xlUp).RowFor i = r To 2 Step -1If .Cells(i, 2).Value = .Cells(i - 1, 2).Value Then .Range(.Cells(i - 1, 2), .Cells(i, 2)).MergeEnd IfNextEnd WithApplication.DisplayAlerts = TrueEnd Sub13-4 取消合并单元格时在每个单元格中保留内容Sub CancelMergeCells()Dim r As IntegerDim MergeStr As StringDim MergeCot As IntegerDim i As IntegerWith Sheet1r = .Cells(.Rows.Count, 1).End(xlUp).RowFor i = 2 To rMergeStr = .Cells(i, 2).ValueMergeCot = .Cells(i, 2).MergeArea.Count.Cells(i, 2).UnMerge.Range(.Cells(i, 2), .Cells(i + MergeCot - 1, 2)).Value = MergeStri = i + MergeCot - 1Next.Range("B1:B" & r).Borders.LineStyle = xlContinuousEnd WithEnd Sub范例14 高亮显示选定单元格区域Private Sub Worksheet_SelectionChange(ByVal Target As Range)Cells.Interior.ColorIndex = xlColorIndexNoneTarget.Interior.ColorIndex = Int(56 * Rnd() + 1)End SubPrivate Sub Worksheet_SelectionChange(ByVal Target As Range)Dim rng As RangeCells.Interior.ColorIndex = xlColorIndexNoneSet rng = Application.Union(Target.EntireColumn, Target.EntireRow)rng.Interior.ColorIndex = Int(56 * Rnd() + 1)Set rng = NothingEnd Sub范例15 双击被保护单元格时不显示提示消息框Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) If Target.Locked = True ThenMsgBox "此单元格已保护,不能编辑!"Cancel = TrueEnd IfEnd Sub范例16 单元格录入数据后自动保护Private Sub Worksheet_SelectionChange(ByVal Target As Range)Dim msg As ByteWith TargetIf Not Application.Intersect(Target, Range("A2:F6")) Is Nothing Then If .Count > 1 ThenRange("A1").SelectExit SubEnd IfActiveSheet.UnprotectIf Len(Trim(.Value)) > 0 Thenmsg = MsgBox("当前单元格已录入数据,是否修改?", 32 + 4).Locked = IIf(msg = 6, False, True)End IfActiveSheet.ProtectActiveSheet.EnableSelection = 0End IfEnd WithEnd SubPrivate Sub Worksheet_Change(ByVal Target As Range)If Not Application.Intersect(Target, Range("A2:F6")) Is Nothing Then If Len(Trim(Target.Value)) > 0 ThenActiveSheet.UnprotectTarget.Locked = TrueActiveSheet.ProtectActiveSheet.EnableSelection = 0End IfEnd IfEnd Sub范例17 Target参数的使用方法17-1 使用Address 属性Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)Select Case Target.Address(0, 0)Case "A1"Sh.UnprotectCase "A2"Sh.ProtectCase ElseEnd SelectEnd Sub17-2 使用Column属性和Row属性Private Sub Worksheet_SelectionChange(ByVal Target As Range)If Target.Column < 3 And Target.Row < 11 ThenMsgBox "你选择了" & Target.Address(0, 0) & "单元格"End IfEnd Sub17-3 使用Intersect方法Private Sub Worksheet_SelectionChange(ByVal Target As Range)If Not Application.Intersect(Target, Union(Range("A1:B10"), Range("E1:F10"))) Is Nothing ThenIf Target.Count = 1 ThenMsgBox "你选择了" & Target.Address(0, 0) & "单元格"End IfEnd IfEnd Sub。

VBA帮助

VBA帮助

VBA帮助(摘自Office2000 VBA帮助)一、VBA入门知识1、激活工作簿2、创建新工作簿3、打开工作簿4、用编号引用工作表5、用名称引用工作表6、将文档保存为 Web 页7、用 A1 样式的记号引用单元格和单元格区域8、用编号引用单元格9、引用行或列10、用快捷记号引用单元格11、引用命名单元格区域12、按相对于其他单元格的方式来引用单元格13、用 Range 对象引用单元格14、引用工作表上的所有单元格15、引用若干单元格区域16、在单元格区域中循环17、选定和激活单元格18、处理三维区域19、处理活动单元格20、在工作表上使用 ActiveX 控件21、在文档中使用 ActiveX 控件22、创建自定义对话框23、在窗体上使用 Microsoft Office Web 组件24、内置对话框参数表25、使用 Microsoft Excel 对象的事件26、在 Visual Basic 中使用Microsoft Excel 工作表函数27、处理形状(图形对象)28、在某一 Microsoft Office 应用程序中控制其他 Microsoft Office 应用程序29、OLE 程序标识符30、关于数字签名31、启动 Microsoft Excel 时不运行“自动执行宏”32、焦点二、了解对象、属性、方法和事件1、了解对象、属性、方法和事件2、Application 对象3、Workbook 对象4、Workbooks 属性5、Range 对象6、Range 属性7、Cells 属性8、Caller 属性9、Offset 属性10、Rows 属性11、Activate 事件12、Activate、 Deactivate 事件13、Activate 方法14、WorkbookActivate 事件15、WindowActivate 事件16、On Error 语句17、在工作表上使用 ActiveX 控件18、Add 方法(Scenarios 集合)19、Scenarios 集合对象20、Add 方法 (Validation 对象)21、Validation 对象22、Validation 属性23、Open 事件24、Open 方法25、 Click 事件26、Close 方法27、Change 事件28、Value 属性29、DblClick 事件30、SheetBeforeRightClick 事件31、Select 方法32、Select 事件33、Goto 方法34、Worksheet 对象35、SheetChange 事件36、SheetActivate 事件37、OpenLinks 方法38、Enabled 属性三、VBA语法(一)Visual Basic 的命名规则1、写 Visual Basic 语句2、写声明语句3、Dim 语句的语法4、Activate 方法的语法5、Set 语句6、MsgBox 函数的语法7、选项语句的语法8、AddressOf 运算符9、了解变体10、写赋值语句11、写可执行的语句12、Public 语句13、Private 语句14、使用数组15、使用常数16、AppActivate 语句17、Beep 语句19、Date 语句20、Error 语句21、Exit 语句22、GoSub...Return 语句23、GoTo 语句24、Input # 语句25、Let 语句26、Load 语句27、Name 语句28、On...GoSub、On...GoTo 语句29、Open 语句30、Rem 语句31、Stop 语句32、Time 语句33、While...Wend 语句(二)逻辑语句1、If...Then...Else 语句2、使用 Select Case 语句3、使用 For...Next 语句4、For Each...Next 语句5、 Do...Loop 语句6、 With 语句(三)过程1、写 Sub 过程2、写 Function 过程3、写 Property 过程四、 ActiveX 控件1、AfterUpdate 事件2、Click 事件3、Click 事件、命令按钮控件、Accelerator 和 Caption 属性示例4、DblClick 事件5、Error 事件6、KeyDown 和 KeyUp 事件7、KeyPress 事件8、KeyPress 事件示例9、MouseDown 和 MouseUp 事件10、MouseMove 事件11、列表框控件12、SpinDown 和 SpinUp 事件13、SpinDown、SpinUp 事件和 Delay 属性示例14、组合框控件15、命令按钮控件16、标签控件17、列表框控件、DataObject 对象、MouseMove 事件和 StartDrag、SetText 方法示例18、多页控件19、选项按钮控件20、文本框控件21、切换按钮控件22、用户窗体窗口一、VBA入门知识1、激活工作簿用 Activate 方法激活工作簿后,该工作簿将放在活动窗口中。

第1课学习vba的条件与方法

第1课学习vba的条件与方法

学习VBA的条件与方法切入正题前先谈谈VBA的概念!第1章正确认识VBAVBA是VB的一个分支,不过VB已经淘汰多年,不再升级,而VBA却一再地升级。

鉴于VBA的强大和易学性,VBA已集成在很多应用程序中,包括CAD、CoreDraw、WPS(免费中不提供)、PowerPoint、FrontPage、Word、OutLook、Excel等等软件之中。

不过只有Excel VBA才被大家发扬光大,这一方面是基于Excel的用户群体大,工厂对表格设计的需求大,另一完方面也是Excel VBA的完善性所致。

同样版本VBA在不同软件中的表现是不同的,例如WORD 2010中的VBA就比Excel 2010中的VBA差。

对于WORD VBA,我的了解并不多,只做过一次菜单.大概两个月前,ET论坛有一个人找我帮他有偿设计一个多菜菜单模板,当时只说了价格,没有说明是WORD还是Excel,我用就Excel VBA做了下面的这个模板给他,让他自己按实际需求修改一下名字就完成了。

对方当时就说是这个效果,不过要用WORD做。

我想同样版本的VBA在菜单不可能有什么差异,就马上改用WORD帮他设计。

经过几多周折才做到,不过WORD中有很多属性都不支持,明明帮助中说有这个属性,但复制帮助中的代码就不能实现同等效果。

这其实也从侧面反应了WORD VBA用户太少,那么BUG反馈就少,修正错误的机会也少了,从而使WORD的VBA一直不好用。

这就是恶性循环。

Excel的用户多,很多问题都得到了及时的纠正,所以Excel的VBA也最完善。

VB停留在6.0版后就永远地停止开发了,不再更新,而Excel 2003的VBA版本是6.05,Excel 2007和Excel 2010的VBA版本是7.0,Excel 2013的VBA版本是7.01。

说明微软一直在重视VBA应用。

要获得您所用Excel VBA的版本请先按下图设置,将“信任对VBA工程对象模型的访问”打勾。

VBA编程中的常用代码(1)

VBA编程中的常用代码(1)

***************** 定制模块行为 *****************Option Explicit '强制对模块内所有变量进行声明Option Private Module '标记模块为私有,仅对同一工程中其它模块有用,在宏对话框中不显示Option Compare Text '字符串不区分大小写Option Base 1 '指定数组的第一个下标为 1On Error Resume Next '忽略错误继续执行 VBA代码,避免出现错误消息On Error GoTo ErrorHandler '当错误发生时跳转到过程中的某个位置On Error GoTo 0 '恢复正常的错误提示Application.DisplayAlerts=False '在程序执行过程中使出现的警告框不显示Application.ScreenUpdating=False '关闭屏幕刷新Application.ScreenUpdating=True '打开屏幕刷新Application.Enable.CancelKey=xlDisabled '禁用 Ctrl+Break 中止宏运行的功能Err.Clear '清除程序运行过程中所有的错误*********** 工作簿 ***********Workbooks.Add() '创建一个新的工作簿Workbooks("book1.xls").Activate '激活名为 book1的工作簿ThisWorkbook.Save '保存工作簿ThisWorkbook.close '关闭当前工作簿ActiveWorkbook.Sheets.Count '获取活动工作薄中工作表数 '返回活动工作薄的名称 '返回当前工作簿名称ThisWorkbook.FullName '返回当前工作簿路径和名称ActiveWindow.EnableResize=False '禁止调整活动工作簿的大小Application.Window.Arrange xlArrangeStyleTiled '将工作簿以平铺方式排列ActiveWorkbook.WindowState=xlMaximized '将当前工作簿最大化ThisWorkbook.BuiltinDocumentProperties(""Last Save Time")或 Application.Caller.Parent.Parent.BuiltinDocumentProperties(""Last Save Time") '返回上次保存工作簿的日期和时间ThisWorkbook.BuiltinDocumentProperties("Last Print Date")或 Application.Caller.Parent.Parent.BuiltinDocumentProperties(""Last Print Date") '返回上次打印或预览工作簿的日期和时间Workbooks.Close '关闭所有打开的工作簿ActiveWorkbook.LinkSources(xlExcelLinks)'返回当前工作簿中的第一条链接ActiveWorkbook.CodeNameThisWorkbook.CodeName '返回工作簿代码的名称ActiveWorkbook.FileFormatThisWorkbook.FileFormat '返回当前工作簿文件格式代码ThisWorkbook.PathActiveWorkbook.Path '返回当前工作簿的路径(注:若工作簿未保存,则为空) ThisWorkbook.ReadOnlyActiveWorkbook.ReadOnly '返回当前工作簿的读/写值(为 False) ThisWorkbook.SavedActiveWorkbook.Saved '返回工作簿的存储值(若已保存则为 False) Application.Visible = False '隐藏工作簿Application.Visible = True '显示工作簿注:可与用户窗体配合使用,即在打开工作簿时将工作簿隐藏,只显示用户窗体.可设置控制按钮控制工作簿可见*********** 工作表 ***********edRange.Rows.Count '当前工作表中已使用的行数Rows.Count '获取工作表的行数(注:考虑向前兼容性)Sheets(Sheet1).Name= "Sum" '将 Sheet1命名为 SumThisWorkbook.Sheets.Add Before:=Worksheets'添加一个新工作表在第一工作表前ActiveSheet.Move After:=ActiveWorkbook. _Sheets(ActiveWorkbook.Sheets.Count) '将当前工作表移至工作表的最后Worksheets(Array("sheet1","sheet2")).Select '同时选择工作表 1和工作表2Sheets("sheet1").Delete或 Sheets(1).Delete '删除工作表 1 ActiveWorkbook.Sheets(i).Name '获取工作表 i的名称ActiveWindow.DisplayGridlines=Not ActiveWindow.DisplayGridlines '切换工作表中的网格线显示,这种方法也可以用在其它方面进行相互切换,即相当于开关按钮ActiveWindow.DisplayHeadings=Not ActiveWindow.DisplayHeadings '切换工作表中的行列边框显示edRange.FormatConditions.Delete '删除当前工作表中所有的条件格式Cells.Hyperlinks.Delete '取消当前工作表所有超链接ActiveSheet.PageSetup.Orientation=xlLandscape或 ActiveSheet.PageSetup.Orientation=2 '将页面设置更改为横向ActiveSheet.PageSetup.RightFooter=ActiveWorkbook.FullName '在页面设置的表尾中输入文件路径ActiveSheet.PageSetup.LeftFooter=erName '将用户名放置在活动工作表的页脚ActiveSheet.Columns("B").Insert '在A 列右侧插入列,即插入 B 列ActiveSheet.Columns("E").CutActiveSheet.Columns("B").Insert '以上两句将 E 列数据移至 B 列,原 B 列及以后的数据相应后移ActiveSheet.Columns("B").CutActiveSheet.Columns("E").Insert '以上两句将 B列数据移至 D列,原 C列和D列数据相应左移一列ActiveSheet.Calculate '计算当前工作表ThisWorkbook.Worksheets(""sheet1").Visible=xlSheetHidden '正常隐藏工作表,同在 Excel 菜单中选择""格式——工作表——隐藏"操作一样ThisWorkbook.Worksheets(""sheet1").Visible=xlSheetVeryHidden '隐藏工作表,不能通过在 Excel 菜单中选择""格式——工作表——取消隐藏"来重新显示工作表ThisWorkbook.Worksheets(""sheet1").Visible=xlSheetVisible '显示被隐藏的工作表ThisWorkbook.Sheets(1).ProtectContents '检查工作表是否受到保护ThisWorkbook.Worksheets.Add Count:=2,Before:=ThisWorkbook.Worksheets(2)或 ThisWorkbook.Workshees.Add ThisWorkbook.Worksheets(2), , 2 '在第二个工作表之前添加两个新的工作表ThisWorkbook.Worksheets(3).Copy '复制一个工作表到新的工作簿ThisWorkbook.Worksheets(3).Copy ThisWorkbook.Worksheets'复制第三个工作表到第二个工作表之前ThisWorkbook.ActiveSheet.Columns.ColumnWidth = 20 '改变工作表的列宽为20ThisWorkbook.ActiveSheet.Columns.ColumnWidth =ThisWorkbook.ActiveSheet.StandardWidth '将工作表的列宽恢复为标准值ThisWorkbook.ActiveSheet.Columns(1).ColumnWidth = 20 '改变工作表列 1的宽度为 20ThisWorkbook.ActiveSheet.Rows.RowHeight = 10 '改变工作表的行高为 10 ThisWorkbook.ActiveSheet.Rows.RowHeight =ThisWorkbook.ActiveSheet.StandardHeight '将工作表的行高恢复为标准值ThisWorkbook.ActiveSheet.Rows(1).RowHeight = 10 '改变工作表的行 1的高度值设置为 10ThisWorkbook.Worksheets(1).Activate '当前工作簿中的第一个工作表被激活ThisWorkbook.Worksheets("Sheet1").Rows(1).Font.Bold = True '设置工作表Sheet1中的行1数据为粗体ThisWorkbook.Worksheets("Sheet1").Rows(1).Hidden = True '将工作表Sheet1中的行1隐藏ActiveCell.EntireRow.Hidden = True '将当前工作表中活动单元格所在的行隐藏注:同样可用于列。

Vba代码集锦--find方法(1)

Vba代码集锦--find方法(1)

Vba代码集锦--find方法(1)Sub find1()'在指定区域查找第一个符合条件的单元格aaa = Range('A:A').Find('特定值').Row '返回A列第一个出现特定值的单元格行值bbb = [D:E].Find('特定值').Address '按照先行后列的方式从多列查找特定值出现的第一个单元格ccc = Range('D:E').Find('特定值',AFTER:=Range('D1')).Address '从特定位置往后查找,若无到结尾后会从开始循环。

如果函数的名称中含要查找的字符,会返回该公式所在单元格ddd = [A:F].Find('特定值', LookIn:=xlValues).Row '在指定区域的单元格值中查找第一个包含特定值的单元格eee = [A:F].Find('特定值', LookIn:=xlValues,AFTER:=Range('E4')).Row '结合上述两种fff = [A:F].Find('C2', LookIn:=xlFormulas).Address '在指定区域中查找引用C2的第一个公式所在单元格ggg = [D:E].Find('特定值', LookIn:=xlValues,LOOKAT:=xlPart).Address '模糊查找从第二个单元格开始找,默认是模糊查找,精确匹配查找是xlwholehhh = Range('A:F').Find('特定值', LookIn:=xlValues,LOOKAT:=xlWhole, SEARCHORDER:=xlByRows).Address '先行后列,先列后行是xlByColumnsiii = Range('A:F').Find('特定值', , xlValues, xlWhole, xlByColumns, xlPrevious).Address '从后往前找,从前往后是xlNextjjj = Range('A:F').Find('特定值', , xlValues, xlWhole, xlByColumns, xlNext, False).Address 'False是不区分大小写,true是区分大小写End Sub----------------------------------------。

NO1什么是VBA?

NO1什么是VBA?

第一节VBA的基础
1.什么是VBA?
VBA是一种语言,EXCEL能够听的懂的话。

是用VBA语言来编写的。

2.有什么作用?
(1)实现了EXCEL没有提供的功能。

(2)提高工作效率
(3)编写自定义函数
(4)实现一些自动化的功能
(5)通过插入窗体,微小型管理软件
3.VBA在哪里存放的?怎么运行的
代码可以在模块里存放
(1)可以通过直接运行的方式来运行代码
(2)可以插入按钮,指定宏,然后点击按钮就可以执行
4.什么是宏,宏和VBA有什么关系?
宏就是一个操作的过程,可以通过录制宏来记录操作步骤。

可以通过运行宏
来重复的一些操作步骤
录制宏的时候,其实编译器也自动帮我们写了一段代码。

但是录制只能录制操作步骤,不能添加一些判断,所以这个时候我们就要手动的编写一些代码,由此可见,获得代码可以有两种方式,第一就是录制宏,第二就是手动编写。

5.编写一个简单的VBA程序
Sub 输入()
Range("b2") = "abcd"
End Sub
在b2单元格中输入abcd。

Office编程工具VBA(1)

Office编程工具VBA(1)

VBA可以实现如下一些功能
1. 使重复的任务自动化。 2. 自定义工具栏、菜单和界面。 3. 简化模板的使用。 自定义Office,使其成为开发平台。 5. 创建报表。 6. 对数据进行复杂的操作和分析。
Office作为开发平台的主要优点
1. Office 本身功能强大,包括打印、文件处理、格 式化和文本编辑等。 2. Office应用软件及其VBA内置大量函数、语句、 方法等,功能非常丰富。 3. Office界面熟悉,便于软件推广应用。 便于发布。只需要发布含有 VBA 代码的文档,无需 考虑运行环境,因为Office是普遍配备的应用软件。 5.利用宏可以实现部分程序设计自动化,大大提高 软件开发效率。
对象、属性、方法和事件
同其它任何面向对象的编程语言一样,VBA里 也有对象、属性、方法和事件。 所谓对象,就是代码和数据的组合。如表、窗体 或文本框等都是对象。 所谓属性,是指对象的特性,像大小、颜色、状 态等。所谓方法指的是对象能执行的动作,如刷 新等。 事件是一个对象可以辨认的动作,像单击鼠标或 按下某键等,并且可以写某些代码针对此述动作 来做响应。
1宏
宏(Macro)是一组VBA语句。可以理解为一个程序段,或一个子 程序。在Office中,宏可以直接编写,也可以通过录制形成。录制宏, 实际上就是将一系列操作过程记录下来并由系统自动转换为VBA语 句。这是目前最简单的编程方法,也是VBA最有特色的地方。 1.1 宏的录制与执行 1.2 宏的编辑 1.3 为宏指定快捷键 1.4 指定宏保存的位置 1.5 将宏指定给按钮 1.6 将宏指定给图片或工具栏按钮
窗体、对象、 【例1】 窗体、对象、属性范例
新建一个窗体,放置两个按钮和一个文字框 控件。按钮的标题分 别定义为“显示”和 “清除”。单击“显示”按钮,在文字框中 显示一行文字,单击“清除”按钮,清除文2 运算符 3 注释 4 连写和断行

第1章 宏与VBA快速入门

第1章 宏与VBA快速入门

第1章 宏与VBA快速入门本章将介绍有关宏与VBA的基础知识,包括宏和VBA的基本认识、宏的安全性是如何实施的、如何使用宏、如何让工作簿带有宏、VBA开发环境简介、VBA语言元素、编写代码的技巧等内容。

通过本章的内容,希望可以让您快速了解Excel中的宏与VBA,为后面学习高级VBA技术打下基础。

1.1认识宏与VBA如果您从未使用过宏,那么通过“宏”这个字的表面含义很难理解它的作用。

在Excel 中,宏是指一系列操作命令的组合,它经过用户录制后可以自动重复播放,通常用于完成需要重复进行的操作。

而VBA可以说是宏的一个更高层次,如果您使用过宏,那么可以对录制的宏进行编辑,在进入VBE编辑环境后(详见1.5节),就能看到宏内包含的代码。

这就是VBA(Visual Basic For Applications)代码。

1.1.1什么是宏以及使用VBA的好处也许您对宏并不十分了解,或许您从未使用过宏,但是我们为什么要使用宏呢?主要有以下几个原因:希望摆脱乏味的多次重复性操作。

将多步操作整合到一起,成为一个命令集合,一次性完成多步操作。

让Excel自动化操作取代人工操作。

增强Excel程序的易用性,让不熟悉Excel界面操作的用户,轻松实现想要完成的任务。

例如,如果您经常要对不同工作表或工作簿中的单元格设置相同的格式,那么将设置单元格格式的多步操作录制下来(录制宏),然后即可在以后的单元格格式设置中通过运行所录制的宏,在转瞬间对选定区域设置完全相同的格式。

在如图所示的工作表中,使用宏自动对单元格区域A1:G8设置了格式。

那么它是如何工作地呢?首先选择某个单元格,然后单击状态栏下方的录制按钮开始录制,对单元格进行想要的格式设置。

完成后单击状态栏中的停止按钮完成宏的录制。

此时您已经将刚才所做的操作都录制下来了,这时选择要设置格式的区域A1:G8,然后选择【视图】Ö【宏】Ö【宏】Ö【查看宏】命令(或按【Alt+F8】组合键),在打开的对话框中选择刚才录制的宏并单击【执行】按钮,就可以将刚才设置的格式效果直接作用于当前选择的单元格区域中,如图1-1所示。

新手学vba数组--示例1 - 『excel在线学习与辅导』 - excel精英培训网

新手学vba数组--示例1 - 『excel在线学习与辅导』 -  excel精英培训网

if tmp = vbno then Biblioteka xit sub end if
insrow = fndrow
else
sheet2.rows(2).insert
insrow = 2
sheet4.cells(1, 2) = invno
end if
msgbox "请输入品名"
exit sub
end if
invno = sheet1.cells(2, 14)
fndrow = 0
on error resume next
fndrow = sheet2.columns(2).find(invno).row
on error goto 0
next x
end sub
以下是引用fjmxwrs在2010-8-8 11:09:00的发言:
也就是说此例不知道多张表时,超10张,但不知道,怎么办?是不是就应该把这个数组定义大些(箱子多点)可是大到什么程度要怎么来界定或表示?
另外,怎么来显示一下使用的运行时间是多少?
msgbox tine这个时间要怎么写?我想测试下这个运行的时间
sheet2.cells(insrow, 23) = sheet1.cells(8, 2)
sheet2.cells(insrow, 24) = sheet1.cells(9, 2)
sheet2.cells(insrow, 25) = sheet1.cells(8, 7)
sheet2.cells(insrow, 26) = sheet1.cells(9, 7)
'sheet2.cells(eofrow - 2, 4) = sheet1.cells(4, 2)

ExcelVBA基础及应用PPT课件

ExcelVBA基础及应用PPT课件
静态的,就像是语文里的名词、形容词或副词,而方 法则是做某件事的一个动作,就像动词,对象和方法 同样用点来分割。
对象名.方法 [参数] 。
例如Range 对象的 Select方法,它的作用是选中指定的 Range(单元格区域)对象,在立即窗口输入:
Range ("B2:D10").Select
回车,可以看到D1:F10已被选中。
Range是VBA的一种数据类型,语句Range(“A2”).Select 表示选中A2单元格,另外一种选择A2单元格的方式为: cells(2,1).Select。
第9页/共88页
• ActiveCell表示当前活动单元格,FormulaR2C1表示输入 数据, 语句ActiveCell. FormulaR2C1=“序号”,表示在当 前活动单元格(即A2)中输入“序号”,另外一种更简 练的语句是:Range(“A2”)= “序号”。
• 宏命令以Sub开始,“Sub 制作表头()”表示宏名为 “制作表头”,在Sub和宏名之间应有至少一个空格, 宏名后应有一对括弧“()”;宏命令以End Sub结束, 在Sub和End Sub之间的各行语句均为宏代码,即
V以B单A 命引令号“。’”开头的语句为注释语句,仅表示对程序 的注释说明,注释语句以绿色背景出现,在运行宏时, 所有的注释语句均被忽略。
“Sheet1”的工作表。 Msgbox函数是一个信息对话框函数,它可以向用户显示一些有
用的信息。具体函数的用法大家可以在程序代码里将Msgbox抹 黑,按F1就会弹出Msgbox函数的详细用法说明。
第30页/共88页
3.3 方法
每一个对象都有方法,方法是在对象上执行的某个动作。 • 和属性相比,属性表示的是对象某种状态或样子,是

VBA之正则表达式(1)--基础篇

VBA之正则表达式(1)--基础篇

VBA之正则表达式(1)--基础篇正则表达式(Regular Expression),常被用来检验、替换符合某个模式(规则)的字符串,在代码中常缩写为regexp。

VBA中并没有直接提供正文表达式对象,需要借助VBScript的正则对象。

如果使用前期绑定,那么就需要在VBE中引用如下扩展库:也可以使用后期绑定的方式创建正则对象,代码如下。

Set objRegEx = CreateObject('vbscript.regexp')正则对象有四个属性和三个方法。

假设待处理的文本如下,现需要提取其中的姓名汉字和电话数字。

Name:张三丰,Phone:138****0000示例代码如下。

Sub RegExpDemoSyntax()Dim objRegEx As ObjectSet objRegEx = CreateObject('vbscript.regexp')objRegEx.Pattern = 'Name:(.*?),Phone:(\d+)'objRegEx.Global = TruemyString = 'Name:张三丰,Phone:138****0000'Set objMH = objRegEx.Execute(myString)If objMH.Count > 0 ThenWith objMH(j)Debug.Print .submatches(0), .submatches(1)End WithEnd IfSet objRegEx = NothingEnd Sub代码在立即窗口输出结果如下:张三丰138****0000由示例可以看到正则对象的属性和方法并不复杂,也可以说too simple。

但是想用好正则就不是那么简单的事情,其核心在于如何编写正确高效的正则匹配模式,即设置Pattern参数。

在接下来的几篇推文中将介绍一些Excel中正则应用实例当当、天猫、京东各大商城均有出售。

vba提取某一列起始行和最后一行信息-概述说明以及解释

vba提取某一列起始行和最后一行信息-概述说明以及解释

vba提取某一列起始行和最后一行信息-概述说明以及解释1.引言1.1 概述VBA(Visual Basic for Applications)是一种用于编写Microsoft Office软件中的宏和自定义函数的编程语言。

它可以帮助用户自动化和扩展Office应用程序的功能,提高工作效率。

本文将介绍如何利用VBA编程语言来提取某一列数据的起始行和最后一行信息。

通过编写简单的代码,我们可以轻松获取所需数据,节省了手动查找和整理的时间。

在接下来的章节中,我们将详细介绍VBA的基本知识,以及如何使用它来实现提取某一列数据的起始行和最后一行信息的功能。

希望本文能帮助读者更好地利用VBA提高工作效率。

1.2 文章结构文章结构部分的内容应当包括以下内容:本文主要包括引言、正文和结论三个部分。

1. 引言部分即文章的开篇,包括概述、文章结构和目的,通过引入问题背景和文章主题来引导读者进入文章内容。

2. 正文部分主要包括VBA简介、提取某一列起始行信息和提取某一列最后一行信息三个子篇章,具体介绍了VBA的基本概念,以及如何利用VBA语言实现提取某一列数据的起始行和最后一行信息。

3. 结论部分是整篇文章的总结部分,主要包括总结提取方法、应用场景探讨和展望未来发展三个方面,从不同的角度对本文内容进行总结和展望,为读者提供更深层次的思考。

通过以上结构,读者可以清晰地了解到本文的内容框架和逻辑脉络,有助于读者更好地理解文章的主题和内容。

1.3 目的本文旨在介绍使用VBA编程语言提取Excel表格中某一列的起始行和最后一行信息的方法。

通过本文的学习,读者将能够掌握如何在VBA环境下编写代码来实现这一功能,从而提高在处理大量数据时的效率和准确性。

通过学习本文,读者将能够了解VBA编程语言的基本原理和语法,掌握如何在Excel中运用VBA代码操作数据,具体实现提取某一列起始行和最后一行信息的功能。

同时,本文还将探讨在实际应用场景中的具体应用方法,帮助读者更好地理解VBA在数据处理中的价值和作用。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

四、变量
变量是在计算机内存中开辟的空间,用于临时保存数值 的地方。每次应用程序运行时,变量可能包含不同的数值, 其里面的数值可以随着代码的运行改变。
变量可以用来保存用户输入的数据,也可以用来进行 计算任务中临时数据的保存。我们可以理解为计算机内存中 存放数据的盒子。
1)变量的类型 变量的数据类型控制变量允许保存何种类型的数据。 就跟一个小盒不能装一个很大的物体一样。教材中的表 列出了V B A支持的数据类型,各种类型变量所需的存储 空间和存储数值范围。但是一般不需要记忆。
六、数据的运算
在程序中,经常需要对数据进行各类运算,构成表达式。 常用运算符的写法如下:
+ * / mod &
上述运算符需要注意的是: mod,该操作符用于求取余数,比如 3 mod 2 的结果为1,这 在判断一个数字是否是偶数时特别有用。 &, 该操作符用于连接两个字符串,比如 “jsj” & “VBA“ 的 结果为jsjVBA。 各种运算操作符加上常量和变量,可以构成运算表达式,其 结果可以给变量赋值。
进一步的,如果函数不需要返回值,则连参数的圆括号也 可以省略。例如:
MsgBox prompt:="请输入一个数", Title:="提示“
这种命名参数对函数的参数顺序就没有要求了
变量类型选择的目标是需要存储空间尽可能小又能保证 完成任务,以免造成存储空间的浪费。 最常用的类型为:integer,string,single,date,boolean等。 2)变量的声明 变量一般来说是先声明后使用,即给变量一个名称,便于 以后对他进行引用,相当于盒子的标号。声明使用Dim语句。 基本语法如下: Dim 变量名A s数据类型 相同类型的变量可以用逗号分隔,比如: Dim a as string Dim c,d as integer
VBA并不要求强制声明数据类型,如果不写数据类型,变量 默认为Varient(可变)类型。它可以容纳任何类型的数据,但 需要的存储空间比较大,而且需要程序较大的处理时间。 VBA也不要求强制声明变量后才能使用,但良好的程序风格 要求变量必须先声明后使用。否则程序将难于调试,如果要让 VBA必须先声明变量后使用,则可以在模块开始处加入 Option explicit 语句。
VBA语言基础——(1) 程序中的数据
一、模块
模块是作为一个单元保存在一起的V B A定义和过程的 集合。模块中的每个过程或者是函数,或者是过程。 当录制宏时,如果不存在模块,E x c e l会自动为你创 建。如果愿意,也可以添加附加的模块。E x c e l和V B A并 不关心过程位于哪个模块中,只要过程位于打开的工作簿中 ,都可以进行调用和执行。 过程被定义为V B A代码的一个单元,过程中包括一系列 用于执行某个任务或是进行某种计算的语句。工作簿中的每 个过程都有唯一的名字加以区分。 有两种不同的过程:子程序和函数。子程序只执行一 个或者多个操作,而不返回数值。宏只能录制子程序。
下面我们来看两个过程语法的例子: Private Sub Workbook_Open()
MsgBox "欢迎来到VBA的世界!" End Sub
上例中是我们学习过的工作簿打开事件示范。这类过程 我们称为事件过程。其名字一般为对象名,接下划线和 事件名称,空括号表示这个过程无参数。其中Private表 示访问范围,一般事件过程均为private,也可省略。 英语sub的意思为子程序。End sub表示过程书写结束。
如果是自己创建的过程或录制的过程,是如下的语法: Sub macro() ……. End Sub
一个模块文件可以书写任意多个过程。 二、良好的程序风格: 1) 缩进 良好的程序风格要求程序具有缩进结构,具体怎样缩进 将在后继课程中学习。缩进不是编程工具的硬性要求,但 缩进的程序能够具有层次感,便于阅读和调试。
3)变量的赋值和引用 如果要把数据保存到内存的变量空间中去,就要给 变量赋值,变量的赋值可以使用=,可以直接给变量赋值 也可以通过表达式或者函数的返回值赋值。比如:
请看下面的程序段示例:
a=4 MsgBox a a=3*a MsgBox a a = InputBox("请输入a") MsgBox a
例: 完成如下程序,运行宏时,程序显示对话框要求用户 输入一个数字,然后将该数字扩大100倍后,显示输出。
七、命名参数
函数按照定义的位置传递参数具有局限性。比如为了 传递第3个参数,必须首先给出前2个参数。为了弥补这一 缺陷, V B A支持命名参数。使用命名参数可以按照任意 次序传递参数。 要使用命名参数,按照语法(可参考帮助文件)输入 参数名,接着输入一个冒号和等号,在等号后面输入参数值。 例如下列代码: i = InputBox(prompt:="请输入一个数", Default:=50)
如果希望获得返回值,可使用和下面相似的代码: Dim i As Integer i = MsgBox("选择一个按钮", vbYesNoCancel + vbExclamation) MsgBox i 可以看到当用户按不同按钮时函数的返回值是不同的,那么 这些返回值表示什么含义呢?分别如下: 常数 值 说明 vbOK 1 确定 vbCancel 2 取消 vbAbort 3 终止 vbRetry 4 重试 vbIgnore 5 忽略 v b Ye s 6 是 vbNo 7 否 Msgbox函数正是通过返回值完成了与用户的交互。
该函数的第二个可省略(用方括号表示)参数为按钮和 图标,参数可选值可以参考教材。第三个参数为消息框的标 题。比如如下代码:
MsgBox "选择一个按钮", vbYesNoCancel + vbExclamation 注意在给出的语法中括号的运用。 M s g B o x是一个 函数,这意味着它可以返回一个值。在前面给出的例子中并 没有括号。如果去掉函数参数的括号,就是在告诉V B A不需 要函数的返回值。
Hale Waihona Puke 五、与用户交互注意上面的代码中我们使用了msgbox和inputbox两个函数, 这两个函数主要用来跟用户进行交互,这正是宏录制所不能做 到的。我们下面来看一下这两个函数的用法:
1) M s g B o x M s g B o x (提示符 [ ,按钮] [ ,标题]…. ) 这个函数必须具有的参数只有提示符。它是将在对话框 中作为信息显示的字符串。
2)InputBox函数 当只需做出“是”、“否”、“确定”、“取消”等简单的 答时, M s g B o x函数非常好用。但是,如果需要用户输入 数据,例如数字和文本时,就需要使用I n p u t B o x 函数。
I n p u t B o x函数显示一个输入数据的对话框,并且 提供便于用户输入的文本说明。函数的语法如下: I n p u t B o x (提示[ ,标题] [ ,缺省值] …. ) 接触到的一个新的参数是缺省值,该参数用于向用户 提供默认的输入值,节省用户输入时间。该函数也具有返回值, 为用户输入的数字或文本,请看如下代码: Dim i As Integer i = InputBox("请输入一个数", "1-100", 50) MsgBox i
2 )注释 在VBA程序中,注释使用的是一个单引号后面加上要 说明的语句,注释是给编程人员看的,计算机并不理解。 但良好的程序风格要求足够的注释。
3)VBA是大小写无关的,但常常喜欢将单词首字母大写。
三、常数的写法
在程序中书写常数时,数字的写法跟平常的书写比较类似。 直接写3.5 5 或者0.5 。如果是一串文字,我们称为字符串, 则需要在两端加上双引号。
相关文档
最新文档