257个常用Excel宏命令

2014-08-27 15:27:00
mlzy
来源:
新浪博客
转贴 12027

工作的时候用到的,感觉很实用,保存下来。随时查询学习。


目   录

1、打开全部隐藏工作表

2、循环宏

3、录制宏时调用“停止录制”工具栏

4、高级筛选5列不重复数据至指定表

5、双击单元执行宏(工作表代码)

6、双击指定区域单元执行宏(工作表代码)

7、进入单元执行宏(工作表代码)

8、进入指定区域单元执行宏(工作表代码)

9、在多个宏中依次循环执行一个(控件按钮代码)

10、在两个宏中依次循环执行一个并相应修改按钮名称(控件按钮代码)

11、在三个宏中依次循环执行一个并相应修改按钮名称(控件按钮代码)

12、根据A1单元文本隐藏/显示按钮(控件按钮代码)

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

14、当前单元内容返回到按钮名称(控件按钮代码)

15、奇偶页分别打印

16、自动打印多工作表第一页

17、查找A列文本循环插入分页符

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

19、返回光标所在行数

20、在A1返回当前选中单元格数量

21、返回当前工作簿中工作表数量

22、返回光标选择区域的行数和列数

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

24、返回A列数据的最大行数

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

26、批量插入地址批注

27、批量插入统一批注

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

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

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

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

32、返回当前单元地址

33、不连续区域录入当前日期

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

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

36、不连续区域录入对勾

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

38、不连续区域添加文本

39、不连续区域插入文本

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

41、按aa工作表A列的内容排列工作表标签顺序

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

43、删除全部未选定工作表

44、工作表标签排序


45、定义指定工作表标签颜色

46、在目录表建立本工作簿中各表链接目录

47、建立工作表文本目录

48、查另一文件的全部表名

49、当前单元录入计算机名

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

51、解除全部工作表保护

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

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

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

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

56、拷贝A1公式和格式到A2

57、复制单元数值

58、插入数值条件格式

59、插入透明批注

60、添加文本

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

62、定位选定单元格式相同的全部单元格

63、按当前单元文本定位

64、按固定文本定位

65、删除包含固定文本单元的行或列

66、定位数据及区域以上的空值

67、右侧单元自动加5(工作表代码)

68、当前单元加2

69、A列等于A列减B列

70、用于光标选定多区域跳转指定单元(工作表代码)

71、将A1单元录入的数据累加到B1单元(工作表代码)

72、在指定颜色区域选择单元时添加/取消"√"(工作表代码)

73、在指定区域选择单元时添加/取消"√"(工作表代码)

74、双击指定单元,循环录入文本(工作表代码)

75、双击指定单元,循环录入文本(工作表代码)

76、单元区域引用(工作表代码)

77、在指定区域选择单元时数值加1(工作表代码)



78、混合文本的编号

79、指定区域单元双击数据累加(工作表代码)

80、选择单元区域触发事件(工作表代码)

81、当修改指定单元内容时自动执行宏(工作表代码)

82、被指定单元内容限制执行宏

83、双击单元隐藏该行(工作表代码)

84、高亮显示行(工作表代码)

85、高亮显示行和列(工作表代码)

86、为指定工作表设置滚动范围(工作簿代码)

87、在指定单元记录打印和预览次数(工作簿代码)

88、自动数字金额转大写(工作表代码)

89、将全部工作表的A1单元作为单击按钮(工作簿代码)

90、闹钟——到指定时间执行宏(工作簿代码)

91、改变Excel界面标题的宏(工作簿代码)

92、在指定工作表的指定单元返回光标当前多选区地址(工作簿代码)

93、B列录入数据时在A列返回记录时间(工作表代码)

94、当指定区域修改时在其右侧的2个单元返回当前日期和时间(工作表代码)

95、指定单元显示光标位置内容(工作表代码)

96、每编辑一个单元保存文件

97、指定允许编辑区域

98、解除允许编辑区域限制

99、删除指定行

100、删除A列为指定内容的行

101、删除A列非数字单元行

102、有条件删除当前行

103、选择下一行

104、选择第5行开始所有数据行

105、选择光标或选区所在行

106、选择光标或选区所在列

107、光标定位到名称指定位置

108、选择名称定义的数据区

109、选择到指定列的最后行

110、将Sheet1的A列的非空值写到Sheet2的A列

111、将名称1的数据写到名称2

112、单元反选

113、调整选中对象中的文字

114、去除指定范围内的对象

115、更新透视表数据项

116、将全部工作表名称写到A列

117、为当前选定的多单元插入指定名称

118、删除全部名称

119、以指定区域为表目录补充新表

120、按A列数据批量修改表名称

121、按A列数据批量创建新表(控件按钮代码)

122、清除剪贴板

123、批量清除软回车

124、判断指定文件是否已经打开

125、当前文件另存到指定目录

126、另存指定文件名

127、以本工作表名称另存文件到当前目录

128、将本工作表单独另存文件到Excel当前默认目录

129、以活动工作表名称另存文件到Excel当前默认目录

130、另存所有工作表为工作簿

131、以指定单元内容为新文件名另存文件

133、以当前日期和时间为新文件名另存文件

134、另存本表为TXT文件

135、引用指定位置单元内容为部分文件名另存文件

136、将A列数据排序到D列

