ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
HR薪酬管理数字化实战 Excel 2019函数公式学习大典 不用妈妈陪默写神器 打造核心竞争力的职场宝典
300集Office 2010微视频教程 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
你的Excel 2016实战技巧学习锦囊 WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 6654|回复: 10

[Excel 程序开发] [第13期_1] 仿ListView功能

[复制链接]

TA的精华主题

TA的得分主题

发表于 2006-7-2 23:36 | 显示全部楼层 |阅读模式

使用VBA实现,具体要求如下:

1,工作簿打开时显示Main表,隐藏Data表; Main表可编辑区域为命名区域[ListView];标题栏(即字段名)不可编辑;其他区域不可选中;滚动滚动条时始终保持界面可视(包括标题栏,命名区域[listview]及滚动条);见图例:

总结:

因为第一次出题时间紧,草草想了这么一个题目,目的是考察一下大家对工作表事件的控制能力.在回复的贴子中有一个现象值得一说,就是关于Application.ScreenUpdating属性的使用.

以下拷贝帮助中的说明:

ScreenUpdating 属性

关闭屏幕更新可加快宏的执行速度。这样将看不到宏的执行过程,但宏的执行速度加快了。

我想应该是禁止屏幕刷新与闪屏之间的概念模糊了.禁止屏幕刷新的功能只在对工作表进行大量数据写入时才适用,可以提高执行速度,而对于小数据量执行时间短的过程反而会加重闪屏,特别是经常重复执行的过程.例如本题目中的ScrollBar的Change事件.所以使用该属性与否应该在实际的应用中来比较判断,但要记住的一点是该属性只是起到提高速度的作用,起不到禁止屏幕闪烁的作用,而只会增加闪烁.

对于禁止事件可使用应用程序的Application.EnabledEvents属性来设置.



[此贴子已经被作者于2006-8-2 10:00:12编辑过]
多选投票, 共有 6 人参与投票

距结束还有: 3529 天10 小时26 分钟

您所在的用户组没有投票权限

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?免费注册

x

TA的精华主题

TA的得分主题

发表于 2006-7-6 11:16 | 显示全部楼层

回复第13期Excel VBA_1] 仿ListView功能...

版版:你好!

花了点时间,做了一下,麻烦版版给指点一下,谢谢!

 


以下为评论:

*鼠标滚动时界面不可视;H14单元格可选中;
*数据更新时屏幕闪烁厉害;
*使用单元格范围的Copy方法导致界面格式会被修改.

[此贴子已经被清风_ll于2006-7-28 7:32:42编辑过]

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?免费注册

x

TA的精华主题

TA的得分主题

发表于 2006-7-8 16:41 | 显示全部楼层

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编辑过]

TA的精华主题

TA的得分主题

发表于 2006-7-10 23:13 | 显示全部楼层

以下为评论:

*当在空记录行中编辑后有时会导致界面显示内容为空.

*编辑单元格有时会出现错误提示.

[此贴子已经被清风_ll于2006-7-27 10:30:45编辑过]

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?免费注册

x

TA的精华主题

TA的得分主题

发表于 2006-7-12 10:00 | 显示全部楼层

来交个卷,不知道对清枫版的题意理没理解到位。

呵呵,支持清枫版,闪人。

以下为评论:

*要求基本达到了,使用定义名称的方法也不失为一个好主法,但是数据更新时屏幕闪烁厉害.

[此贴子已经被清风_ll于2006-7-27 10:44:24编辑过]

TA的精华主题

TA的得分主题

发表于 2006-7-12 16:28 | 显示全部楼层


以下为评论

*最后一个功能没按要求完成.如果要设置为不可选中个人感觉也不如直接保护单元区域来得好.

[此贴子已经被清风_ll于2006-7-28 7:31:30编辑过]

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?免费注册

x

TA的精华主题

TA的得分主题

发表于 2006-7-19 09:44 | 显示全部楼层

本期竞赛题有好多VBA题,对于我这个VBA白菜来说,只有干瞪眼的份了。眼看20号就要到了,到底还是不甘心,就抓一道在我看来相对简单的VBA题目来做吧。

 一直都有计划学习VBA,但总是没有下决心安排时间来学习,惭愧惭愧。


以下为评论:

*ScrollBar的Max属性设置不当,滚动条滚动时没有满足至少显示最后一条记录的要求.

*思路不错,只是滚动滚动条时代码往Data工作表中进行了无意义的赋值,参考狼兄的代码.

[此贴子已经被清风_ll于2006-7-28 7:29:53编辑过]

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?免费注册

x

TA的精华主题

TA的得分主题

发表于 2006-7-19 12:56 | 显示全部楼层
我的答案,代码未简化.

以下为评论:

*鼠标滚动时界面不可视.

*工作簿初始化时没有从第一个记录开始显示的实现代码

*使用循环赋值的方法速度慢,效率低.

说明:扣回一分.

[此贴子已经被清风_ll于2006-7-27 11:39:08编辑过]

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?免费注册

x

TA的精华主题

TA的得分主题

发表于 2006-7-21 06:29 | 显示全部楼层


以下为评论

*另辟蹊径,思路巧妙!

[此贴子已经被清风_ll于2006-7-27 12:45:23编辑过]

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?免费注册

x

TA的精华主题

TA的得分主题

发表于 2006-7-27 11:26 | 显示全部楼层
QUOTE:
以下是引用chrisfang在2006-7-19 9:44:01的发言:


以下为评论:

*ScrollBar的Max属性设置不当,滚动条滚动时没有满足至少显示最后一条记录的要求.

*代码重复的在两个工作表中不断进行取值赋值,降低了效率.


我以为“至少显示最后一条记录”不是对scrollbar拖到底的时候而言的。

再次感谢清风大师的指教!

您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-3-19 13:09 , Processed in 0.059777 second(s), 16 queries , Gzip On, Redis On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表