当前位置: 首页 > news >正文

Excel工作表控件实现滚动按钮效果

实例需求:工作表中有多个Button控件(工作表Form控件)和一个ScrollBar控件(工作表ActiveX控件,名称为ScrollBar2),需要实现如下图所示效果。点击ScrollBar控件实现按钮的滚动效果,实际工作表中Button控件个数不确定。

请添加图片描述

首先设置ScrollBar控件属性。

  • 依次单击Excel 【开发工具】选项卡>【设计模式】按钮
  • 鼠标右击ScrollBar控件,在弹出的快捷菜单中,选择【属性】命令
  • 在弹出的【属性】对话框中修改相关属性,如下图中K列和L列表格所示。

在这里插入图片描述

ScrollBar控件Change事件代码如下。

Private Sub ScrollBar2_Change()Dim btn As Button, i As Long, j As LongDim iLoc As Long, iTop As Long, iVal As LongConst TOP_GAP = 10Const BTN_GAP = 3Application.ScreenUpdating = FalseiVal = Me.ScrollBar2.ValueFor i = 1 To Me.Buttons.CountIf i > iVal ThenIf i = iVal + 1 TheniTop = TOP_GAPElseWith Me.Buttons(i - 1)iTop = .Top + .Height + BTN_GAPEnd WithEnd IfMe.Buttons(i).Top = iTopEnd IfMe.Buttons(i).Visible = (i > iVal)Next iApplication.ScreenUpdating = True
End Sub

【代码解析】
第4行代码设置常量TOP_GAP,为首个可见Button控件的上边距(控件上端与表格区域上边界的距离)。
第5行代码设置常量BTN_GAP,为两个相邻Button控件间的距离。
第6行代码禁止屏幕更新。
第7行代码获取ScrollBar控件的当前值(0~100)。
第8~20行代码循环处理工作表中的全部Button控件。
第9行代码判断Button控件编号是否大于ScrollBar控件的值。
例如ScrollBar控件的值为2,由于ScrollBar控件的步长设置1,说明用户点击两次下箭头,因此需要隐藏前两个Button控件,本示例中可见Button控件为第3个到第6个,下面代码实现这个效果。
第10行代码判断是否为当前变量Button控件是否个首个可见控件。
如果满足条件,第11行代码其上边距为TOP_GAP。
如果不满足条件,第13~15行代码根据其上一个可见控件的位置和控件尺寸(高度)计算上边距。如果所有Button控件都是相同尺寸,那么此处也可以直接计算每个控件的上边距。
第17行代码设置Button控件的Top属性。
第19行代码设置Button控件的Visible属性,隐藏无关控件。
第21行代码恢复屏幕更新。

相关文章:

  • 20.scala视图界定
  • 题目 1124: C语言训练-大、小写问题
  • matlab一维二维和三维RBF插值方法
  • 第7.1章:StarRocks性能调优——查询分析
  • 多输入时序预测|WOA-CNN|鲸鱼算法优化的卷积神经网络时序预测(Matlab)
  • 计算机网络面经-从浏览器地址栏输入 url 到显示主页的过程?
  • LeetCode 2433.找出前缀异或的原始数组
  • 5 buuctf解题
  • 淘宝京东1688实时API商品详情数据解析:获取市场最新趋势
  • 基于Java SSM框架实现高考填报信息系统项目【项目源码】
  • 第6.3章:StarRocks查询加速——Bucket Shuffle Join
  • fastJSON 字符串转对象
  • CCAA审核员职业健康安全管理体系基础考试大纲
  • HTTPS对HTTP的加密过程
  • ES6 | (一)ES6 新特性(上) | 尚硅谷Web前端ES6教程
  • 【5+】跨webview多页面 触发事件(二)
  • 【技术性】Search知识
  • Docker 1.12实践:Docker Service、Stack与分布式应用捆绑包
  • Invalidate和postInvalidate的区别
  • PyCharm搭建GO开发环境(GO语言学习第1课)
  • Python 反序列化安全问题(二)
  • Redis字符串类型内部编码剖析
  • spring cloud gateway 源码解析(4)跨域问题处理
  • zookeeper系列(七)实战分布式命名服务
  • 闭包--闭包之tab栏切换(四)
  • - 概述 - 《设计模式(极简c++版)》
  • 缓存与缓冲
  • 来,膜拜下android roadmap,强大的执行力
  • 我的zsh配置, 2019最新方案
  • 小程序button引导用户授权
  • 学习ES6 变量的解构赋值
  • 掌握面试——弹出框的实现(一道题中包含布局/js设计模式)
  • ​猴子吃桃问题:每天都吃了前一天剩下的一半多一个。
  • ###51单片机学习(2)-----如何通过C语言运用延时函数设计LED流水灯
  • #define、const、typedef的差别
  • $.extend({},旧的,新的);合并对象,后面的覆盖前面的
  • $GOPATH/go.mod exists but should not goland
  • (51单片机)第五章-A/D和D/A工作原理-A/D
  • (Bean工厂的后处理器入门)学习Spring的第七天
  • (html转换)StringEscapeUtils类的转义与反转义方法
  • (Matalb回归预测)PSO-BP粒子群算法优化BP神经网络的多维回归预测
  • (六)Hibernate的二级缓存
  • (三)c52学习之旅-点亮LED灯
  • (淘宝无限适配)手机端rem布局详解(转载非原创)
  • (小白学Java)Java简介和基本配置
  • (转)详解PHP处理密码的几种方式
  • .form文件_一篇文章学会文件上传
  • .L0CK3D来袭:如何保护您的数据免受致命攻击
  • .NET / MSBuild 扩展编译时什么时候用 BeforeTargets / AfterTargets 什么时候用 DependsOnTargets?
  • .NET 2.0中新增的一些TryGet,TryParse等方法
  • .NET Core WebAPI中封装Swagger配置
  • .NET企业级应用架构设计系列之结尾篇
  • .vimrc php,修改home目录下的.vimrc文件,vim配置php高亮显示
  • ?php echo ?,?php echo Hello world!;?
  • [ IOS ] iOS-控制器View的创建和生命周期