|
楼主 |
发表于 2008-12-11 15:15
|
显示全部楼层
9、插入工作表
我们的问题总是来自工作实际。激活目录中指定的工作表,如yql4688所说,不但实用,而且有趣。我们来看一个与此有关的问题。
问题1:如果我们希望在表格中输入文字(如101、102、201……等)后,Excel会自动插入一个工作表,并以该单元格内容命名,可以这样操作:
右键单击本工作表标签,选择“查看代码”,将下面的代码粘贴到光标处即可:- Private Sub Worksheet_Change(ByVal Target As Range)
- If Target.Count > 1 Then Exit Sub '如果修改多个单元格的值,退出程序(不插入工作表)
- If Target = "" Then Exit Sub '如果单元格的值为空,退出程序
- If Intersect(Target, Range("B5:G10")) Is Nothing Then Exit Sub '如果选择的单元格不在 B5:G10 区域内,退出程序
- If MsgBox("插入工作表 " & Target.Value & " 吗? ", 36, "提示") = 7 Then Exit Sub '提示,如果不要提示,删去此行
-
- Sheets.Add '插入工作表
- ActiveSheet.Name = CStr(Target.Value) '为工作表更名(名称为当前工作表的内容)
- ActiveSheet.Move after:=Sheets(Sheets.Count) '将新工作表移到最后
-
- End Sub
复制代码 效果见附件:
成绩表1.zip
(9.53 KB, 下载次数: 938)
练习:
成绩表2.zip
(6.88 KB, 下载次数: 637)
问题2:实际使用中,我们希望点击某单元格时,自动激活对应的工作表,输入文字时,新建工作表。
即是把插入工作表的功能与134楼介绍的功能结合起来。
要实现这样的功能,只需在“目录”模块下同时写入两段代码:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
’****************激活工作表的代码
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
’****************插入工作表代码
End Sub
两段代码没有顺序之分,哪个在前,哪个在后没有关系。
在ThisWorkbook模块中加入隐藏工作表的代码(方法见134楼):
Private Sub Workbook_SheetDeactivate(ByVal Sh As Object)
’****************隐藏工作表代码
End Sub
实际效果见附件:
成绩表3.zip
(11.55 KB, 下载次数: 847)
问题3:实际使用中,我们更希望插入的不是一个空白的工作表,而是像现在看到的这样,有统一的表格样式:
可以这样操作:
1、建立一个只有一个工作表的工作簿,设计好表格样式,保存工作簿时,保存类型选择为“模板”。
模板默认保存路径是:C:\Documents and Settings\Administrator\Application Data\Microsoft\Templates
在保存的时候可自由选择。
2、右键单击本工作表标签,选择“查看代码”,将下面的代码粘贴到光标处,请检查模板所在路径是否正确:- Private Sub Worksheet_Change(ByVal Target As Range)
- On Error Resume Next '如果遇到程序出错,不中断,继续往下执行(原来存在同名工作表时,更名一步会出错)
- If Target.Count > 1 Then Exit Sub '如果修改多个单元格的值,退出程序(不插入工作表)
- If Intersect(Target, Range("B5:G10")) Is Nothing Then Exit Sub '如果选择的单元格不在 B5:G10 区域内,退出程序
- If Target = "" Then Exit Sub '如果清除单元格的值,退出程序
-
- If MsgBox("插入工作表 " & Target.Value & " 吗? ", 36, "提示") = 7 Then Exit Sub '提示,如果不要提示,删去此行
- Sheets.Add Type:=ThisWorkbook.Path & "\cjb.xlt" '插入工作表(使用模板 cjb.xlt)
- ActiveSheet.Name = CStr(Target.Value) '为工作表更名(名称为当前工作表的内容)
- ActiveSheet.Move after:=Sheets(Sheets.Count) '将新工作表移到最后
- End Sub
复制代码 与前面的代码相比,只有一行不相同,就是插入基于模板的工作表。
在“Sheets.Add Type:=ThisWorkbook.Path & "\cjb.xlt" ”这一句中,“ThisWorkbook.Path”表示本工作簿所在路径,即模板文件与本文件在同一目录中。如果将模板保存到其它位置,如“D:\模板”,则代码为:
Sheets.Add Type:="D:\模板\cjb.xlt"
效果见附件:
成绩表4.zip
(17.09 KB, 下载次数: 968)
|
|