当前位置:文档之家› VBA 常用宏

VBA 常用宏

打开全部隐藏工作表

Sub 打开全部隐藏工作表()

Dim i As Integer

For i = 1 To Sheets.Count

Sheets(i).Visible = True

Next i

End Sub

根据A1单元文本隐藏/显示按钮

Private Sub CommandButton1_Click()

Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Range("A1") = "显示按钮" Then

CommandButton1.Visible = 1

Else

CommandButton1.Visible = 0

End If

End Sub

当前单元返回按钮名称(控件按钮代码)

Private Sub CommandButton1_Click()

ActiveCell = CommandButton1.Caption

End Sub

当前单元内容返回到按钮名称(控件按钮代码)Private Sub CommandButton1_Click() CommandButton1.Caption = ActiveCell

End Sub

奇偶页分别打印

Sub 奇偶页分别打印()

Dim i%, Ps%

Ps = ExecuteExcel4Macro("GET.DOCUMENT(50)") '总页数 MsgBox "现在打印奇数页,按确定开始."

For i = 1 To Ps Step 2

ActiveSheet.PrintOut from:=i, To:=i

Next i

MsgBox "现在打印偶数页,按确定开始."

For i = 2 To Ps Step 2

ActiveSheet.PrintOut from:=i, To:=i

Next i

End Sub

自动打印多工作表第一页

Sub 自动打印多工作表第一页()

Dim sh As Integer

Dim x

Dim y

Dim sy

Dim syz

x = InputBox("请输入起始工作表名字:")

sy = InputBox("请输入结束工作表名字:")

y = Sheets(x).Index

syz = Sheets(sy).Index

For sh = y To syz

Sheets(sh).Select

Sheets(sh).PrintOut from:=1, To:=1

Next sh

End Sub

查找A列文本循环插入分页符(模块)

Sub Macro1()

For i = 2 To Range("a65535").End(xlUp).Row If Cells(i, 1) = 1 Then

Worksheets("表2").HPageBreaks.Add Before:=Cells(i, 1)

End If

Next

End Sub

将A列最后数据行以上的所有B列图片大小调整为所在单元大小

Sub 将A列最后数据行以上的所有B列图片大小调整为所在单元大小()

Dim Pic As Picture, i&

i = [A65536].End(xlUp).Row

For Each Pic In Sheet1.Pictures

If Not Application.Intersect(Pic.TopLeftCell, Range("B1:B" & i)) Is Nothing Then Pic.Top = Pic.TopLeftCell.Top

Pic.Left = Pic.TopLeftCell.Left

Pic.Height = Pic.TopLeftCell.Height

Pic.Width = Pic.TopLeftCell.Width

End If

Next

End Sub

返回光标所在行数

Sub 返回光标所在行数()

x = ActiveCell.Row

Range("A1") = x

End Sub

在A1返回当前选中单元格数量Sub 在A1返回当前选中单元格数量() [A1] = Selection.Count

End Sub

返回当前工作簿中工作表数量Sub 返回当前工作簿中工作表数量() t = Application.Sheets.Count MsgBox t

End Sub

返回光标选择区域的行数和列数Sub 返回光标选择区域的行数和列数() x = Selection.Rows.Count

y = Selection.Columns.Count Range("A1") = x

Range("A2") = y

End Sub

工作表中包含数据的最大行数

Sub 包含数据的最大行数()

n = Cells.Find("*", , , , 1, 2).Row

MsgBox n

End Sub

返回A列数据的最大行数

Sub 返回A列数据的最大行数()

n = Range("a65536").End(xlUp).Row

Range("B1") = n

End Sub

将所选区域文本插入新建文本框

Sub 将所选区域文本插入新建文本框()

For Each rag In Selection

n = n & rag.Value & Chr(32)

Next

