宏文件集
▲打开全部隐藏工作表返回
Sub 打开全部隐藏工作表()
Dim i As Integer
For i = 1 To Sheets.Count
Sheets(i).Visible = True
Next i
End Sub
▲循环宏返回
Sub 循环()
AAA = Range("C2")
Dim i As Long
Dim times As Long
times = AAA
'times代表循环次数,执行前把times赋值即可(不可小于1,不可大于2147483647)
For i = 1 To times
Call 过滤一行
If Range("完成标志") = "完成" Then Exit For '如果名为'完成标志'的命名单元的值等于'完成',则退出循环,如果一开始就等于'完成',则 'If Sheets("传送参数").Range("A" & i).Text = "完成" Then Exit For '如果某列出现"完成"内容则退出循环
Next i
End Sub
▲录制宏时调用“停止录制”工具栏返回
Sub 录制宏时调用停止录制工具栏()
https://www.doczj.com/doc/539324944.html,mandBars("Stop Recording").Visible = True
End Sub
▲高级筛选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
▲双击单元执行宏(工作表代码)返回Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Range("$A$1") = "关闭" Then Exit Sub
Select Case 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
End Select
End Sub
▲双击指定区域单元执行宏(工作表代码)返回Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Range("$A$1") = "关闭" Then Exit Sub
If Not Application.Intersect(Target, Range("A4:A9", "C4:C9")) Is Nothing Then Call 打开隐藏表End Sub
▲进入单元执行宏(工作表代码)返回Private Sub Worksheet_SelectionChange(ByVal Target As Range)
'以单元格进入代替按钮对象调用宏
If Range("$A$1") = "关闭" Then Exit Sub
Select Case Target.Address
Case "$A$5" '单元地址(Target.Address),或命名单元名字(https://www.doczj.com/doc/539324944.html,)
Call 宏1
Case "$B$5"
Call 宏2
Case "$C$5"
Call 宏3
End Select
End Sub
▲进入指定区域单元执行宏(工作表代码)返回Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Range("$A$1") = "关闭" Then Exit Sub
If Not Application.Intersect(Target, Range("A4:A9","C4:C9")) Is Nothing Then Call 打开隐藏表End Sub
▲在多个宏中依次循环执行一个(控件按钮代码)返回Private Sub CommandButton1_Click()
Static RunMacro As Integer
Select Case RunMacro
Case 0
宏1
RunMacro = 1
Case 1
宏2
RunMacro = 2
Case 2
宏3
RunMacro = 0
End Select
End Sub
▲在两个宏中依次循环执行一个并相应修改按钮名称(控件按钮代码)返回Private Sub CommandButton1_Click()
With CommandButton1
If .Caption = "保护工作表" Then
Call 保护工作表
.Caption = "取消工作表保护"
Exit Sub
End If
If .Caption = "取消工作表保护" Then
Call 取消工作表保护
.Caption = "保护工作表"
Exit Sub
End If
End With
End Sub
▲在三个宏中依次循环执行一个并相应修改按钮名称(控件按钮代码)返回Option Explicit
Private Sub CommandButton1_Click()
With CommandButton1
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
End With
End Sub
▲根据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
▲当前单元返回按钮名称(控件按钮代码)返回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 循环插入分页符()
' 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
▲将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(10)
Next
ActiveSheet.Shapes.AddTextbox(msoTextOrientationHorizontal, ActiveCell.Left + ActiveCell.Width, ActiveCell.Top + ActiveCell.
Selection.Characters.Text = "问题:" & n
With Selection.Characters(Start:=1, Length:=3).Font
.Name = "黑体"
.FontStyle = "常规"
.Size = 12
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/539324944.html,ment.Delete
r.AddComment
https://www.doczj.com/doc/539324944.html,ment.Visible = False
https://www.doczj.com/doc/539324944.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/539324944.html,ment.Visible = False
https://www.doczj.com/doc/539324944.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/539324944.html,ment.Visible = False
https://www.doczj.com/doc/539324944.html,ment.Text Text:=[a1].Text
Next
End If
End Sub
▲不连续区域插入当前文件名和表名及地址返回Sub 批量插入当前文件名和表名及地址()
For Each mycell In Selection
mycell.FormulaR1C1 = "[" + https://www.doczj.com/doc/539324944.html, + "]" + https://www.doczj.com/doc/539324944.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/539324944.html,
End Sub
▲不连续区域添加文本返回Sub 批量添加文本()
Dim s As Range
For Each s In Selection
s = s & "文本内容"
Next
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
▲按aa工作表A列的内容排列工作表标签顺序返回Sub 按aa工作表A列的内容排列工作表标签顺序()
Dim I%, str1$
I = 1
Sheets("aa").Select
Do While Cells(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
▲以A1单元文本作表名插入工作表返回Sub 以A1单元文本作表名插入工作表()
Dim nm As String
nm = [a1]
Sheets.Add
https://www.doczj.com/doc/539324944.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/539324944.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/539324944.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 在目录表建立本工作簿中各表链接目录()
Dim s%, Rng As Range
On Error Resume Next
Sheets("目录").Activate
If Err = 0 Then
Sheets("目录").UsedRange.Delete
Else
Sheets.Add
https://www.doczj.com/doc/539324944.html, = "目录"
End If
For i = 1 To 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
▲建立工作表文本目录返回Sub 建立工作表文本目录()
Sheets.Add before:=Sheets(1)
Sheets(1).Name = "目录"
For i = 2 To Sheets.Count
Cells(i - 1, 1) = Sheets(i).Name
'Sheets(1).Hyperlinks.Add Cells(i - 1, 1), "#" & Sheets(i).Name & "!A1" '添加超链接Next
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/539324944.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 解除全部工作表保护()
Dim n As Integer
For n = 1 To Sheets.Count
Sheets(n).Unprotect
Next n
End Sub
▲为指定工作表加指定密码保护表返回Sub 为指定工作表加指定密码保护表()
Sheet10.Protect Password:="123"
End Sub
▲在有密码的工作表执行代码返回Sub 在有密码的工作表执行代码()
Sheets("1").Unprotect Password:=123 '假定表名为“1”,密码为“123” 打开工作表
Range("C:C").SpecialCells(xlCellTypeBlanks).EntireRow.Hidden = True '隐藏C列空值行Sheets("1").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返回Sub 拷贝A1公式到A2()
Workbooks("临时表").Sheets("表1").Range("A1").Copy
Workbooks("临时表").Sheets("表2").Range("A2").PasteSpecial
End Sub
▲复制单元数值返回Sub 复制数值()
s = Workbooks("book1").Sheets("Sheet1").Range("A1:A2")
Workbooks("book2").Sheets("Sheet1").Range("A1:A2") = s
End Sub
▲插入数值条件格式返回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
▲插入透明批注返回Sub 插入透明批注()
Selection.AddComment
https://www.doczj.com/doc/539324944.html,ment.Visible = False
Dim XS As Worksheet
For i = 1 To https://www.doczj.com/doc/539324944.html,ments.Count
https://www.doczj.com/doc/539324944.html,ments(i).Text "透明批注"
https://www.doczj.com/doc/539324944.html,ments(i).Shape.Fill.Visible = msoFalse
Next
End Sub
▲添加文本返回Sub 添加文本()
Selection = Selection + "×" '不可在数字后添加文本
'Selection = Workbooks("临时表").Sheets("表2").Range("A1") 调用指定地址内容
End Sub
▲光标定位到指定工作表A列最后数据行下一单元返回Sub 光标定位到指定工作表A列最后数据行下一单元()
a = Sheets("数据库").[a65536].End(xlUp).Row
Sheets("数据库").Select
Range("A" & a + 1).Select
End Sub
▲定位选定单元格式相同的全部单元格返回Sub 定位选定单元格式相同的全部单元格()
Dim FirstCell As Range, FoundCell As Range
Dim AllCells 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
https://www.doczj.com/doc/539324944.html, = https://www.doczj.com/doc/539324944.html,
.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
Set FirstCell = https://www.doczj.com/doc/539324944.html,edRange.Find(what:="", searchformat:=True)
If FirstCell Is Nothing Then
Exit Sub
End If
Set AllCells = FirstCell
Set FoundCell = FirstCell
Do
Set FoundCell = https://www.doczj.com/doc/539324944.html,edRange.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