excel - 使用单元格下拉列表中的值填充 vba ComboBox
问题描述
我想用在特定单元格中找到的下拉值填充组合框,比如 C10。
C10 使用 Excel 的数据验证功能将可输入单元格的值限制为下拉列表。我想使用这个列表来填充 vba userForm 中的组合框。
目前我的方法是使用:
Range("C10").Validation.Formula1
这是可以返回的 3 个任意示例:
- “=制作”
- "=INDIRECT(C9 & "_MK")"
- “0;1;2;3;4;5;6;7;8;9;10”
我的方法是对此进行评估并尝试将其形成一个可用范围,该范围可用于设置我的组合框的 RowSource 属性。但是,我无法解释所有可以退回的可行案例。
当然,有一种简短而简单的方法可以实现我想要的,而无需为每种情况编写异常代码。
这样做的正确方法是什么?
解决方案
但是,我无法解释所有可以退回的可行案例。
您将不得不单独考虑它。没有直接的方法来获得这些值。
这是我编写的一个快速代码GetDVList()
,它将处理您的所有 3 个场景。
下面的代码将在一个数组中返回数据验证列表的值,您可以从中填充组合框。我已经对代码进行了注释,因此您理解它应该没有问题,但是如果您这样做了,那么只需询问即可。
这是你正在尝试的吗?
Option Explicit
Sub Sample()
Dim rng As Range
Dim i As Long
Dim cmbArray As Variant
'~~> Change this to the relevant sheet and range
Set rng = Sheet1.Range("A1")
'~~> Check if range has data validation
On Error Resume Next
i = rng.SpecialCells(xlCellTypeSameValidation).Count
On Error GoTo 0
'~~> If no validation found then exit sub
If i = 0 Then
MsgBox "No validation found"
Exit Sub
End If
'~~> The array of values
cmbArray = GetDVList(rng)
'~~> You can transfer these values to Combobox
For i = LBound(cmbArray) To UBound(cmbArray)
Debug.Print cmbArray(i)
Next i
End Sub
Function GetDVList(rng As Range) As Variant
Dim tmpArray As Variant
Dim i As Long, rw As Long
Dim dvFormula As String
dvFormula = rng.Validation.Formula1
'~~> "=Makes"
'~~> "=INDIRECT(C9 &_MK)"
If Left(dvFormula, 1) = "=" Then
dvFormula = Mid(dvFormula, 2)
rw = Range(dvFormula).rows.Count
ReDim tmpArray(1 To rw)
For i = 1 To rw
tmpArray(i) = Range(dvFormula).Cells(i, 1)
Next i
'~~> "0;1;2;3;4;5;6;7;8;9;10"
Else
tmpArray = Split(dvFormula, ",") '~~> Use ; instead of , if required
End If
GetDVList = tmpArray
End Function
推荐阅读
- vba - VBA - 比较两个文件的布局
- reactjs - 使用 Gatsby/Contentful 从 Graphql 获取参考数据
- php - 如何在 apache2 (ubuntu 18.04) 中启用 .htaccess
- html - 如何将图像从容器“拉伸”到屏幕右侧?
- c# - IfcFile 中所有不同 IfcEntities 的列表
- vue.js - 这段代码中的两个问号是什么:`options?:?Object`,vue.js的源码,在src\core\observer\watcher.js
- javascript - 我如何编写一个在浏览器控制台中显示路径的函数
- javascript - 使用效果仅在状态变为 false 时运行
- docusignapi - 是否可以从 docusign 中的 prefillTabs 组中预填充选项卡的值?
- leaflet - 无法读取 null 的属性“getLatLng”(传单路由)