VBA窗体跟随活动单元格【简易版】

news2024/12/22 18:52:12

本篇博客与以往的风格不同,先上图再讲解。
请添加图片描述

这个效果是不是很酷,VBA窗体(即UserForm,下文中简称为窗体)可以实现很多功能,例如:用户输入数据,提供选项等等。如本博客标题标注,这里将要实现的一个简易版,代码行数少,容易理解,便于大家移植,但是其适用场景有局限性,如果希望完美实现,那么就需要适用Windows API来精确定位。

先讲解一下代码框架。

' -- 普通(标准)模块代码 --
Public bShow As Boolean

' -- ThisWorkbook 模块代码 --
Option Explicit
Private Sub Workbook_BeforeClose(Cancel As Boolean)
    If bShow Then Unload UserForm1
End Sub

' -- 工作表模块代码 --
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    ' 调整窗体显示位置实现跟随效果
End Sub

代码解析:
普通模块中定义共有变量bShow用于保存窗体状态。
工作簿模块中Workbook_BeforeClose事件代码在工作簿关闭时被激活,如果窗体已经被加载,那么Unload UserForm1将销毁窗体。
工作表模块中Worksheet_SelectionChange事件代码用于根据活动单元格调整窗体显示位置实现跟随效果。


先思考一下代码逻辑,窗体跟随其实就是根据活动单元格调整窗体的TopLeft,单元格是Range对象,也具有TopLeft属性,使用Worksheet_SelectionChange事件代码应该就可以吧。

示例代码如下。

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Dim frm
    If Not bShow Then UserForm1.Show 0
    Set frm = UserForm1
    With Target
        frm.Top = .Top
        frm.Left = .Left + .Width
    End With
End Sub

测试一下效果。

在这里插入图片描述

这是什么鬼!窗体为什么出现在一个不着边际的地方,在立即窗口中查看一下B1单元格的相关属性。

?[b1].top
0
?[b1].left
52.8

单元格的这两个属性返回值是相对于工作表中表格区域左上角的偏移量,然而窗体的相对于屏幕左上角的偏移量,Excel的功能区高度是固定的,那么加个固定偏移量就可以了。

示例代码如下。

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Dim frm
    If Not bShow Then UserForm1.Show 0
    Set frm = UserForm1
    With Target
        frm.Top = .Top + 180
        frm.Left = .Left + .Width + 19
    End With
End Sub

so easy 轻松实现了窗体跟随效果。

在这里插入图片描述

注意:针对不同版本的Excel,这个偏移量可能并不相同,

滚动屏幕,发现窗体又双叒叕溜号 …

继续排障大法,立即窗口中查看单元格B7的Top属性,明明是第一行,其结果竟然是97.2。看来这个偏移量是相对于整个表格区域坐上角,并非可见区域。

?[b7].top
97.2

在这里插入图片描述

查看VBA对象模型,Application.Windows(1).VisibleRange是工作表的可见单元格区域,利用这个Range对象,就可以实现真正的窗体跟随效果。代码中增加了限制添加,只有选中B列单元格才显示窗体,各位同学可以根据实际需要修改限制条件。

优化代码如下。

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Dim frm, TopOffset As Single, LeftOffset As Single
    TopOffset = 180
    LeftOffset = 19
    If Not bShow Then UserForm1.Show 0
    Set frm = UserForm1
    With Target
        If .Column = 2 Then
            frm.Show 0
            frm.Top = .Top + TopOffset - Application.Windows(1).VisibleRange(1).Top
            frm.Left = .Left + .Width + LeftOffset
        Else
            frm.Hide
        End If
    End With
End Sub

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

分享一下微信小程序怎么实现积分商城功能

微信小程序是一种便捷、高效的应用程序,它可以帮助企业或商家快速搭建自己的线上平台,提供更好的服务和产品给用户。积分商城是小程序中一种常见的功能,它可以帮助企业或商家吸引和留住用户,提高用户的忠诚度和互动性。下面就以微…

苹果 Vision Pro 头显新专利:增加重量减轻颈部压力

上周,彭博社的古尔曼表示 Vision Pro 头显过重,导致开发者佩戴后出现明显的颈部疲劳。随后,便有人发现在美国商标和专利局(USPTO)公示的清单中,苹果公司又获得了一项Vision Pro的专利,该专利提…

【Linux学习笔记】下载工具yum

1. yum工具1.1. yum的安装1.2. yum的搜索1.3. yum的卸载 2. Linux和Windows互相传输文件2.1. rz命令2.2. sz命令 3. yum的下载源 1. yum工具 yum是Linux软件包的管理器,是一个软件。那么软件的本质是什么呢? 答案是指令! 下面举几个简单的例…

如何管理消极怠工的员工?

消极怠工是指员工在工作中表现出缺乏积极性和主动性,对工作任务不负责任或者敷衍了事的行为。这种行为不仅影响了员工个人的工作效率和职业发展,也会对整个团队的工作氛围和效率产生负面影响。因此,如何管理消极怠工的员工成为了管理者需要面…

OA系统和ERP系统有什么区别?

在当今的企业管理领域,协同办公管理系统和ERP系统是两个非常重要的工具。它们在企业的日常运营中扮演着不同的角色,有着各自独特的功能和优势。那么,OA系统和ERP系统到底有什么区别呢?协同办公管理系统又是如何在这两者之间发挥协…

