Private Sub Workbook_Open() Dim R As AllowEditRange With Worksheets("Main") .Unprotect For Each R In .Protection.AllowEditRanges R.Delete Next '首先解除保护并删除所有的可编辑区域,或者直接用on error resume next代替, '防止因为重复向工作表添加有交叉的可编辑区域会出现错误, .Protection.AllowEditRanges.Add Title:="标题", Range:=.Range("D4:H13") '1、向工作表MAIN添加可编辑区域为Range("D4:H13"),然后执行工作表保护。 .Protect '2、限制工作表的可滚动区域为"D3:H13"。 .ScrollArea = "D3:H13" Worksheets("Data").Visible = True '3 、隐藏工作表DATA End With End Sub
Dim a Dim R As Integer '定义列表框滚动条的当前值变量 Private Sub ScrollBar1_Change() R = ScrollBar1.Value a = Worksheets("Data").Cells(R + 2, 1).Resize(10, 5) Worksheets("Main").Range("D4:H13") = a '根据当前滚动条的位置将DATA表的内容赋予MAIN表 End Sub Private Sub Worksheet_Activate()
ScrollBar1.Max = Worksheets("Data").Cells(65536, 1).End(xlUp).Row - 11 ScrollBar1.Value = 0 ScrollBar1_Change '在工作表激活时,对列表框的内容进行初始化, '“Row - 11”是刚好将滚动条的最大值限制为在列表框中不显示出空白行, '避免了“当在空记录行中编辑时不增加记录”的代码编写。 End Sub Private Sub Worksheet_Change(ByVal Target As Range) a = Range("D4:H13") Worksheets("Data").Cells(R + 2, 1).Resize(10, 5) = a '将可编辑区域内的任何改变回写给DATA表 End Sub Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Target.Row = 3 Then With Worksheets("Data") .Cells.Sort Key1:=.Cells(2, Target.Column - 3), _ Order1:=xlDescending, Header:=xlGuess, _ OrderCustom:=1, MatchCase:=False, _ Orientation:=xlTopToBottom, SortMethod _ :=xlPinYin, DataOption1:=xlSortNormal End With Worksheet_Activate End If '增加了一点按各字段名排序的功能 End Sub
以下为评论 *工作簿打开时没有隐藏Data表; *工作簿打开时没有从第一条记录开始显示;至少显示最后一条记录这项可能我没有说明白,不过示例图片应该很清楚; *你的代码控制界面不显示空行,最后一个要求就无法实现了. 自由发挥内容:添加了按字段排序功能. Worksheets("Data").Visible = false [em04]一时疏忽写反了。
[此贴子已经被作者于2006-7-28 8:42:11编辑过] |