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 Long
    Dim iLoc As Long, iTop As Long, iVal As Long
    Const TOP_GAP = 10
    Const BTN_GAP = 3
    Application.ScreenUpdating = False
    iVal = Me.ScrollBar2.Value
    For i = 1 To Me.Buttons.Count
        If i > iVal Then
            If i = iVal + 1 Then
                iTop = TOP_GAP
            Else
                With Me.Buttons(i - 1)
                    iTop = .Top + .Height + BTN_GAP
                End With
            End If
            Me.Buttons(i).Top = iTop
        End If
        Me.Buttons(i).Visible = (i > iVal)
    Next i
    Application.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行代码恢复屏幕更新。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/410462.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Go的CSP并发模型实现M, P, G简介

GMP概念简介 G: goroutine(协程,也叫用户态线程) M: 工作线程(内核态线程) P: 上下文(也可以认为是cpu,逻辑cpu数量,可以在程序启动的时候设置这个数量,gomaxprocs函数设置) GMP 模型 在 Go 中&#xff…

黄金回收是去当铺还是金店?

黄金回收是指将闲置的黄金饰品或金条等物品出售或交换成现金或其他有价物。在选择回收渠道时,很多人会犹豫是去当铺还是金店。本文将探讨这两种回收方式的特点。 当铺是一种专门经营典当业务的场所,也提供黄金回收服务。通过当铺回收,您可以在…

【简写Mybatis】02-注册机的实现以及SqlSession处理

前言 注意: 学习源码一定一定不要太关注代码的编写,而是注意代码实现思想: 通过设问方式来体现代码中的思想;方法:5W1H 源代码:https://gitee.com/xbhog/mybatis-xbhog;https://github.com/xbh…

51单片机学习(5)-----蜂鸣器的介绍与使用

前言:感谢您的关注哦,我会持续更新编程相关知识,愿您在这里有所收获。如果有任何问题,欢迎沟通交流!期待与您在学习编程的道路上共同进步。 目录 一. 蜂鸣器的介绍 1.蜂鸣器介绍 2.压电式蜂鸣器 (无源…

生成式 AI - Diffusion 模型的数学原理(5)

来自 论文《 Denoising Diffusion Probabilistic Model》(DDPM) 论文链接: https://arxiv.org/abs/2006.11239 Hung-yi Lee 课件整理 讲到这里还没有解决的问题是,为什么这里还要多加一个噪声。Denoise模型算出来的是高斯分布的均…

NeurIPS 2023 Spotlight | VoxDet:基于3D体素表征学习的新颖实例检测器

本文提出基于3D体素表征学习的新颖实例检测器VoxDet。给定目标实例的多视图,VoxDet建立该实例的三维体素表征。在更加杂乱的测试图片上,VoxDet使用体素匹配算法检测目标实例。实验表明,VoxDet中的三维体素表征与匹配比多种二维特征与匹配要更…

【深入理解设计模式】适配器设计模式

适配器设计模式 适配器设计模式是一种结构型设计模式,用于将一个类的接口转换成客户端所期望的另一个接口,从而使得原本由于接口不兼容而不能一起工作的类能够一起工作。适配器模式通常用于以下场景: 现有接口与需求不匹配:当需要…

IP对讲终端SV-6002(防水)

SV-6002(防水)是一款IP对讲终端,具有10/100M以太网接口,其接收网络的音频数据,解码后播放,外部DC12~24V电源供电端子,提供单路2W的音频输出。基于TCP/IP网络通信协议和数字音频技术,…

【Java EE初阶二十三】servlet的简单理解

1. 初识servlet Servlet 是一个比较古老的编写网站的方式,早起Java 编写网站,主要使用 Servlet 的方式,后来 Java 中产生了一个Spring(一套框架),Spring 又是针对 Servlet 进行了进一步封装,从而让我们编写网站变的更简单了;Sprin…

都有金蝶了,也能开发报表,为什么要用BI?

很多企业在一开始时都会有这样的困惑:我都有金蝶ERP了,也能自己开发报表,为什么还要买BI? 答案是显而易见的,金蝶ERP毕竟不是专业的数据分析系统,它的主要任务是在企业管理流程上,虽然很多企业…

Linux内核网络

文章目录 前言网络协议栈图解功能 发送Linux内核网络数据包图解流程 接收Linux内核网络数据包图解流程 最后 前言 你好,我是醉墨居士,因为Linux内核涉及的内容极多,我们初学者如果一上来就开始深挖细节,很有可能会在Linux内核代码…

MySQL - 事务日志

目录 1. redo日志 1.1 为什么需要REDO日志 1.2 REDO日志的好处、特点 1. 好处 2. 特点 1.3 redo的组成 1.4 redo的整体流程 1.5 redo log的刷盘策略 1.6 不同刷盘策略演示 1. 流程图 ​编辑2. 举例 1.7 写入redo log buffer 过程 1.8 redo log file 1. 相关参数…

[云原生] 二进制安装K8S(中)部署网络插件和DNS

书接上文,我们继续部署剩余的插件 一、K8s的CNI网络插件模式 2.1 k8s的三种网络模式 K8S 中 Pod 网络通信: (1)Pod 内容器与容器之间的通信 在同一个 Pod 内的容器(Pod 内的容器是不会跨宿主机的)共享…

批量解决opencv cv2.imread读取32位抠图png图像后,出现隐藏背景无法去除的问题

一、问题展示 1.原始png含蒙版抠图信息:位深度为32位,4通道图像信息,含蒙版背景信息 2.使用opencv读取保存后图像信息:位深度为24位,3通道图像信息,显示了扣除的背景 二、问题分析 1.用cv模块无法识别深度…

Stable Diffusion 绘画入门教程(webui)-ControlNet(线稿约束)

上篇文章介绍了openpose,本篇文章介绍下线稿约束,关于线稿约束有好几个处理器都属于此类型,但是有一些区别。 包含: 1、Canny(硬边缘):识别线条比较多比较细,一般用于更大程度得还原照片 2、ML…

C++ : string类

目录 介绍: string类的七种构造函数: string类的第三个构造函数 string类的第四个构造函数 string类的第五个构造函数 string类的第六个构造函数 string类常用的构造 string类对象的访问遍历操作 第一种遍历方式: 第二种遍历方…

使用Node.js开发RESTful API

在当今信息时代,不管是企业级应用还是个人项目,都离不开RESTful API的使用。RESTful API 是现代 web 应用的基石,通过它,我们可以实现前后端的高效沟通和数据传输。而在开发 RESTful API 的过程中,Node.js 的强大功能和…

AR应用的开发流程

增强现实(Augmented Reality,AR)是一种技术,它将虚拟信息叠加在真实世界中,通过计算机生成的视觉、听觉、触觉等感官反馈,将虚拟元素与现实世界进行交互。这种技术使得用户可以与现实世界中的虚拟对象进行互…

vue插件——vue-print-nb 实现打印功能

之前写过好多关于打印的功能,通过windowprint组合键来实现打印。 今天遇到一个需求,就是使用vue插件来实现打印功能。 最终效果图如下: 下面介绍解决步骤: 解决步骤1:安装vue-print-nb插件——npm install vue-p…
最新文章