VBA Combobox 和 Listbox 通用父类(super class)

标签 vba excel

我正在尝试为 excel-VBA 创建一个函数。该函数用于计算某个字符串在组合框或列表框中的索引。我希望该函数具有以下签名:

Public Function MyIndexOf(list As ???, str As String) As Integer

我的问题是 Combobox 和 Listbox 是否有一个共同的父类(super class),所以我可以替换???与一些类。

也许还有另一种做 IndexOf 的方法。欢迎提出建议,但我希望它在一个共同的单独功能中完成。

有人对如何解决这个问题有建议吗?

提前致谢
/帕特里克

最佳答案

VBA(或VB 6)中没有继承,所以不幸的是没有父类(super class)这样的东西。

但是,您确实受益于非常松散的打字。您可以将变量声明为 Variant ,这是一种通用数据类型,可以保存任何类型的值,包括控件。通常,您应该尽量避免使用 Variant尽可能输入,但在这种情况下,您别无选择。

所以你可以像这样声明你的函数:

Public Function MyIndexOf(list As Variant, str As String) As Integer
    ' Do work here...
End Function

当然,请记住 Variant数据类型实际上可以保存任何类型的值,并且直到运行时才知道类型,一个好的防御性程序员会检查以确保指定的类型不是 IntegerString甚至是不公开与 ComboBox 相同的公共(public)成员的控件或 ListBox控制(从而破坏您编写的期望代码)。

您可以确定 Variant 的实际类型在运行时使用 TypeName功能。所以你可以简单地修改上面的函数来包含一个保护子句来保护除 ComboBox 之外的任何东西。或 ListBox传入控制:
Public Function MyIndexOf(list As Variant, str As String) As Integer
    If (Not TypeName(list) = "ComboBox") And (Not TypeName(list) = "ListBox") Then
        MsgBox "Wrong type of list variable was specified."
    Else
        ' Do work here...
    End If
End Function

关于VBA Combobox 和 Listbox 通用父类(super class),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4688707/

相关文章:

vba - 以编程方式将字体格式应用于 PowerPoint 文本

Excel VBA 将日期从一个工作簿复制到另一个工作簿需要很长时间

excel - 如何为 Dimmed 变量建立第三个变量

python - 从多个 Excel 文件创建 Pandas 数据框

mysql - SUM 前 5 个数字中的第二大和第三大数字

vba粘贴不起作用

vb.net - 如何在 Visual Basic 应用程序中打开 "Windows Search"?

python - excel 的 csv 文件上的 UTF-/编码问题

excel - 如何让 VBA 函数存储单元格地址值而不是这些单元格地址处的值

vba - 需要一个简单的搜索功能来显示列中最常见的值。 (有模棱两可的选择)