137、将指定范围的数据排列到D列

138、光标所在行上移一行

139、加数据有效限制

140、取消数据有效限制

141、重排窗口

143、回车光标向右

144、回车光标向下

146、保存并退出Excel

147、隐藏/显示指定列空值行

148、深度隐藏指定工作表

149、隐藏指定工作表

150、隐藏当前工作表

151、返回当前工作表名称

152、获取上一次所进入工作簿的工作表名称

153、按光标选定颜色隐藏本列其他颜色行

154、打开工作簿自动隐藏录入表以外的其他表

155、除最左边工作表外深度隐藏所有表

156、关闭文件时自动隐藏指定工作表(ThisWorkbook)

157、打开文件时提示指定工作表是保护状态(ThisWorkbook)

158、插入10行

159、全选固定范围内小于0的单元

160、全选选定范围内小于0的单元

161、固定区域单元分类变色

162、A列半角内容变红

163、单元格录入数据时运行宏的代码

164、根据B列最后数据快速合并A列单元格的控件代码

165、在F1单元显示光标位置批注内容的代码

166、显示光标所在单元的批注的代码

167、使单元内容保持不变的工作表代码

168、有条件执行宏

169、有条件执行不同的宏



170、提示确定或取消执行宏

171、提示开始和结束

172、拷贝指定表不相邻多列数据到新位置

173、选择2至4行

174、在当前选区有条件替换数值为文本

175、自动筛选全部显示指定列

176、自动筛选第2列值为A的行

177、取消自动筛选()

178、全部显示指定表的自动筛选

179、强行合并单元

180、设置单元区域格式

181、在所有工作表的A1单元返回顺序号

182、根据A1单元内容返回C1数值

183、根据A1内容选择执行宏

184、删除A列空行

185、在A列产生不重复随机数

186、将A列数据随机排列到F列

187、取消选定区域的公式只保留值(假空转真空)

188、处理导入的显示为科学计数法样式的身份证号

189、返回指定单元的行高和列宽

190、指定行高和列宽

191、指定单元的行高和列宽与A1单元相同

191、填公式

192、建立当前工作表的副本为001表

193、在第一个表前插入多工作表

194、清除A列再插入序号

195、反方向文本(自定义函数)

196、指定选择单元区域弹出消息

197、将B列数据添加超链接到K列

198、删除B列数据的超链接

199、分离临时表A列数据的文本和超链接并整理到数据库表

200、分离临时表A列数据的文本和超链接并会同其他数据整理到数据库表

201、返回A列最后一个非空单元行号

202、返回表中第一个非空单元地址(行搜索)

203、返回表中各非空单元区域地址(行搜索)

204、返回第一个数值行号

205、返回第1行最右边非空单元的列号

206、返回连续数值单元的数量

207、统计指定范围和内容的单元数量

208、统计不同颜色的数字的和(自定义函数)

209、返回非空单元数量

210、返回A列非空单元数量

211、返回圆周率π

212、定义指定单元内容为页眉/页脚

213、提示并全部清除当前选择区域

214、全部清除当前选择区域

215、清除指定区域数值

216、对指定工作表执行取消隐藏》打印》隐藏工作表

217、打开文件时执行指定宏(工作簿代码)

218、关闭文件时执行指定宏(工作簿代码)

219、弹出提示A1单元内容

220、延时15秒执行重排窗口宏

221、撤消工作表保护并取消密码

222、重算指定表

223、将第5行移到窗口的最上面

224、对第一张工作表的指定区域进行排序

225、显示指定工作表的打印预览

226、用单元格A1的内容作为文件名另存当前工作簿

227、[禁用/启用]保存和另存的代码

228、在A和B列返回当前选区的名称和公式

229、朗读朗读A列,按ESC键中止

230、朗读固定语句,请按ESC键终止

231、在M和N列的14行以下选择单元时显示调用日历控件(工作表代码)

232、添加自定义序列

233、弹出打印对话框

234、返回总页码

235、合并各工作表内容

236、合并指定目录中所有文件中相同格式工作表的数据

237、隐藏指定工作表的指定列

238、把a列不重复值取到e列

239、当前选区的行列数

240、单元格录入1位字符就跳转(工作表代码)

241、当指定日期(每月10日)打开文件执行宏

242、提示并清空单元区域

243、返回光标所在行号

244、按照当前行A列的图片名称插入图片到H列

245、当前行下插入1行

246、取消指定行或列的隐藏

247、复制单元格所在行

248、复制单元格所在列

249、新建一个工作表

250、新建一个工作簿

251、选择多表为工作组

252、在当前工作组各表中分别执行指定宏

253、复制当前工作簿的报表到临时工作簿

254、删除指定文件

255、合并A1至C1的内容写到D15单元的批注中

256、自动重算

257、手动重算


命令:


1、打开全部隐藏工作表


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

Dim i AsInteger

For i = 1To Sheets.Count

Sheets(i).Visible = True

Nexti

End Sub



2、循环宏


Sub 循环()

AAA =Range("C2")


Dim i AsLong

Dim timesAs Long

times =AAA

'times代表循环次数,执行前把times赋值即可(不可小于1,不可大于2147483647)

For i = 1To times

Call 过滤一行

If Range("完成标志") = "完成" Then

Exit For

