金乡网站建设,沈阳app开发公司哪家好,网站整体排名大幅下降,南京建设局的网站在Word中的使用用户窗体#xff08;UserForm#xff09;定制界面如下图所示#xff0c;其中控件如下#xff08;忽略Label控件#xff09;#xff1a;
CompanyName 组合框Attention 组合框CommandButton1 按钮 现在需要实现级联组合框效果#xff0c;即用户在 CompanyN…在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行代码关闭窗体。