Word窗体联动Excel实现级联组合框

news/2024/12/26 8:51:12/

在Word中的使用用户窗体UserForm)定制界面如下图所示,其中控件如下(忽略Label控件):

  • CompanyName 组合框
  • Attention 组合框
  • CommandButton1 按钮

在这里插入图片描述

现在需要实现级联组合框效果,即用户在 CompanyName 组合框中选中如何一个Company,第二个组合框(Attention)加载相应对应的内容,其数据来自于Excel文件(FileLink.xlsx)中的数据表,如下图所示。

在这里插入图片描述

Dim arrData As Variant
Sub LoadData()Dim xlApp As Object, xlBook As Object, isNewApp As BooleanOn Error Resume NextSet xlApp = GetObject(, "Excel.Application")If Err ThenSet xlApp = CreateObject("Excel.Application")isNewApp = TrueEnd IfOn Error GoTo 0Dim sPath As String: sPath = ThisDocument.Path & "\"Set xlBook = xlApp.Workbooks.Open(sPath & "FileLink.xlsx")arrData = xlBook.sheets(1).usedrange.ValuexlBook.Close FalseIf isNewApp Then xlApp.Quit
End Sub
Private Sub UserForm_Initialize()Call LoadDataDim arr(), i As LongReDim arr(1 To UBound(arrData) - 1)For i = 2 To UBound(arrData)arr(i - 1) = arrData(i, 1)NextMe.CompanyName.List = arr
End Sub
Private Sub CompanyName_Change()Me.Attention.ClearDim sComName As String: sComName = Me.CompanyName.ValueDim i As Long, j As Long, r As Long, arr()ReDim arr(1 To UBound(arrData, 2) - 1)For i = 2 To UBound(arrData)If sComName = arrData(i, 1) ThenFor j = 2 To UBound(arrData, 2)If Len(arrData(i, j)) = 0 ThenExit ForElser = r + 1arr(r) = arrData(i, j)End IfNextIf r > 0 ThenReDim Preserve arr(1 To r)Me.Attention.List = arrEnd IfEnd IfNext
End Sub
Private Sub CommandButton1_Click()Unload Me
End Sub

第1行代码声明模块级别变量,用于保存Excel的数据表。
如果用户每次改变CompanyName组合框,都运行代码打开Excel读取数据表,再更新Attention控件的下拉列表,创建Excel应用程序并打开Excel文件将消耗较多时间,程序可能会因此而出现卡顿。
第3~17行代码将Excel数据表加载到数组中,后续代码可用直接读取内存数组中的数据,这样可用使得程序代码的效率更高。
第5行代码忽略系统错误。
第6行代码获取Excel应用程序,如果用户没有打开Excel,那么此行代码将产生运行时错误。
第7行代码判断是否产生了运行时错误。
第8行代码创建新的Excel应用程序实例。
第9行代码设置标志变量,指明Excel应用程序为新建实例。
第12行代码获取当前文档的目录。
第13行代码打开同一目录中的Excel文件FileLink.xlsx。
第14行代码将第一个工作表中的数据表加载到数组中。
第15行代码关闭Excel文件。
对于第8行代码新建的Excel应用程序,第16行代码将关闭Excel应用程序。
第18~26行代码为UserForm的初始化事件代码。
第19行代码调用LoadData加载数据到数组中。
第21行代码为动态数组arr分配空间。
第22~24行代码将Company列表读取到数组中。
第25行代码设置CompanyName组合框的下拉列表。
第27~48行代码为CompanyName组合框的Change事件代码。
第28行代码清空Attention组合框下拉列表。
第29行代码读取CompanyName组合框的值(用户选中的Company)。
第31行代码为动态数组arr分配空间。
第32~47行代码循环遍历arrData数组。
第33行代码判断Company是否匹配。
第34~41行代码将对应于指定Company的数据行加载到数组arr中。
第35行代码判断单元格内容是否为空。
如果为空,第36行代码代码退出For循环,否则,第39行代码将单元格内容添加到数组arr中。
第43行代码重新分配数组arr的内存,去除数组末尾可能存在的空值,否则第二个组合框下拉列表中将出现空值。
第44行代码更新Attention组合框下拉列表。
第49~51行代码为CommandButton1按钮控件的Click事件代码。
第50行代码关闭窗体。


http://www.ppmy.cn/news/1558223.html

相关文章

【git】将项目上传到github、gitee

【git】将项目上传到github、gitee 一、创建本地仓库 1、初始化本地仓库 进入文件夹,在命令行输入: git init这个命令会在文件夹中同时创建gitignore文件。 2、把文件添加到暂存区中 在命令行输入: git add .将当前文件夹下的所有内容…

我的 2024 年终总结

2024 年,我离开了待了两年的互联网公司,来到了一家聚焦教育机器人和激光切割机的公司,没错,是一家硬件公司,从未接触过的领域,但这还不是我今年最重要的里程碑事件 5 月份的时候,正式提出了离职…

最近常用linux、docker命令总结

最近常用linux、docker命令总结 1.ss -ulwn2.lsof -i :80803. ps aux | grep php4.docker stats5.docker inspect milvusapi6.docker ps --format "{{.Names}}: {{.Command}}" --no-trunc 1.ss -ulwn 基本含义 ss:全称是 Socket Statistics,用…

信息系统项目管理-绩效考核题目2

关于绩效评估的描述,错误的是() A绩效评估以员工发展为第一目标,全面了解员工的发展潜力 B绩效评估由人力资源部门负责牵头组织、协调,相关部门予以配合 C绩效评估是绩效治理整个周期性循环过程中技术性最强的一个环节…

element-plus在Vue3中开发相关知识

报错&#xff1a;error.mjs:20 ElementPlusError: [ElForm] model is required for resetFields to work. 原因&#xff1a;el-form使用v-model没有把内容绑定上&#xff0c;需要使用 :model 才可以校验 将&#xff1a; <el-form label-width"auto" class"…

Pinpoint 是一个开源的分布式追踪系统

pinpointagent2.2.2.tar 是 Pinpoint 的一个版本&#xff0c;Pinpoint 是一个开源的分布式追踪系统&#xff0c;专门用于对 Java 应用程序进行性能监控、日志记录和故障诊断。它可以帮助开发人员和运维人员追踪和分析微服务架构中服务之间的调用链&#xff0c;并进行性能分析。…

MySQL中Performance Schema库的详解(上)

使用Performance Schema 将通过一些示例来演示如何使用Performance Schema解决常见的故障案例。 检查SQL语句 要启用语句检测&#xff0c;需要启用statement类型的插桩&#xff0c;如表1所述 ​ 表1&#xff1a;statement类型的插桩及其描述 插装类描述statement/spSQL语句…

WebRTC服务质量(10)- Pacer机制(02) RoundRobinPacketQueue

WebRTC服务质量&#xff08;01&#xff09;- Qos概述 WebRTC服务质量&#xff08;02&#xff09;- RTP协议 WebRTC服务质量&#xff08;03&#xff09;- RTCP协议 WebRTC服务质量&#xff08;04&#xff09;- 重传机制&#xff08;01) RTX NACK概述 WebRTC服务质量&#xff08;…