'如果名为'完成标志'的命名单元的值等于'完成',则退出循环,如果一开始就等于'完成',则只执行一次循环就退出

'If Sheets("传送参数").Range("A" & i).Text = "完成"Then ExitFor

'如果某列出现"完成"内容则退出循环

Nexti

End Sub



3、录制宏时调用“停止录制”工具栏


Sub 录制宏时调用停止录制工具栏()

Application.CommandBars("Stop Recording").Visible = True

End Sub



4、高级筛选5列不重复数据至指定表


Sub 高级筛选5列不重复数据至Sheet2()

Sheets("Sheet2").Range("A1:E65536") = "" '清除Sheet2的A:D列

Range("A1:E65536").AdvancedFilter Action:=xlFilterCopy,CopyToRange:=Sheet2.Range( _

"A1"), Unique:=True

Sheet2.Columns("A:E").Sort Key1:=Sheet2.Range("A2"),Order1:=xlAscending,

Header:=xlGuess, _

OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom,SortMethod _

:=xlPinYin

End Sub



5、双击单元执行宏(工作表代码)


Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range,Cancel As Boolean)

IfRange("$A$1") = "关闭" Then

Exit Sub

SelectCase Target.Address

Case "$A$4"

Call 宏1

Cancel = True

Case "$B$4"

Call 宏2

Cancel = True

Case "$C$4"

Call 宏3

Cancel = True

Case "$E$4"

Call 宏4

Cancel = True

EndSelect

End Sub



6、双击指定区域单元执行宏(工作表代码)


Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range,Cancel As Boolean)

IfRange("$A$1") = "关闭" Then Exit Sub

If NotApplication.Intersect(Target, Range("A4:A9", "C4:C9")) Is NothingThen Call 打开隐藏表

End Sub



7、进入单元执行宏(工作表代码)


Private Sub Worksheet_SelectionChange(ByVal Target As Range)

'以单元格进入代替按钮对象调用宏

IfRange("$A$1") = "关闭" Then Exit Sub

SelectCase Target.Address

Case "$A$5" '单元地址(Target.Address),或命名单元名字(Target.Name)

Call 宏1

Case "$B$5"

Call 宏2

Case "$C$5"

Call 宏3

EndSelect

End Sub



8、进入指定区域单元执行宏(工作表代码)


Private Sub Worksheet_SelectionChange(ByVal Target As Range)

IfRange("$A$1") = "关闭" Then Exit Sub

If NotApplication.Intersect(Target, Range("A4:A9","C4:C9")) Is NothingThen Call 打开隐藏表

End Sub



9、在多个宏中依次循环执行一个(控件按钮代码)


Private Sub CommandButton1_Click()

StaticRunMacro As Integer

SelectCase RunMacro

Case 0

宏1

RunMacro = 1

Case 1

宏2

RunMacro = 2

Case 2

宏3

RunMacro = 0

EndSelect

End Sub



10、在两个宏中依次循环执行一个并相应修改按钮名称(控件按钮代码)


Private Sub CommandButton1_Click()

WithCommandButton1

If .Caption = "保护工作表" Then

Call 保护工作表

.Caption = "取消工作表保护"

Exit Sub

End If

If .Caption = "取消工作表保护" Then

Call 取消工作表保护

.Caption = "保护工作表"

Exit Sub

End If

EndWith

End Sub



11、在三个宏中依次循环执行一个并相应修改按钮名称(控件按钮代码)


Option Explicit

Private Sub CommandButton1_Click()

WithCommandButton1

If .Caption = "宏1" Then

Call 宏1

.Caption = "宏2"

Exit Sub

End If

If .Caption = "宏2" Then

Call 宏2

.Caption = "宏3"

Exit Sub

End If

If .Caption = "宏3" Then

Call 宏3

.Caption = "宏1"

Exit Sub

End If

EndWith

End Sub



12、根据A1单元文本隐藏/显示按钮(控件按钮代码)


Private Sub Worksheet_SelectionChange(ByVal Target As Range)

If Range("A1") > 2 Then

CommandButton1.Visible = 1

Else

CommandButton1.Visible = 0

End If

End Sub

Private Sub CommandButton1_Click()

重排窗口

End Sub



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


Private Sub CommandButton1_Click()

ActiveCell = CommandButton1.Caption

End Sub



14、当前单元内容返回到按钮名称(控件按钮代码)


Private Sub CommandButton1_Click()

CommandButton1.Caption = ActiveCell

End Sub



15、奇偶页分别打印


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



16、自动打印多工作表第一页


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



17、查找A列文本循环插入分页符


Sub 循环插入分页符()

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


Dim i As Long

Dim times As Long

times =Application.WorksheetFunction.CountIf(Sheet1.Range("a:a"),"分页")

'times代表循环次数,执行前把times赋值即可(不可小于1,不可大于2147483647)

For i = 1 To times

Call 插入分页符

Next i

End Sub


Sub 插入分页符()

Cells.Find(What:="分页",After:=ActiveCell, LookIn:=xlValues, LookAt:= _

xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext,MatchCase:=False) _

.Activate

ActiveWindow.SelectedSheets.HPageBreaks.Add Before:=ActiveCell

End Sub


Sub 取消原分页()

Cells.Select

ActiveSheet.ResetAllPageBreaks

End Sub



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


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

Dim PicAs Picture, i&

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