ActiveSheet.Shapes.AddTextbox(msoTextOrientationHorizontal, ActiveCell.Left + ActiveCell.Width, ActiveCell.Top + ActiveCell.Height, 250#, 100).Select

Selection.Characters.Text = "" & n

With Selection.Characters(Start:=1, Length:=3).Font

.FontStyle = "常规"

End With

End Sub

批量插入地址批注

Sub 批量插入地址批注()

On Error Resume Next

Dim r As Range

If Selection.Cells.Count > 0 Then

For Each r In Selection

https://www.doczj.com/doc/6718161244.html,ment.Delete

r.AddComment

https://www.doczj.com/doc/6718161244.html,ment.Visible = False

https://www.doczj.com/doc/6718161244.html,ment.Text Text:="本单元格:" & r.Address & " of " & Selection.Address Next

End If

End Sub

批量插入统一批注

Sub 批量插入统一批注()

Dim r As Range, msg As String

msg = InputBox("请输入欲批量插入的批注", "提示", "随便输点什么吧") If Selection.Cells.Count > 0 Then

For Each r In Selection

r.AddComment

https://www.doczj.com/doc/6718161244.html,ment.Visible = False

https://www.doczj.com/doc/6718161244.html,ment.Text Text:=msg

Next

End If

End Sub

以A1单元内容批量插入批注

Sub 以A1单元内容批量插入批注()

Dim r As Range

If Selection.Cells.Count > 0 Then

For Each r In Selection

r.AddComment

https://www.doczj.com/doc/6718161244.html,ment.Visible = False

https://www.doczj.com/doc/6718161244.html,ment.Text Text:=[a1].Text

Next

End If

End Sub

不连续区域插入当前文件名和表名及地址

Sub 批量插入当前文件名和表名及地址()

For Each mycell In Selection

mycell.FormulaR1C1 = "[" + https://www.doczj.com/doc/6718161244.html, + "]" + https://www.doczj.com/doc/6718161244.html, + "!" + mycell.Address Next

End Sub

不连续区域录入当前单元地址

Sub 区域录入当前单元地址()

For Each mycell In Selection

mycell.FormulaR1C1 = mycell.Address

Next

End Sub

连续区域录入当前单元地址

Sub 连续区域录入当前单元地址()

Selection = "=ADDRESS(ROW(),COLUMN(),4,1)"

Selection.Copy

Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _

:=False, Transpose:=False

End Sub

返回当前单元地址

Sub 返回当前单元地址()

d = ActiveCell.Address

[A1] = d

End Sub

不连续区域录入当前日期

Sub 区域录入当前日期()

Selection.FormulaR1C1 = Format(Now(), "yyyy-m-d") End Sub

不连续区域录入当前数字日期

Sub 区域录入当前数字日期()

Selection.FormulaR1C1 = Format(Now(), "yyyymmdd") End Sub

不连续区域录入当前日期和时间

Sub 区域录入当前日期和时间()

Selection.FormulaR1C1 = Format(Now(), "yyyy-m-d h:mm:ss") End Sub

不连续区域录入对勾

Sub 批量录入对勾()

Selection.FormulaR1C1 = "√"

End Sub

不连续区域录入当前文件名

Sub 批量录入当前文件名()

Selection.FormulaR1C1 = https://www.doczj.com/doc/6718161244.html,

End Sub

不连续区域添加文本

Sub 批量添加文本()

Dim s As Range

For Each s In Selection

s = s & "文本内容"

Next

End Sub

从指定位置向下同时录入多单元指定内容

Sub 从指定位置向下同时录入多单元指定内容()

Dim arr

arr = Array("1", "2", "13", "25", "46", "12", "0", "20")

[B2].Resize(8, 1) = Application.WorksheetFunction.Transpose(arr) End Sub

以A1单元文本作表名插入工作表

Sub 以A1单元文本作表名插入工作表()

Dim nm As String

nm = [a1]

Sheets.Add

https://www.doczj.com/doc/6718161244.html, = nm

End Sub

删除全部未选定工作表

Sub 删除全部未选定工作表()

Dim sht As Worksheet, n As Integer, iFlag As Boolean

Dim ShtName() As String

n = ActiveWindow.SelectedSheets.Count

ReDim ShtName(1 To n)

n = 1

For Each sht In ActiveWindow.SelectedSheets ShtName(n) = https://www.doczj.com/doc/6718161244.html,

n = n + 1

Next

Application.DisplayAlerts = False

For Each sht In Sheets

iFlag = False

For i = 1 To n - 1

If ShtName(i) = https://www.doczj.com/doc/6718161244.html, Then

iFlag = True

Exit For

End If

Next

If Not iFlag Then sht.Delete

Next

Application.DisplayAlerts = True

End Sub

工作表标签排序

Sub 工作表标签排序()

Dim i As Long, j As Long, nums As Long, msg As Long

msg = MsgBox("工作表按升序排列请选 '是[Y]'. " & vbCrLf & vbCrLf & "工作表按降序排列请选 '否[N]'", vbYesNoCancel, "工作表排序") If msg = vbCancel Then Exit Sub

nums = Sheets.Count

If msg = vbYes Then 'Sort ascending

For i = 1 To nums

For j = i To nums

If UCase(Sheets(j).Name) < UCase(Sheets(i).Name) Then Sheets(j).Move Before:=Sheets(i)

End If

Next j

Next i

Else 'Sort descending

For i = 1 To nums

For j = i To nums

If UCase(Sheets(j).Name) > UCase(Sheets(i).Name) Then Sheets(j).Move Before:=Sheets(i)

End If

Next j

Next i

End If

End Sub

定义指定工作表标签颜色

Sub 定义指定工作表标签颜色()

Sheets("Sheet1").Tab.ColorIndex = 46

End Sub

查另一文件的全部表名

Sub 查另一文件的全部表名()

On Error Resume Next

Dim i%

Dim sh As Worksheet

Application.ScreenUpdating = False

Workbooks.Open Filename:=ThisWorkbook.Path & "\2.xls"

Windows("1.xls").Activate '当前文件名称

Sheets("Sheet1").Select '当前表名称

i = 1 '将表名称返回到第1行

For Each sh In Workbooks("2.xls").Worksheets

Cells(i, 1) = https://www.doczj.com/doc/6718161244.html, '将表名称返回到第1列

i = i + 1 '返回每个表名称向下移动1行

Next sh

Windows("2.xls").Close '关闭对象文件

Application.ScreenUpdating = True

End Sub

当前单元录入计算机名

Sub 当前单元录入计算机名()

Selection = Environ("COMPUTERNAME")

'Selection = Workbooks("临时表").Sheets("表2").Range("A1") 调用指定地址内容 End Sub

当前单元录入计算机用户名

Sub 当前单元录入计算机用户名()

Selection = Environ("Username")

'Selection = Workbooks("临时表").Sheets("表2").Range("A1") 调用指定地址内容 End Sub

为指定工作表加指定密码保护表

Sub 为指定工作表加指定密码保护表()

Sheet10.Protect Password:="123"

End Sub

在有密码的工作表执行代码

Sub 在有密码的工作表执行代码()

Sheet1.Unprotect Password:=123 '假定表名为“1”,密码为“123” 打开工作表Range("C:C").SpecialCells(xlCellTypeBlanks).EntireRow.Hidden = True '隐藏C列空值行Sheet1.Protect Password:=123 '重新用密码保护工作表

End Sub

执行前需要验证密码的宏(控件按钮代码)

Private Sub CommandButton1_Click()

If InputBox("请输入密码:") <> "123" Then '密码是123

MsgBox "密码错误,按确定退出!", 64, "提示"

Exit Sub

End If

Cells(1, 1) = 10

End Sub

Sub 执行前需要验证密码的宏()

If InputBox("请输入您的使用权限:", "系统提示") = 123 Then

Else

MsgBox "对不起,您没有使用该宏的权限,按确定键后退出!"

End If

End Sub

拷贝A1公式和格式到A2

[a1]=SUM($C$1:$C$10)

'[a1]中求和区域须绝对引用!

Sub 拷贝A1公式到A2()

[a1].Copy [a2]

End Sub

插入数值条件格式

Sub 插入数值条件格式()

Selection.FormatConditions.Add Type:=xlCellValue, Operator:=xlGreater, _ Formula1:="70"

Selection.FormatConditions(1).Interior.ColorIndex = 45

Selection.FormatConditions.Add Type:=xlCellValue, Operator:=xlLess, _

Formula1:="55"

Selection.FormatConditions(2).Interior.ColorIndex = 39 End Sub

添加文本

Sub 添加文本()

Selection = Selection + "×" '不可在数字后添加文本

End Sub

光标定位到指定工作表A列最后数据行下一单元

Sub 光标定位到指定工作表A列最后数据行下一单元()

a = Sheets("数据库").[a65536].End(xlUp).Row

Sheets("数据库").Select

Range("A" & a + 1).Select

End Sub

按当前单元文本定位

Sub 按当前单元文本定位()

ABC = Selection

Dim aa As Range

For Each a In https://www.doczj.com/doc/6718161244.html,edRange If a Like ABC Then

If aa Is Nothing Then

Set aa = a.Cells

Else

Set aa = Union(aa, a.Cells)

End If

End If

Next

aa.Select

End Sub

按固定文本定位

Sub 文本定位()

Dim aa As Range

For Each a In https://www.doczj.com/doc/6718161244.html,edRange If a Like "*合计*" Then

If aa Is Nothing Then

Set aa = a.Cells

Else

Set aa = Union(aa, a.Cells)

Excel之VBA编程常用语句300句汇总

Excel之VBA编程常用语句300句 时间:2009-11-27 21:12:21 来源:本站作者:未知我要投稿我要收藏投稿指南 定制模块行为 (1) Option Explicit '强制对模块内所有变量进行声明 Option Private Module '标记模块为私有,仅对同一工程中其它模块有用,在宏对话框中不显示 Option Compare Text '字符串不区分大小写 Option Base 1 '指定数组的第一个下标为1 (2) On Error Resume Next '忽略错误继续执行VBA代码,避免出现错误消息 (3) On Error GoTo ErrorHandler '当错误发生时跳转到过程中的某个位置 (4) On Error GoTo 0 '恢复正常的错误提示 (5) Application.DisplayAlerts=False '在程序执行过程中使出现的警告框不显示 (6) Application.ScreenUpdating=False '关闭屏幕刷新 Application.ScreenUpdating=True '打开屏幕刷新 (7) Application.Enable.CancelKey=xlDisabled '禁用Ctrl+Break中止宏运行的功能 工作簿 (8) Workbooks.Add() '创建一个新的工作簿 (9) Workbooks(“book1.xls”).Activate '激活名为book1的工作簿 (10) ThisWorkbook.Save '保存工作簿 (11) ThisWorkbook.close '关闭当前工作簿 (12) ActiveWorkbook.Sheets.Count '获取活动工作薄中工作表数 (13) https://www.doczj.com/doc/6718161244.html, '返回活动工作薄的名称 (14) https://www.doczj.com/doc/6718161244.html, ‘返回当前工作簿名称 ThisWorkbook.FullName ‘返回当前工作簿路径和名称 (15) ActiveWindow.EnableResize=False ‘禁止调整活动工作簿的大小 (16) Application.Window.Arrange xlArrangeStyleT iled ‘将工作簿以平铺方式排列 (17) ActiveWorkbook.WindowState=xlMaximized ‘将当前工作簿最大化 工作表 (18) https://www.doczj.com/doc/6718161244.html,edRange.Rows.Count ‘当前工作表中已使用的行数 (19) Rows.Count ‘获取工作表的行数(注:考虑向前兼容性) (20) Sheets(Sheet1).Name= “Sum” '将Sheet1命名为Sum (21) ThisWorkbook.Sheets.Add Before:=Worksheets(1) '添加一个新工作表在第一工作表前 (22) ActiveSheet.Move After:=ActiveWorkbook. _

excelvba常见字典用法集锦及代码详解(全)

常见字典用法集锦及代码详解 前言 凡是上过学校的人都使用过字典,从新华字典、成语词典,到英汉字典以及各种各样数不胜数的专业字典,字典是上学必备的、经常查阅的工具书。有了它们,我们可以很方便的通过查找某个关键字,进而查到这个关键字的种种解释,非常快捷实用。 凡是上过EH论坛的想学习VBA里面字典用法的,几乎都看过研究过northwolves狼版主、oobird版主的有关字典的精华贴和经典代码。我也是从这里接触到和学习到字典的,在此,对他们表示深深的谢意,同时也对很多把字典用得出神入化的高手们致敬,从他们那里我们也学到了很多,也得到了提高。 字典对象只有4个属性和6个方法,相对其它的对象要简洁得多,而且容易理解使用方便,功能强大,运行速度非常快,效率极高。深受大家的喜爱。 本文希望通过对一些字典应用的典型实例的代码的详细解释来

给初次接触字典和想要进一步了解字典用法的朋友提供一点备查的参考资料,希望大家能喜欢。 给代码注释估计是大家都怕做的,因为往往是出力不讨好的,稍不留神或者自己确实理解得不对,还会贻误他人。所以下面的这些注释如果有不对或者不妥当的地方,请大家跟帖时指正批评,及时改正。 字典的简介 字典(Dictionary)对象是微软Windows脚本语言中的一个很有用的对象。 附带提一下,有名的正则表达式(RegExp)对象和能方便处理驱动器、文件夹和文件的(FileSystemObject)对象也是微软Windows脚本语言中的一份子。 字典对象相当于一种联合数组,它是由具有唯一性的关键字(Key)和它的项(Item)联合组成。就好像一本字典书一样,是

EXCEL使用VBA宏生成SQL语句

有时候需要将Excel文件中的数据导入到数据库中,常用的做法是使用程序读取Excel,然后存入数据库;这里换一个方法,用Excel生成SQL语句,然后用这些SQL语句来更新数据库。 本文主要说明Excel如何使用VB宏构造需要的SQL语句,并生成文件。 2、如何添加按钮: 依次打开:视图–工具栏–控件工具箱,选择“命令按钮”,自己画一个就行了; 依次打开:右键–属性,可以修改名称、样式等。 具体操作可以上网找找。 3、如何使用VB宏: 依次打开:工具–宏–安全性,看看你的Excel是否允许使用“宏”。 然后打开:工具–宏–Visual Basic编辑器,双击左侧的“Sheet1”,然后在右侧的代码区域粘贴如下代码: '最大行数 Const MAX_NUM_ROW=5000 '导出文件路径所在单元格 Const PATH_OUTPUT_ROW=3 Const PATH_OUTPUT_COL=3 '定义列常量 Const NAME_COL=1 Const GENDER_COL=2 Const PHONE_COL=3 Const EMAIL_COL=4 '读取数据开始行数 Const START_ROW=5 '定义数据实体类 Private Type Tmplt NAME As String GENDER As String PHONE As String EMAIL As String End Type '行数变量 Dim noOfTmplts As Integer '数据实体类数组 Dim TmpltArray(MAX_NUM_ROW)As Tmplt '点击按钮触发事件 Private Sub CommandButton1_Click() generateSQL End Sub '生成SQL Private Sub generateSQL() makedir initData writeToFile

VBA 常用语句

VBA 常用语句汇总 1.Excel 连接Access:工程引用前勾选Microsoft DAO 3.6 Object Library 2.Excel 与Access建立连接并查询数据: Set conn = CreateObject("adodb.connection")(建立数据库) Set rs = CreateObject("adodb.recordset")(建立) conn.Open "Provider =microsoft.ACE.oledb.12.0; Data Source(驱动) =" & link(连接) SQL = "select * from [Excel 12.0(驱动);hdr=no(无标题);Database=" & ThisWorkbook.FullName & "].[Adjust$k2:m]as a left join[参数]on(a.f1=[参数].[Topcode]) and (a.f2=[参数].[BOM 版本]) and (a.f3=[参数].[BOM 状态])" rs.Open SQL, conn Set yy = conn.Execute(SQL) 3.定义字典 Set d = CreateObject("scripting.dictionary") 4.状态栏显示内容 Application.StatusBar = "☆☆☆☆程序正在运行,请稍后……☆☆☆☆"(显示内容) Application.StatusBar = ""(还原显示) 5.关闭/开启错误提示 Application.DisplayAlerts = False(关闭错误提示) Application.DisplayAlerts = True(开启错误提示) 6.获取最后一个非空单元格对应的行和列 r=Range("a:a").Find(What:="*",After:=[a1],searchorder:=xlByRows,SearchDirection:=xlPrevio us).Row [a:a].Find("*", , xlValues, , , xlPrevious).Row c=Range("1:1").Find(What:="*",After:=[a1],searchorder:=xlByRows,SearchDirection:=xlPrevio us).Column 7.设置单元格边框 With Range()(所要设置的区域) .Borders(xlEdgeLeft).Weight = xlThin .Borders(xlEdgeLeft).ThemeColor = 1 .Borders(xlEdgeLeft).TintAndShade = -0.499984740745262 .Borders(xlEdgeTop).Weight = xlThin .Borders(xlEdgeTop).ThemeColor = 1 .Borders(xlEdgeTop).TintAndShade = -0.499984740745262 .Borders(xlEdgeBottom).Weight = xlThin .Borders(xlEdgeBottom).ThemeColor = 1 .Borders(xlEdgeBottom).TintAndShade = -0.499984740745262 .Borders(xlEdgeRight).Weight = xlThin .Borders(xlEdgeRight).ThemeColor = 1

Excel+vba入门教程

VBA入门系列讲座 1.1 VBA是什么 直到90年代早期,使应用程序自动化还是充满挑战性的领域.对每个需要自动化的应用程序,人们不得不学习一种不同的自动化语言.例如:可以用excel的宏语言来使excel自动化,使用word BASIC使word自动化,等等.微软决定让它开发出来的应用程序共享一种通用的自动化语言--------Visual Basic For Application(VBA),可以认为VBA是非常流行的应用程序开发语言VASUAL BASIC 的子集.实际上VBA是”寄生于”VB应用程序的版本.VBA和VB的区别包括如下几个方面: 1. VB是设计用于创建标准的应用程序,而VBA是使已有的应用程序(excel 等)自动化 2. VB具有自己的开发环境,而VBA必须寄生于已有的应用程序. 3. 要运行VB开发的应用程序,用户不必安装VB,因为VB开发出的应用程序 是可执行文件(*.EXE),而VBA开发的程序必须依赖于它的”父”应用程 序,例如excel. 尽管存在这些不同,VBA和VB在结构上仍然十分相似.事实上,如果你已经了解了VB,会发现学习VBA非常快.相应的,学完VBA会给学习VB打下坚实的基础.而且,当学会在excel中用VBA创建解决方案后,即已具备在word access OUTLOOK FOXPRO PROWERPOINT中用VBA创建解决方案的大部分知识. ●VBA一个关键特征是你所学的知识在微软的一些产品中可以相互转化. ●VBA可以称作excel的“遥控器”. VBA究竟是什么?更确切地讲,它是一种自动化语言,它可以使常用的程序自动化,可以创建自定义的解决方案. 此外,如果你愿意,还可以将excel用做开发平台实现应用程序. 1.2 Excel环境中基于应用程序自动化的优点 也许你想知道VBA可以干什么?使用VBA可以实现的功能包括: 1. 使重复的任务自动化. 2. 自定义excel工具栏,菜单和界面. 3. 简化模板的使用. 4. 自定义excel,使其成为开发平台. 5. 创建报表. 6. 对数据进行复杂的操作和分析.

Excel宏的用法详解

宏的用法详解 1.1 VBA是什么 直到90年代早期,使应用程序自动化还是充满挑战性的领域.对每个需要自动化的应用程序,人们不得不学习一种不同的自动化语言.例如:可以用excel的宏语言来使excel自动化,使用word BASIC使word自动化,等等.微软决定让它开发出来的应用程序共享一种通用的自动化语言--------Visual Basic For Application(VBA),可以认为VBA是非常流行的应用程序开发语言V ASUAL BASIC 的子集.实际上VBA是"寄生于"VB应用程序的版本.VBA和VB的区别包括如下几个方面: 1. VB是设计用于创建标准的应用程序,而VBA是使已有的应用程序(excel等)自动化 2. VB具有自己的开发环境,而VBA必须寄生于已有的应用程序. 3. 要运行VB开发的应用程序,用户不必安装VB,因为VB开发出的应用程序是可执行文件(*.EXE),而VBA开发的程序必须依赖于它的"父"应用程序,例如excel. 尽管存在这些不同,VBA和VB在结构上仍然十分相似.事实上,如果你已经了解了VB,会发现学习VBA非常快.相应的,学完VBA会给学习VB打下坚实的基础.而且,当学会在excel中用VBA创建解决方案后,即已具备在word access OUTLOOK FOXPRO PROWERPOINT 中用VBA创建解决方案的大部分知识. * VBA一个关键特征是你所学的知识在微软的一些产品中可以相互转化. * VBA可以称作excel的“遥控器”. VBA究竟是什么?更确切地讲,它是一种自动化语言,它可以使常用的程序自动化,可以创建自定义的解决方案. 此外,如果你愿意,还可以将excel用做开发平台实现应用程序. 1.2 excel环境中基于应用程序自动化的优点 也许你想知道VBA可以干什么?使用VBA可以实现的功能包括: 1. 使重复的任务自动化. 2. 自定义excel工具栏,菜单和界面. 3. 简化模板的使用. 4. 自定义excel,使其成为开发平台. 5. 创建报表. 6. 对数据进行复杂的操作和分析. 用excel作为开发平台有如下原因: 1. excel本身功能强大,包括打印,文件处理,格式化和文本编辑. 2. excel内置大量函数. 3. excel界面熟悉. 4. 可连接到多种数据库. 用其他语言开发应用程序,一半的工作是编写一些基本功能的模块,包括文件的打开和保

最常用的 Excel VBA语法200句

[VBA] 语法200句 定制模块行为 (1) Option Explicit '强制对模块内所有变量进行声明 Option Private Module '标记模块为私有,仅对同一工程中其它模块有用,在宏对话框中不显示Option CompareText '字符串不区分大小写 Option Base 1 '指定数组的第一个下标为1 (2) On Error Resume Next '忽略错误继续执行VBA代码,避免出现错误消息 (3) On Error GoToErrorHandler '当错误发生时跳转到过程中的某个位置 (4) On Error GoTo 0 '恢复正常的错误提示 (5)Application.DisplayAlerts=False '在程序执行过程中使出现的警告框不显示 (6)Application.ScreenUpdating=False '关闭屏幕刷新 Application.ScreenUpdating=True'打开屏幕刷新 (7)Application.Enable.CancelKey=xlDisabled '禁用Ctrl+Break中止宏运行的功能 工作簿 (8) Workbooks.Add() '创建一个新的工作簿 (9) Workbooks(「book1.xls」).Activate '激活名为book1的工作簿 (10) ThisWorkbook.Save '保存工作簿 (11) ThisWorkbook.close '关闭当前工作簿 (12)ActiveWorkbook.Sheets.Count '获取活动工作薄中工作表数 (13) https://www.doczj.com/doc/6718161244.html, '返回活动工作薄的名称 (14) https://www.doczj.com/doc/6718161244.html, 『返回当前工作簿名称 ThisWorkbook.FullName 『返回当前工作簿路径和名称 (15)ActiveWindow.EnableResize=False 『禁止调整活动工作簿的大小 (16)Application.Window.Arrange xlArrangeStyleTiled 『将工作簿以平铺方式排列 (17) ActiveWorkbook.WindowState=xlMaximized『将当前工作簿最大化 工作表 (18)https://www.doczj.com/doc/6718161244.html,edRange.Rows.Count 『当前工作表中已使用的行数 (19) Rows.Count 『获取工作表的行数(注:考虑向前兼容性) (20) Sheets(Sheet1).Name= 「Sum」'将Sheet1命名为Sum (21) ThisWorkbook.Sheets.AddBefore:=Worksheets(1) '添加一个新工作表在第一工作表前 (22) ActiveSheet.MoveAfter:=ActiveWorkbook. _

vba常用代码大全

前言 我们平时在工作表单元格的公式中常常使用函数,Excel自带的常用的函数多达300多个,功能强大,丰富多彩,但是在VBA中不能直接应用,必须在函数名前面加上对象,比如:Application.WorksheetFunction.Sum(arg1,arg2,arg3)。 而能在VBA中直接应用的函数也有几十个,下面将逐一详细介绍常用的40个VBA函数,以供大家学习参考。 第1.1例 ASC函数 一、题目: 要求编写一段代码,运行后得到字符串”Excel”的首字母和”e”的ASCII值。 二、代码: Sub 示例_1_01() Dim myNum1%, myNum2% myNum1 = Asc("Excel") '返回69 myNum2 = Asc("e") '返回101 [a1] = "myNum1= ": [b1] = myNum1 [a2] = "myNum2= ": [b2] = myNum2 End Sub 三、代码详解 1、Sub 示例_1_01():宏程序的开始语句。 2、Dim myNum1%, myNum2%:变量myNum1和myNum2声明为整型变量。

也可以写为 Dim myNum1 As Integer 。Integer 变量存储为 16位(2 个字节)的数值形式,其范围为 -32,768 到 32,767 之间。Integer 的类型声明字符是百分比符 号 (%)。 3、myNum1 = Asc("Excel"):把Asc函数的值赋给变量myNum1。 Asc函数返回一个 Integer,代表字符串中首字母的字符的ASCII代码。 语法 Asc(string) 必要的 string(字符串)参数可以是任何有效的字符串表达式。如果 string 中没有包含任何字符,则会产生运行时错误。 4、myNum2 = Asc("e"):把Asc函数的值赋给变量myNum2。这里返回小写字母e 的ASCII代码101。 5、[a1] = "myNum1= ": [b1] = myNum1:把字符串“myNum1= “赋给A1单元格,把变量myNum1的值赋给B1单元格。 6、[a2] = "myNum2= ": [b2] = myNum2:把字符串“myNum2= “赋给A2单元格,把变量myNum2的值赋给B2单元格。 7、End Sub:程序的结束语句,和“Sub示例_1_01()”相对应。 第1.2例 Chr函数 一、题目"": 要求编写一段代码,运用Chr函数将ASCII值转换为对应的字符。 二、代码: Sub 示例_1_02()

excel的宏教程免费下载

Microsoft excel是一款功能非常强大的电子表格软件。它可以轻松地完成数据的各类数学运算,并用各种二维或三维图形形象地表示出来,从而大大简化了数据的处理工作。但若仅利用excel的常用功能来处理较复杂的数据,可能仍需进行大量的人工操作。但excel的强大远远超过人们的想象--宏的引入使其具有了无限的扩展性,因而可以很好地解决复杂数据的处理问题。 随着支持Windows的应用程序的不断增多和功能的不断增强,越来越多的程序增加了宏处理来方便用户的自由扩展。但初期各应用程序所采用的宏语言并不统一,这样用户每使用一种应用程序时都得重新学习一种宏语言。为了统一各种应用程序下的宏,Microsoft推出了VBA(Visual Basic for Applications)语言。 VBA是从流行的Visual Basic编程语言中派生出来的一种面向应用程序的语言,它适用于各种Windows应用程序,可以解决各应用程序的宏语言不统一的问题。除此之外,使用 VBA语言还有如下优点:1、VBA是一种通用程序语言,通过它不仅可以共享Microsoft相关的各种软件(如excel、 word、access)……,而且随着其它的一些软件(如大名鼎鼎的AutoCAD2000)等对VBA的支持,这些软件也已进入到了VBA的控制范围;2、可以将用VBA编写的程序复制到Visual Basic中调试并运行,从而实现用Visual Basic来控制有关的应用程序;3、VBA 提供的大量内部函数大大简化了用户的操作。 对于而今的宏,不仅语言统一规范,而且其功能也已非常强大。但在大多数介绍excel的"傻瓜书"、"指南"、"入门与提高"等参考书中往往略过不提,或浅浅带

VBA语法基础(上下)

VBA语法基础(上) - - - - - - - - - - - - - - - - - - 数据类型 “数据类型”是指如何将数据存储在内存中。 (1)Boolean 表示逻辑数据,可以是True或False中的任一个值。占用2字节的存储空间,取值范围为True或False,缺省值为Fal se。 (2)Byte 只能表示正数。占用1字节的存储空间,取值范围为0-255,缺省值为0。 (3)Currency 一种保存货币值数据的特殊数字格式。占用8字节的存储空间,取值范围为-922337203685477.5808-9223372036854 77.5807,缺省值为0。 (4)Date 一种用于表示日期或时间的专用格式。占用8字节的存储空间,取值范围为100年1月1日——9999年12月31日,缺省值为00:00:00。(有关在VBA中使用日期和时间的详细介绍请见后面的一系列文章。) (5)Decimal 一种包含以10的幂为刻度的十进制数的变体子类型,只能通过CDec转换函数创建,不是一种独立的数据类型。占用

14字节的存储空间,取值范围为±79228162514264337593 543950335(不带小数点)或±7.92281625142643375935439 50335(带28位小数点),缺省值为0。 (Decimal数据类型是在Excel 2000中引入的,在以前的版本中不能使用这种数据类型。该数据类型非常特殊,因为不能实际声明它,它是Variant的子类型,必须使用CDec函数将一个变量转换为Decimal数据类型) (6)Double 存储双精度浮点数,占用8字节的存储空间,取值范围为负值:-1.79769313486232E308——4.94065645841247E-32 4,正值:1.79769313486232E308——4.94065645841247 E-324,缺省值为0。 (7)Integer 表示从-32768-32767之间的整数,其中一位表示符号,占用2字节的存储空间,缺省值为0。 (8)Long 表示存储为4个字节空间的带符号的数,其中一位表示符号,取值范围为-2147483648-2147483647,缺省值为0。(9)Object 包含对某个对象的引用(地址),占用4字节的存储空间,可对任何对象引用,缺省值为Nothing。 (10)Single

excel宏教程.doc

Excel宏教程 一、选中单个单元格 Range(“<单元格地址>“ ).Select 例: Range("C9").Select‘选中“C9”单元格 二、选中多个单元格 Range(“<单元格地址>:<单元格地址>[,<单元格地址>] ” ).Select 例: Range(“A1:B2”).Select‘选中“A1”、“A2”、“B1”、“B2”四个连续的单元格 Range(“ 12:12” ).Select‘选中第12行 Range(“ B:B” ).Select‘选中第B列 Range(“ A1:A2,B7,2:2” ).Select‘选中“ A1、”“A2、”“B7五”个不连续的单元格和第二行Cells.Select‘选中当前 SHEET 中的所有单元格 Rows("< 行地址 >:< 行地址 >").Select‘选中整行 Columns("< 列地址 >:< 列地址 >").Select‘选中整列 例: Rows(“2:2 ”). Select‘选中第2行 Rows( “ 2:5 ” ). Select‘选中 2 到 5 行 Columns("A:A").Select‘选中A列 Columns("E:B").Select‘选中E到B列

三、设置活动单元格 Range("< 单元格地址 >").Activate 注:设置活动单元格与选中单元格类似,不同之处就是 后者在选中指定的单元格之前会将在此前已被选中的单元格取消掉。 前者在设置之前不会取消已选中的单元格, 如果此时操作的单元格不是被选中的单元格,这时他实现的功能与选一个单元格相同。 四、给活动的单元格赋值 ActiveCell.FormulaR1C1 = <值> 例: Range("A1").Select ActiveCell.FormulaR1C1 = "Name" Range("B1").Select ActiveCell.FormulaR1C1 = "Age" Range("A2:B3").Select Range("A2").Activate ActiveCell.FormulaR1C1 = " BUG" Range("B2").Activate ActiveCell.FormulaR1C1 = "12" Range("A3").Activate ActiveCell.FormulaR1C1 = "Archer" Range("B3").Activate ActiveCell.FormulaR1C1 = "37"

常用VBA基础语句

常用VBA语句 (1)Option Explicit '强制对模块内所有变量进行声明 (2)Option Base 1 '指定数组的第一个下标为1 (3)On Error Resume Next '忽略错误继续执行VBA代码,避免出现错误消息 (4)On Error GoTo 100 '当错误发生时跳转到过程中的某个位置 (5)On Error GoTo 0 '恢复正常的错误提示 (6)Application.DisplayAlerts=False '在程序执行过程中使出现的警告框不显示 (7)Application.DisplayAlerts=True '在程序执行过程中 (8)Application.ScreenUpdating=False '关闭屏幕刷新 (9)Application.ScreenUpdating = True '打开屏幕刷新 (10)Workbooks.Add() '创建一个新的工作簿 (11)Workbooks(“book1.xls”).Activate '激活名为book1的工作簿 (12)T hisWorkbook.Save '保存工作簿 (13)T hisWorkbook.close '关闭当前工作簿 (14)ActiveWorkbook.Sheets.Count '获取活动工作薄中工作表数 (15)https://www.doczj.com/doc/6718161244.html, '返回活动工作薄的名称 (16)T https://www.doczj.com/doc/6718161244.html, ‘返回当前工作簿名称 (17)T hisWorkbook.FullName ‘返回当前工作簿路径和名 (18)(18) https://www.doczj.com/doc/6718161244.html,edRange.Rows.Count ‘当前工作表中已使用的行数 (19)R ows.Count ‘获取工作表的行数(注:考虑兼容性) (20)Sheets(Sheet1).Name= “Sum”'将Sheet1命名为Sum (21)ThisWorkbook.Sheets.Add Before:=Worksheets(1) '添加一个新工作表在第一工作表前 (22)ActiveSheet.Move After:=ActiveWorkbook.Sheets(ActiveWorkbook.Sheets.Count) '将当 前工作表移至工作表的最后 (23)Worksheets(Array(“sheet1”,”sheet2”)).Select '同时选择工作表1和工作表2 (24)Sheets(“sheet1”).Delete或Sheets(1).Delete '删除工作表1 (25)https://www.doczj.com/doc/6718161244.html,edRange.FormatConditions.Delete ‘删除当前工作表中所有的条件格式 (26)Cells.Hyperlinks.Delete ‘取消当前工作表所有超链接 (27)A ctiveCell.CurrentRegion.Select选择当前活动单元格所包含的范围,上下左右无空行 (28)Cells.Select ‘选定当前工作表的所有单元格 (29)Range(“A1”).ClearContents '清除活动工作表上单元格A1中的Selection.ClearContents '清除选定区域内容Range(“A1:D4”).Clear '彻底清除A1至D4单元格区域的内容,包括格式 (30)Cells.Clear '清除工作表中所有单元格的内容 (31)A ctiveCell.Offset(1,0).Select '活动单元格下移一行,同理,可下移一列 (32)Range(“A1”).Copy Range(“B1”) '复制单元格A1,粘贴到单元格B1中 (33)R ange(“A1:D8”).Copy Range(“F1”) '将单元格区域复制到单元格F1开始的区域中 (34)R ange(“A1:D8”).Cut Range(“F1”) '剪切单元格区域A1至D8,复制到单元格F1开 始的区域中 (35)R ange(“A1”).CurrentRegion.Copy Sheets(“Sheet2”).Range(“A1”) '复制包含A1的

Excel宏功能简单应用介绍

Excel宏功能简单应用介绍 所谓宏,就是一组指令集,通过执行类似批处理的一组命令,来完成某种功能。MicrosoftOffice的组件都可以支持宏(Macro)的操作,而Office的宏是指使用VB Script指令集(VB编程语言的子集,可以使用VB的常用语句)编写的针对Office组件的小程序。利用宏,我们可以完成很多程序原本并不支持的特殊应用,比如完成某种特殊的数据计算,或者文档的特殊格式排版等等。下面,就让我们举个简单的例子,看看宏在Excel中如何应用。 有这样一个Excel表格,工作表Sheet1中的第2行的B列开始至D列的连续单元格中是一组共3个数据,第A列的第3行开始至第6行的连续单元格中是一组共4个日期,要编写一段宏来完成这样的工作:将Sheet1第2行的数据由左至右依次纵向复制到Sheet2的B列(从B2开始)中,然后将这组复制完的3个数据所在行的A列都填入Sheet1的A3单元格里面的日期,完成后重复之前的操作,将Sheet1第2行的数据再次复制到Sheet2的B列,这次是从上次复制的B列数据下面的空白单元格,也就是B5开始,然后再在这次复制的3个数据的左侧A列填入Sheet1的A4单元格的日期,这样反复循环,直到She et1的A列的所有日期都出现在了Sheet2的A列里面,也就是Sheet1的第2行数据在 Sheet2的B列里面被复制了4次为止。 编写宏只要有一点点简单的VB编程知识就可以了,并不一定需要很高深的编程技巧,很多时候我们需要的只是一些重复的操作,我们可以通过宏的录制功能来录制一次需要的操作过程,然后再对已经录制的宏进行简单的修改,就能得到所需要的宏了。 对于上面这个事例,实际上只是简单的复制操作,所以甚至连录制的工作都可以省掉了。因为所需要的操作是一个循环的过程,所以我们可以使用一个循环语句来编写程序,这样只要写出一个完成的复制过程,一次循环就可以达到我们的目的了。循环判断的依据就是是否Sheet1的A列所有日期都复制过了,因为数据都是连续排列的,艘以我们可以把Sheet1的A列某个单元格是否有数据作为进入循环的条件,依次复制日期,直到A7这个没有数据的空单元格,循环结束,我们的工作也就完成了。至于循环里面的内容,我们同样再嵌套一个循环,只不过这次是判断第2行的数据是否全都复制完成了,在这个循环里面自然就是单元格数据和日期的复制了。 Sub Macro1() Dim st1y Dim st2y Dim st1x

办公高手EXCEL常用宏命令

办公高手.EXCEL常用宏命令 1 设置打开时弹出对话框的命令举例: Sub AUTO_OPEN() "输入打开工作表时要运行的代码或宏" End Bub 2 设置关闭时弹出对话框的命令举例: Sub AUTO_CLOSE() "输入关闭工作表时要运行的代码或宏" End Bub 3 设置提示框举例: MsgBox prompt:="温馨提示:您要打开的工作表有保护!", Buttons:=vbOKOnly, Title:="谷子提示 " i = MsgBox("系统提供不同服务,是否浏览资费信息?", vbYesNoCancel, "谷子提示:") If i = vbYes Then MsgBox "资费信息:********", , "谷子提示" Else "输入要运行的代码" End If 4、提示框内容过长,换行vbNewLine: MsgBox "您本次访问系统的时间是:" & Date & " " & Time & vbNewLine & "系统离到期日还剩余:" _ & DateDiff("d", Now, "2010-12-31") & " 天!" & vbNewLine & "是否查阅到期日说明?", vbYesNoCancel, "时间和到期日提示:" 5 提示提示系统的日期和时间: MsgBox "系统当前日期和时间:" & Date & " " & Time, , "时间提示" DateDiff("d", Now, "2010-10-31") & " 天!" ‘提示离指定日期的剩余天数 6 系统时间判断命令: Sub 判断时间测试() If Date > "2010-05-20" Then MsgBox "对不起,测试期间已经结束", , "谷子提示" Else Sheets("首页").Select '或其他命令 End If End Sub 7 禁止保存或另存的命令: Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) MsgBox ("禁止保存") Cancel = True '或thisworkbook.saved=true End Sub 8 保护工作表与撤销保护 Sheet2.Protect Password:="123456", DrawingObjects:=True, Contents:=True, Scenarios:=True '保护工作表SHEET2 Sheet2.Unprotect ("123456") '解除保 护 9 保护工作簿与撤销保护 ActiveWorkbook.Protect Structure:=True, Windows:=False, Password:="123" ActiveWorkbook.Unprotect Password:="123"

Excel中最常用的300句VBA编程语句

最近研究了一下vba编程,主要是针对excel的,现在为了学习,特别从网上搜集了300句常用语句,以备不时之需,也留给网友,不方便的时候查询一下。 定制模块行为 (1) Option Explicit ‘强制对模块内所有变量进行声明 Option Private Module ‘标记模块为私有,仅对同一工程中其它模块有用,在宏对话框中不显示 Option Compare Text ‘字符串不区分大小写 Option Base 1 ‘指定数组的第一个下标为1 (2) On Error Resume Next ‘忽略错误继续执行VBA代码,避免出现错误消息 (3) On Error GoTo ErrorHandler ‘当错误发生时跳转到过程中的某个位置 (4) On Error GoTo 0 ‘恢复正常的错误提示 (5) Application.DisplayAlerts=False ‘在程序执行过程中使出现的警告框不显示 (6) Application.ScreenUpdating=False ‘关闭屏幕刷新 Application.ScreenUpdating=True ‘打开屏幕刷新 (7) Appli cation.Enable.CancelKey=xlDisabled ‘禁用Ctrl+Break中止宏运行的功能 工作簿 (8) Workbooks.Add() ‘创建一个新的工作簿 (9) Workbooks(“book1.xls”).Activate ‘激活名为book1的工作簿 (10) ThisWorkbook.Save ‘保存工作簿 (11) ThisWorkbook.close ‘关闭当前工作簿 (12) ActiveWorkbook.Sheets.Count ‘获取活动工作薄中工作表数 (13) https://www.doczj.com/doc/6718161244.html, ‘返回活动工作薄的名称 (14) https://www.doczj.com/doc/6718161244.html, ‘返回当前工作簿名称 ThisWorkbook.FullName ‘返回当前工作簿路径和名称 (15) ActiveWindow.EnableResize=False ‘禁止调整活动工作簿的大小 (16) Application.Window.Arrange xlArrangeStyleTiled ‘将工作簿以平铺方式排列 (17) ActiveWorkbook.WindowState=xlM aximized ‘将当前工作簿最大化 工作表 (18) https://www.doczj.com/doc/6718161244.html,edRange.Rows.Count ‘当前工作表中已使用的行数 (19) Rows.Count ‘获取工作表的行数(注:考虑向前兼容性) (20) Sheets(Sheet1).Name= “Sum” ‘将Sheet1命名为Sum (21) ThisWorkbook.Sheets.Add Before:=Worksheets(1) ‘添加一个新工作表在第一工作表前 (22) ActiveSheet.Move After:=ActiveWorkbook. _ Sheets(ActiveWorkbook.Sheets.Count) ‘将当前工作表移至工作表的最后(23) Worksheets(Array(“sheet1”,”sheet2”)).Select ‘同时选择工作表1和工作表2 (24) Sheets(“sheet1”).Delete或Sheets(1).Delete ‘删除工作表1 (25) ActiveWorkbook.Sheets(i).Name ‘获取工作表i的名称 (26) ActiveWindow.DisplayGridlines=Not ActiveWindow.DisplayGridlines

VBA常用语句

常用选择 选择一个工作表: Sheets("Balance").Activate. 选择单元格: Range("A1").Select 选择连续的单元格: Range("A1:G8").Select 选择不连续的单元格: Range("A1,B6,D9").Select Range("A1,B6:B10,D9").Select 选择当前活动的工作簿: ThisWorkbook.Activate 如果选择其他工作簿,注意该工作簿一定是打开的,并且不要忘记加上后缀“.xls” ,例如:Windows("Totol.xls").Activate 选择一个工作表: Sheets("Balance").Activate. 单元格间移动: 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 内容来自vba技术联盟 选择行或列: 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 选择当前活动单元格向上至第一个非空单元格:

相关主题
相关文档 最新文档