excel宏实现工作表索引,点击按钮隐藏/显示对应工作表
当单个excel工作簿有很多工作表时,使用起来会有麻烦,虽然excel提供隐藏工作表功能,但点击及查找并不方便。如果能够在一个工作表中实现目录索引功能,点击按钮即可隐藏/显示对应工作表,会非常方便操作和查看。
一、编写宏
1编写一个点击按钮显示/隐藏工作表的按钮宏
Sub click()
For x = 1 To Sheets.Count
If Sheets(x).name = ActiveSheet.Buttons(Application.Caller).Caption Then
If Sheets(x).Visible = 0 Then
Sheets(x).Visible = -1'设置显示
Else
Sheets(x).Visible = 0'设置隐藏
End If
End If
Next x
End Sub
2编写一个隐藏除了索引外全部工作表的点击宏
Sub 隐藏()
For x = 1 To Sheets.Count
If Sheets(x).name <> "炼金配方索引" Then
Sheets(x).Visible = 0
End If
Next x
End Sub
3编写一个新建与按钮同名的工作表的宏
Sub 新建配方z()
Dim name As String
Dim bool As Integer
bool = 0
name = ActiveSheet.Buttons(Application.Caller).Caption
If Sheet10.Visible = 0 Then
Sheet10.Visible = -1
bool = 1
End If
Sheet10.Copy after:=Worksheets(Worksheets.Count) '永远将新表加入到最后一个工作表之后
ActiveSheet.name = name '新的工作表为当前活动的工作,将工作表的名称更改为神山表中对应单元格的名字。
If bool = 1 Then
Sheet10.Visible = 0
End If
MsgBox "该配方不存在,已为您创建新的样本!"
End Sub
注意:由于复制一个新的工作表的显示状态与原工作表相同,故需要先显示原来的工作表,再隐藏
4编写一个新建配方的按钮宏
Sub 新建配方()
Dim name As String
Dim bool As Integer
bool = 0
name = InputBox("配方名称:")
If name <> "" Then '防止点击了取消按钮对话框后出现空按钮的情况
Dim isExists As Boolean, s As Worksheet
isExists = False '检测是否已经同名工作表,防止无法生成工作表的情况
For Each s In ThisWorkbook.Sheets
If s.name = name Then
isExists = True
End If
Next s
If isExists = False Then
Set shp = ActiveSheet.Buttons.Add(Rnd * (400 - 30 + 1) + 30, Rnd * (200 - 30 + 1) + 30, 100, 40) '将新建的按钮创建在区域内的随机位置
shp.Characters.Text = name
shp.OnAction = "sheet4.main2" '给新建的按钮链接一个宏
If Sheet10.Visible = 0 Then
Sheet10.Visible = -1
bool = 1
End If
Sheet10.Copy after:=Worksheets(Worksheets.Count) '永远将新表加入到最后一个工作表之后
ActiveSheet.name = name '新的工作表为当前活动的工作,将工作表的名称更改为神山表中对应单元格的名字。
If bool = 1 Then
Sheet10.Visible = 0
MsgBox "创建样本及按钮完成!"
End If
Else: MsgBox "已存在该配方!"
End If
End If
End Sub
5编写一个主宏,用于赋给索引按钮
Sub main2()
Dim isExists As Boolean, s As Worksheet
isExists = False '假如同名工作表不存在,则引用“新建配方z”
For Each s In ThisWorkbook.Sheets
If s.name = ActiveSheet.Buttons(Application.Caller).Caption Then
isExists = True
End If
Next s
If isExists = False Then
Call 新建配方z
Else '假如同名工作表存在,则引用“click”
Call click
End If
End Sub
6编写第二个主宏,用于赋给新建配方这个按钮
Sub main()
Call 新建配方
End Sub
二、新建按钮连接到宏
1.手动创建与工作表同名的按钮,都链接到宏:sheet4.main2
2.手动创建一个名为“隐藏全部”的按钮,链接到宏:seet4.隐藏
3.手动创建一个名为“创建新工作表”的按钮,链接到宏:sheet4.main
三、使用索引功能
1.对于已有的工作表:点击与工作表同名的按钮可实现隐藏/显示
2.想要新建一个工作表:点击按钮“创建新工作表”弹出输入框,输入名称后会新建一个工作以及一个同名按钮。