For EachPic 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



19、返回光标所在行数


Sub 返回光标所在行数()

x =ActiveCell.Row

Range("A1") = x

End Sub



20、在A1返回当前选中单元格数量


Sub 在A1返回当前选中单元格数量()

[A1] =Selection.Count

End Sub



21、返回当前工作簿中工作表数量


Sub 返回当前工作簿中工作表数量()

t =Application.Sheets.Count

MsgBoxt

End Sub



22、返回光标选择区域的行数和列数


Sub 返回光标选择区域的行数和列数()

x =Selection.Rows.Count

y =Selection.Columns.Count

Range("A1") = x

Range("A2") = y

End Sub



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


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

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

MsgBoxn

End Sub



24、返回A列数据的最大行数


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

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

Range("B1") = n

End Sub



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


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

For Eachrag In Selection

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

Next

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

Selection.Characters.Text = "问题:" & n

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

.Name = "黑体"

.FontStyle = "常规"

.Size = 12

EndWith

End Sub



26、批量插入地址批注


Sub 批量插入地址批注()

On ErrorResume Next

Dim r AsRange

IfSelection.Cells.Count > 0 Then

For Each r In Selection

r.Comment.Delete

r.AddComment

r.Comment.Visible = False

r.Comment.Text Text:="本单元格:" & r.Address& " of " & Selection.Address

Next

EndIf

End Sub



27、批量插入统一批注


Sub 批量插入统一批注()

Dim r AsRange, msg As String

msg =InputBox("请输入欲批量插入的批注", "提示", "随便输点什么吧")

IfSelection.Cells.Count > 0 Then

For Each r In Selection

r.AddComment

r.Comment.Visible = False

r.Comment.Text Text:=msg

Next

EndIf

End Sub



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


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

Dim r AsRange

IfSelection.Cells.Count > 0 Then

For Each r In Selection

r.AddComment

r.Comment.Visible = False

r.Comment.Text Text:=[a1].Text

Next

EndIf

End Sub



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


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

For Eachmycell In Selection

mycell.FormulaR1C1 = "[" + ActiveWorkbook.Name + "]" +ActiveSheet.Name + "!" + mycell.Address

Next

End Sub



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


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

For Eachmycell In Selection

mycell.FormulaR1C1 = mycell.Address

Next

End Sub



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


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

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

Selection.Copy

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

:=False, Transpose:=False

End Sub



32、返回当前单元地址


Sub 返回当前单元地址()

d =ActiveCell.Address

[A1] =d

End Sub



33、不连续区域录入当前日期


Sub 区域录入当前日期()

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

End Sub



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


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

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

End Sub



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


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

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

End Sub



36、不连续区域录入对勾


Sub 批量录入对勾()

Selection.FormulaR1C1 = "√"

End Sub



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


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

Selection.FormulaR1C1 = ThisWorkbook.Name

End Sub



38、不连续区域添加文本


Sub 批量添加文本()

Dim s AsRange

For Eachs In Selection

s = s & "文本内容"

Next

End Sub



39、不连续区域插入文本


Sub 批量插入文本()

Dim s AsRange

For Eachs In Selection

s = "文本内容" & s

Next

End Sub



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


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

Dimarr

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

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

End Sub



41、按aa工作表A列的内容排列工作表标签顺序


Sub 按aa工作表A列的内容排列工作表标签顺序()

Dim I%,str1$

I = 1

Sheets("aa").Select

Do WhileCells(I, 1).Value <> ""

str1 = Trim(Cells(I, 1).Value)

Sheets(str1).Select

Sheets(str1).Move after:=Sheets(I)

I = I + 1

Sheets("aa").Select

Loop

End Sub



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


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

Dim nm AsString

nm =[a1]

Sheets.Add

ActiveSheet.Name = nm

End Sub



43、删除全部未选定工作表


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

Dim shtAs Worksheet, n As Integer, iFlag As Boolean

DimShtName() As String

n =ActiveWindow.SelectedSheets.Count

ReDimShtName(1 To n)

n = 1

For Eachsht In ActiveWindow.SelectedSheets

ShtName(n) = sht.Name

n = n + 1

Next

Application.DisplayAlerts = False

For Eachsht In Sheets

iFlag = False

For i = 1 To n - 1

If ShtName(i) = sht.Name Then

iFlag = True

Exit For

End If

Next

If Not iFlag Then sht.Delete

Next

Application.DisplayAlerts = True

End Sub



44、工作表标签排序


Sub 工作表标签排序()

Dim i AsLong, 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

Nexti

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

EndIf

End Sub








259个常用宏-excelhome(2)

2009-08-15 14:11:45


45、定义指定工作表标签颜色


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

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

End Sub



46、在目录表建立本工作簿中各表链接目录


Sub 在目录表建立本工作簿中各表链接目录()

Dim s%,Rng As Range

On ErrorResume Next

Sheets("目录").Activate

If Err =0 Then

Sheets("目录").UsedRange.Delete

Else

Sheets.Add

ActiveSheet.Name = "目录"

EndIf


For i = 1To Sheets.Count

If Sheets(i).Name <> "目录" Then

s = s + 1

Set Rng = Sheets("目录").Cells(((s - 1) Mod 20) + 1, (s - 1) \ 20 + 1+ 1)