【Python应用】S02 将元组、序列分解为单独的变量

分解已知元素数量的元组、序列 e . g . 1 e.g.1 e.g.1 分解包含 N N N 个元素的元组或序列为 N N N 个单独的变量。 p (4, 5) x, y pe . g . 2 e.g.2 e.g.2 data [ACME, 50, 91.1, (2012, 12, 21)] name, shares, price, date datae . g . 3 e.g.3 e.g.3 data [ACME,…

重生奇迹mu游戏有哪些职业?

作为一款经典的网络游戏,重生奇迹MU一直是佼佼者,各方面设计非常出色,在玩家们的评价中也是不错,让玩家非常喜欢这款游戏了。 在这款游戏中有许多职业,必须要注意每个职业都有存在的价值,每个职业都有自己…

linux安装切换图形化界面?

1.描述 一台测试的服务器,安装的时候用的最小化安装,没有安装 ”带GUI的服务器”的环境 使用的时候想安装上:因为使用vncserver的时候,连接不显示图形界面 2.安装图形化界面 yum groupinstall "Server with GUI" --或者…

微信小程序--小程序框架

目录 前言: 一.框架基本介绍 1.整体结构: 2.页面结构: 3.生命周期: 4.事件系统: 5.数据绑定: 6.组件系统: 7.API: 8.路由: 9.模块化: 10.全局配置&…

计算机视觉-数学基础

学习代数、微积分或其他数字概念来加深对计算机视觉或图像处理的理解本身就是一种令人衰弱的考验,除非建立图像与其数字表示之间的清晰关系。我们中的许多人都熟悉数学在计算机视觉领域中发挥的重要作用,而那些不熟悉的人,会通过这篇文章以及…

如果你想转行做网络安全,请关注三大问题

随着互联网的普及和数字化的发展,网络安全的重要性日益凸显,对网络安全专业人才的需求也在不断增长。给大家一些转行做网络安全的一些考虑和建议: 1:网络安全对技术水平要求比较高,摸鱼不现实 网络安全是一个广泛而复…

华为eNSP配置专题-VLAN和DHCP的配置

文章目录 华为eNSP配置专题-VLAN和DHCP的配置1、前置环境1.1、宿主机1.2、eNSP模拟器 2、基本环境搭建2.1、基本终端构成和连接 3、VLAN的配置3.1、两台PC先配置静态IP3.2、交换机上配置VLAN 4、接口方式的DHCP的配置4.1、在交换机上开启DHCP4.2、在PC上开启DHCP 5、全局方式的…

风火轮X86主板youyeetoo X1:部署MQTT Broker

号外,号外。。。深圳风火轮科技又推出新品啦–youyeetoo X1。 youyeetoo X1 是一款由深圳风火轮科技推出的x86架构单板电脑(SBC),可运行全功能版的windows和Linux, 具备低成本,高性能的特点(11代Intel CPU N5105)&…

构建 Active Directory 域的最佳实践

Active Directory是IT基础架构的核心,也是构建声音的主要步骤,网络安全态势并保持合规,要创建正确的基础架构,必须遵循一些基本步骤以避免配置和安全性问题。 应用于新域或在重组现有域时应用的一些步骤 坚持基本原则创建适当的…

三、机器学习基础知识:Python常用机器学习库(Numpy第二部分)

文章目录 5、其他创建数组的方式5.1 空数组5.2 全零数组5.3 全一数组5.4 数列5.5 随机数组5.6 数组转换 6、索引、切片和迭代7、Numpy计算7.1 基本数组运算7.2 条件运算7.3 统计运算 8、Numpy存取文件 前序内容: 三、机器学习基础知识:Python常用机器学习…

【深度学习】【Opencv】【GPU】python/C++调用onnx模型【基础】

【深度学习】【Opencv】【GPU】python/C调用onnx模型【基础】 提示:博主取舍了很多大佬的博文并亲测有效,分享笔记邀大家共同学习讨论 文章目录 【深度学习】【Opencv】【GPU】python/C调用onnx模型【基础】前言Python版本OpenCVWindows平台安装OpenCVopencv调用onnx模型 C版本…

视频怎么压缩?视频太大这样处理变小

在当今时代,视频已经成为了我们日常生活中不可或缺的一部分,然而,视频文件往往非常大,给我们的存储和传输带来了很大的不便,那么,如何有效地压缩视频呢? 一、使用压缩软件 首先我们给大家分享一…

免费下载IEEE标准的途径

工作需要,找出了一种方法 下载 访问ieeexplore,搜索待下载标准,如图 找到自己要下载的标准,点开链接,复制doi,如图 访问scihub,找1个可用连接,搜索doi,下载 查标准是否…

【机器学习】PyTorch-MNIST-手写字识别

文章目录 前言完成效果一、下载数据集手动下载代码下载MNIST数据集: 二、 展示图片三、DataLoader数据加载器四、搭建神经网络五、 训练和测试第一次运行: 六、优化模型第二次优化后运行: 七、完整代码八、手写板实现输入识别功能 前言 注意…

Cesium Vue(一)— 项目初始化配置

1. 创建VUE项目工程 创建项目 vue create cesium-vue配置Vue3 2. 创建vue.config.js文件 const { defineConfig } require(vue/cli-service)// The path to the CesiumJS source code const cesiumSource node_modules/cesium/Source; const cesiumWorkers ../Build/C…