首页 > 解决方案 > 使用户表单看起来好像在 Excel 工作表中而不是单独的

问题描述

我希望我的用户表单看起来好像它实际上是 Excel 工作表的一部分,而不是 Excel 工作簿的单独窗口。我无法使用实际位于工作表中的 ActiveX 控件,因为我需要为我的 ComboBoxes 指定一个 RawSource,这在 ActiveX 版本下不是一个选项。有没有一种方法可以让我的用户窗体看起来就像它在工作表中一样,就像我使用 ActiveX 控件时一样?

标签: excelvbaactivexuserform

解决方案


您不能使用户窗体出现在工作表“内”。

我不知道你的要求背后的想法。如果您希望能够同时使用表单和工作表,您可以显示您的表单 Non-Modal ( userform1.show False)

但是,您可以使用 ActiveX 控件。您可以从 VBA 访问这些控件并将 rowSource(属性名为ListFillRange)设置为 Range,或者您可以单独设置项目(但是您不能混合使用)。

设置为范围:

Dim ctrl As OLEObject
Set ctrl = ThisWorkbook.Worksheets(1).OLEObjects("ComboBox1")
ctrl.ListFillRange = "A2:A10"

设置为单个项目列表:

with ctrl
    .ListFillRange = ""    ' Make sure that ListFillRange  is empty
    With .object           ' "Object" is the real ComboBox object
        .clear
        .AddItem "Cheese"
        .AddItem "Tomato"
        .AddItem "Onion"
        .AddItem "Ham"
        .AddItem "Olives"
        
        .Value = "Onion"
    End With
End With

如果你愿意,你也可以写

Sheet1.ComboBox1.ListFillRange = "A2:A10"

或者

Sheet1.ComboBox1.Clear
Sheet1.ComboBox1.AddItem "Hello"

这假定工作表的代码名称是Sheet1- 代码名称在 VBA 项目视图中可见,并且可能与工作表名称不同。


推荐阅读