Rng = Format(s, " 0") & ". " &Sheets(i).Name

ActiveSheet.Hyperlinks.Add Rng, "#" &Sheets(i).Name & "!A1",ScreenTip:=Sheets(i).Name

End If

Next


Sheets("目录").Range("b:iv").EntireColumn.ColumnWidth = 20

End Sub



47、建立工作表文本目录


Sub 建立工作表文本目录()

Sheets.Add before:=Sheets(1)

Sheets(1).Name = "目录"

For i = 2To Sheets.Count

Cells(i - 1, 1) = Sheets(i).Name

'Sheets(1).Hyperlinks.Add Cells(i - 1, 1), "#" &Sheets(i).Name &"!A1"  '添加超链接

Next

End Sub



48、查另一文件的全部表名


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

On ErrorResume Next

Dimi%

Dim sh AsWorksheet

Application.ScreenUpdating = False

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

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

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

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

For Eachsh In Workbooks("2.xls").Worksheets

Cells(i, 1) =sh.Name    '将表名称返回到第1列

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

Nextsh

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

Application.ScreenUpdating = True

End Sub



49、当前单元录入计算机名


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

Selection =Environ("COMPUTERNAME")

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

EndSub


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


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

Selection =Environ("Username")

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

End Sub



51、解除全部工作表保护


Sub 解除全部工作表保护()

Dim n AsInteger

For n = 1To Sheets.Count

Sheets(n).Unprotect

Nextn

End Sub



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


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

Sheet10.Protect Password:="123"

End Sub



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


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

Sheets("1").Unprotect Password:=123 '假定表名为“1”,密码为“123” 打开工作表

Range("C:C").SpecialCells(xlCellTypeBlanks).EntireRow.Hidden =True  '隐藏C列空值行

Sheets("1").ProtectPassword:=123   '重新用密码保护工作表

End Sub



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


Private Sub CommandButton1_Click()

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

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

Exit Sub

EndIf

Cells(1,1) = 10

End Sub



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


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

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

重排窗口  '要执行的宏代码或宏名称

Else

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

EndIf

End Sub



56、拷贝A1公式和格式到A2


Sub 拷贝A1公式到A2()

Workbooks("临时表").Sheets("表1").Range("A1").Copy

Workbooks("临时表").Sheets("表2").Range("A2").PasteSpecial

End Sub



57、复制单元数值


Sub 复制数值()

s =Workbooks("book1").Sheets("Sheet1").Range("A1:A2")

Workbooks("book2").Sheets("Sheet1").Range("A1:A2") = s

End Sub



58、插入数值条件格式


Sub 插入数值条件格式()

Selection.FormatConditions.Delete

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

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

Formula1:="60"

Selection.FormatConditions(3).Interior.ColorIndex = 34

End Sub



59、插入透明批注


Sub 插入透明批注()

Selection.AddComment

Selection.Comment.Visible = False

Dim XS AsWorksheet

For i = 1To ActiveSheet.Comments.Count

ActiveSheet.Comments(i).Text "透明批注"

ActiveSheet.Comments(i).Shape.Fill.Visible = msoFalse

Next

End Sub



60、添加文本


Sub 添加文本()

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

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

EndSub



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


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

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

Sheets("数据库").Select

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

End Sub



62、定位选定单元格式相同的全部单元格


Sub 定位选定单元格式相同的全部单元格()

DimFirstCell As Range, FoundCell As Range

DimAllCells As Range

With Application.FindFormat

.Clear

.NumberFormatLocal = Selection.NumberFormatLocal

.HorizontalAlignment = Selection.HorizontalAlignment

.VerticalAlignment = Selection.VerticalAlignment

.WrapText = Selection.WrapText

.Orientation = Selection.Orientation

.AddIndent = Selection.AddIndent

.IndentLevel = Selection.IndentLevel

.ShrinkToFit = Selection.ShrinkToFit

.MergeCells = Selection.MergeCells

.Font.Name = Selection.Font.Name

.Font.FontStyle = Selection.Font.FontStyle

.Font.Size = Selection.Font.Size

.Font.Strikethrough = Selection.Font.Strikethrough

.Font.Subscript = Selection.Font.Subscript

.Font.Underline = Selection.Font.Underline

.Font.ColorIndex = Selection.Font.ColorIndex

.Interior.ColorIndex = Selection.Interior.ColorIndex

.Interior.Pattern = Selection.Interior.Pattern

.Locked = Selection.Locked

.FormulaHidden = Selection.FormulaHidden

End With

SetFirstCell = ActiveSheet.UsedRange.Find(what:="",searchformat:=True)

If FirstCell Is Nothing Then

Exit Sub

End If

SetAllCells = FirstCell

SetFoundCell =FirstCell

Do

Set FoundCell = ActiveSheet.UsedRange.Find(After:=FoundCell,what:="", searchformat:=True)

If FoundCell Is Nothing Then Exit Do

Set AllCells = Union(FoundCell, AllCells)

If FoundCell.Address = FirstCell.Address Then Exit Do

Loop

AllCells.Select

End Sub



63、按当前单元文本定位


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

ABC =Selection

Dim aa AsRange

For Eacha In ActiveSheet.UsedRange

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



64、按固定文本定位


Sub 文本定位()

Dim aa AsRange

For Eacha In ActiveSheet.UsedRange

If a Like "*合计*" 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



65、删除包含固定文本单元的行或列


Sub 删除包含固定文本单元的行或列()

Do

Cells.Find(what:="哈哈").Activate

Selection.EntireRow.Delete     '删除行

' Selection.EntireColumn.Delete '删除列

LoopUntil Cells.Find(what:="哈哈") Is Nothing

End Sub



66、定位数据及区域以上的空值


Sub 定位数据及区域以上的空值()

Dim aa As Range

For Each a In ActiveSheet.UsedRange

If a Like 〈0 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



67、右侧单元自动加5(工作表代码)


Private Sub Worksheet_Change(ByVal Target As Range)

Application.EnableEvents = False

Target.Offset(0, 1) = Target + 5

Application.EnableEvents = True

End Sub



68、当前单元加2


Sub 当前单元加2()

Selection = Selection +2

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

EndSub



69、A列等于A列减B列


Sub A列等于A列减B列()

For i = 1 To 23

Cells(i, 1) = Cells(i, 1) - Cells(i, 2)

Next

End Sub



70、用于光标选定多区域跳转指定单元(工作表代码)


Private Sub Worksheet_SelectionChange(ByVal T As Range)

a = Array([b6:b7], [e6], [h6])

For i = 0 To 2

If Not Application.Intersect(T, a(i)) Is Nothing Then

[a1].Select: Exit For

End If

Next

End Sub



71、将A1单元录入的数据累加到B1单元(工作表代码)


Private Sub Worksheet_Change(ByVal Target As Range)

Dim t As Long

If Target.Address = "$A$1" Then

t = Sheet1.Range("$B$1").Value

Sheet1.Range("$B$1").Value = t + Target.Value

End If

End Sub



72、在指定颜色区域选择单元时添加/取消"√"(工作表代码)


Private Sub Worksheet_SelectionChange(ByVal Target As Range)

Dim myrgAs Range

For Eachmyrg In Target

If myrg.Interior.ColorIndex = 37 Then myrg = IIf(myrg<> "√", "√", "")

Next

End Sub



73、在指定区域选择单元时添加/取消"√"(工作表代码)


Private Sub Worksheet_SelectionChange(ByVal Target As Range)

Dim RngAs Range

IfTarget.Count <= 15 Then

If Not Application.Intersect(Target, Range("D6:D20")) Is NothingThen

For Each Rng In Selection

With Rng

If .Value = "" Then

.Value = "√"

Else

.Value = ""

End If

End With

Next

EndIf

EndIf

End Sub



74、双击指定单元,循环录入文本(工作表代码)


Private Sub Worksheet_BeforeDoubleClick(ByVal T As Range, CancelAs Boolean)

If T.Address <> "$A$1" Then ExitSub

Cancel = True

T = IIf(T = "好", "中", IIf(T = "中", "差", "好"))

End Sub



75、双击指定单元,循环录入文本(工作表代码)


Dim nums As Byte

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range,Cancel As Boolean)

If Target.Address = "$A$1" Then

nums = nums Mod 3 + 1

Target = Mid("上中下", nums, 1)

Target.Offset(1, 0).Select

End If

End Sub



76、单元区域引用(工作表代码)


Private Sub Worksheet_Activate()

Sheet1.Range("A1:B3").Value = Sheet2.Range("A1:B3").Value

End Sub



77、在指定区域选择单元时数值加1(工作表代码)


Private Sub Worksheet_SelectionChange(ByVal Target As Range)

If NotApplication.Intersect([a1:e10], Target) Is Nothing Then

Target = Val(Target) + 1

EndIf

End Sub





259个常用宏-excelhome(3)

2009-08-15 14:12:58


78、混合文本的编号


Sub 混合文本的编号()

Worksheets(1).Range("B2").Value = "北京" &(--(Mid(Worksheets(1).Range("B2"), 3, 100)) + 1)

End Sub



79、指定区域单元双击数据累加(工作表代码)


Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range,Cancel As Boolean)

If Not Application.Intersect([A1:Y100], Target) Is NothingThen

oldvalue = Val(Target.Value)

inputvalue = InputBox("请输入数量,按ENTER键确认!", "数值累加器")

Target.Value = oldvalue + inputvalue

End If

End Sub



80、选择单元区域触发事件(工作表代码)


Private Sub Worksheet_SelectionChange(ByVal Target As Range)

If Target.Address = "$A$1:$B$2" Then

MsgBox"你选择了$A$1:$B$2单元"

End If

End Sub



81、当修改指定单元内容时自动执行宏(工作表代码)


Private Sub Worksheet_Change(ByVal Target As Range)

If Not Application.Intersect(Target, [B3:B4]) Is NothingThen

重排窗口

End If

End Sub



82、被指定单元内容限制执行宏


Sub 被指定单元限制执行宏()

If Range("$A$1") = "关闭" Then Exit Sub

窗口

End Sub



83、双击单元隐藏该行(工作表代码)


Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range,Cancel As Boolean)

Rows(Target.Row).Hidden = True

End Sub



84、高亮显示行(工作表代码)


Private Sub Worksheet_SelectionChange(ByVal Target As Range)

Cells.Interior.ColorIndex = 2

Rows("1:2").Interior.ColorIndex =40    '保持1至2行的颜色推荐39,22,40,

Rows(Target.Row).Interior.ColorIndex =35     '高亮推荐颜色35,20,24,34,37,40,15

End Sub



85、高亮显示行和列(工作表代码)


Private Sub Worksheet_SelectionChange(ByVal Target As Range)

Cells.Interior.ColorIndex = xlNone

Rows(Target.Row).Interior.ColorIndex = 34

Columns(Target.Column).Interior.ColorIndex = 34

End Sub



86、为指定工作表设置滚动范围(工作簿代码)


Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object,ByVal Target As Range)

Sheet1.ScrollArea = "A1:M30"

End Sub



87、在指定单元记录打印和预览次数(工作簿代码)


Private Sub Workbook_BeforePrint(Cancel As Boolean)

Range("A1") = 1 + Range("A1")

End Sub



88、自动数字金额转大写(工作表代码)


Private Sub Worksheet_Change(ByVal M As Range)

On Error Resume Next

y = Int(Round(100 * Abs(M)) / 100)

j =Round(100 * Abs(M) + 0.00001) - y * 100

f = (j /10 - Int(j / 10)) * 10

A = IIf(y< 1, "", Application.Text(y, "[DBNum2]")& "元")

b = IIf(j> 9.5, Application.Text(Int(j / 10), "[DBNum2]")& "角", IIf(y < 1, "", IIf(f> 1, "零", "")))

c = IIf(f< 1, "整", Application.Text(Round(f, 0), "[DBNum2]")& "分")

M =IIf(Abs(M) < 0.005, "", IIf(M < 0,"负" & A & b & c, A& b & c))

End Sub



89、将全部工作表的A1单元作为单击按钮(工作簿代码)


Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object,ByVal Target As Range)

If Target.Address = "$A$1" Then

Call宏名

End If

End Sub



90、闹钟——到指定时间执行宏(工作簿代码)


Private Sub Workbook_Open()

Application.OnTime ("11:45:00"),"提示1"   '宏名字

Application.OnTime ("12:00:00"),"提示2"   '宏名字

End Sub



91、改变Excel界面标题的宏(工作簿代码)


Private Sub Workbook_Open()

Application.Caption = "春节快乐"

End Sub



92、在指定工作表的指定单元返回光标当前多选区地址(工作簿代码)


Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object,ByVal Target As Range)

Worksheets("表2").Range("A1") = Target.Address(0, 0)

End Sub



93、B列录入数据时在A列返回记录时间(工作表代码)


Public Sub Worksheet_Change(ByVal Target As Range)

If Target.Column = 2 Then

Target.Offset(, -1) = Now

End If

End Sub



94、当指定区域修改时在其右侧的2个单元返回当前日期和时间(工作表代码)


Public Sub Worksheet_Change(ByVal Target As Range)

If Not Application.Intersect(Target, [A1:A1000]) Is NothingThen

If Target.Column = 1 Then

Target.Offset(, 1) = Date

Target.Offset(, 2) = Time

End If

End If

End Sub


Public Sub Worksheet_Change(ByVal Target As Range)

If Not Application.Intersect(Target, [A1:A1000]) Is NothingThen

If Target.Column = 1 Then

Target.Offset(, 1) = Format(Now(), "yyyy-mm-dd")

Target.Offset(, 2) = Format(Now(), "h:mm:ss")

End If

End If

End Sub



95、指定单元显示光标位置内容(工作表代码)


Private Sub Worksheet_SelectionChange(ByVal T As Range)

Sheets(1).Range("A1") = Selection

End Sub



96、每编辑一个单元保存文件


Private Sub Worksheet_Change(ByVal Target As Range)

ThisWorkbook.Save

End Sub



97、指定允许编辑区域


Sub 指定允许编辑区域()

ActiveSheet.ScrollArea = "B8:G15"

End Sub



98、解除允许编辑区域限制


Sub 解除允许编辑区域限制()

ActiveSheet.ScrollArea = ""

End Sub



99、删除指定行


Sub 删除指定行()

Workbooks("临时表").Sheets("表2").Range("5:5").Delete

End Sub



100、删除A列为指定内容的行


Sub 删除A列为指定内容的行()

Dim a, b As Integer

a = Sheet1.[a65536].End(xlUp).Row

For b = a To 2 Step -1

If Cells(b, 1).Value = "删除" Then

Rows(b).Delete

End If

Next

End Sub



101、删除A列非数字单元行


Sub 删除A列非数字单元行()

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

Range("A1:A" &i).SpecialCells(xlCellTypeConstants, 2).EntireRow.Delete

End Sub



102、有条件删除当前行


Sub 有条件删除当前行()

If [A1] = 2 Or [B1] = "删除" Then

Selection.Delete Shift:=xlUp

End If

End Sub



103、选择下一行


Sub 选择下一行()

ActiveCell.Offset(1, 0).Rows("1:1").EntireRow.Select

End Sub



104、选择第5行开始所有数据行


Sub 选择第5行开始所有数据行A()

Dimi%

i =Cells.Find("*", SearchOrder:=xlByRows, LookIn:=xlValues,SearchDirection:=xlPrevious).EntireRow.Row

Rows("5:"& i).Select

End Sub


Sub 选择第5行开始所有数据行B()

Rows("5:" & Cells.Find("*", , , , 1,2).Row).Select

End Sub



105、选择光标或选区所在行


Sub 选择光标或选区所在行()

Selection.EntireRow.Select

End Sub



106、选择光标或选区所在列


Sub 选择光标或选区所在列()

Selection.EntireColumn.Select

End Sub



107、光标定位到名称指定位置


Sub 定位()

Application.Goto Range(Evaluate("名称"))

End Sub



108、选择名称定义的数据区


Sub 选择名称定义的数据区()

[数据区].Select '插入名称要使用INDIRECT函数

'Range("数据区").Select        或者

'Sheet1.Range("数据区").Select 或者

End Sub



109、选择到指定列的最后行


Sub 选择到指定列的最后行()

Range("C4:G" &[G65536].End(xlUp).Row).Select

End Sub



110、将Sheet1的A列的非空值写到Sheet2的A列


Sub 将Sheet1的A列的非空值写到Sheet2的A列()

Sheet1.Columns("A:A").SpecialCells(2, 23).SpecialCells(12).CopySheet2.[A1]

End Sub



111、将名称1的数据写到名称2


Sub Macro2()

Range("位置2") = Range("位置1").Value

End Sub



112、单元反选


Sub 单元反选()

Application.DisplayAlerts = False

Application.ScreenUpdating = False

Dim raddress As String, taddress As String

raddress = Selection.Address

taddress = ActiveSheet.UsedRange.Address

With Sheets.Add

.Range(taddress) = 0

.Range(raddress) = "=0"

raddress = .Range(taddress).SpecialCells(xlCellTypeConstants,1).Address

.Delete

End With

ActiveSheet.Range(raddress).Select

Application.ScreenUpdating = True

End Sub



113、调整选中对象中的文字


Sub 调整选中对象中的文字()

'文字居中、自动调整大小

WithSelection

.HorizontalAlignment = xlCenter

.VerticalAlignment = xlCenter

.ReadingOrder = xlContext

.Orientation = xlHorizontal

.AutoSize = True

.AddIndent = False

EndWith

End Sub



114、去除指定范围内的对象


Sub 去除指定范围内的对象()

Dim p As Shape

Set My =Worksheets("工作表名")

For Eachp In My.Shapes

If Not Application.Intersect(p.TopLeftCell, Range("范围")) Is NothingThen p.Delete

Next

End Sub



115、更新透视表数据项


Sub DeleteMissingItems2002All()

'防止数据透视表中显示无用的数据项

'在 Excel 2002 或更高版本中

'如果无用的数据项已经存在,

'运行这个宏可以更新

Dim pt As PivotTable

Dim ws As Worksheet

For Each ws In ActiveWorkbook.Worksheets

For Each pt In ws.PivotTables

pt.PivotCache.MissingItemsLimit = xlMissingItemsNone

Next pt

Next ws

End Sub



116、将全部工作表名称写到A列


Sub 将全部表名称写到A列()

k = 1

For Each Sht In Sheets

Cells(k + 1, 1) =Sht.Name      '指定写入的行和列

k = k + 1

Next

End Sub



117、为当前选定的多单元插入指定名称


Sub 为当前选定的多单元插入指定名称()

Selection.Name = "临时"

ActiveWorkbook.Names.Add Name:="临时",RefersTo:=Selection  '或者换用这行代码也可以

End Sub



118、删除全部名称


Sub 删除全部名称()

On Error Resume Next

Dim l As Integer

l = ActiveWorkbook.Names.Count

For i = l To 1 Step -1

ActiveWorkbook.Names(i).Delete

Next

End Sub



119、以指定区域为表目录补充新表


Sub 以指定区域为表目录补充新表()

Dim dic As Object, sh As Worksheet

Dim arr, item

arr =Range("B1:BB1")

Set dic =CreateObject("scripting.dictionary")

For Eachsh In ThisWorkbook.Worksheets

dic.Add sh.Name, ""

Next

For Eachitem In arr

If item <> "" And Notdic.exists(Trim(item)) Then

With ThisWorkbook.Worksheets.Add

.Name = item

End With

End If

Next

Set dic = Nothing

End Sub


120、按A列数据批量修改表名称


Sub 按A列数据批量修改表名称()

Dimi%

For i = 1To Sheets.Count - 1

Sheets(i).Name = Cells(i + 1, 1).Text

Next

End Sub



121、按A列数据批量创建新表(控件按钮代码)


Private Sub CommandButton1_Click()

On Error Resume Next

Dim i%, j%

For i = 1 To [a65536].End(xlUp).Row

For j = 2 To Sheets.Count

If Cells(i, 1) = Sheets(j).Name Then

Exit For

End If

Next

Sheets.Add(after:=Sheets(Sheets.Count)).Name = Cells(i, 1)

Next

End Sub



122、清除剪贴板


Sub 清除剪贴板()

Application.CutCopyMode = False

Application.CommandBars("Task Pane").Visible = False

End Sub



123、批量清除软回车


Sub 批量清除软回车()

'也可直接使用Alt+10或13替换

Cells.Replace What:=Chr(10), Replacement:="", LookAt:=xlPart,SearchOrder:= _

xlByRows, MatchCase:=False, SearchFormat:=False,ReplaceFormat:=False

End Sub



124、判断指定文件是否已经打开


Sub 判断指定文件是否已经打开()

Dim x As In

发表评论
评论通过审核后显示。