有没有办法直接在Excel工作表上插入用户表单?
我们可以添加内置控件以及活动x控件。我不明白为什么我们不能在同一个工作簿中添加用户表单。
由于
答案 0 :(得分:2)
不,我不认为这是可能的。
Userforms只是容纳ActiveX控件的容器。电子表格也是ActiveX控件容器,所以我不确定容器中容器的好处是什么。
您可以轻松地将一组单元格着色为看起来像用户窗体,并将ActiveX控件放在该范围内。这将模拟电子表格中嵌入的用户表单。您将缺少用户表单级事件以及其他一些事情。但如果你想要那些东西,你可能只是使用用户形式。
如果您想要做的事我想失踪,请告诉我。
答案 1 :(得分:1)
将其放在WorkSheet模块中 VB:
Private Sub Worksheet_Activate() UserForm1.Show 结束子
答案 2 :(得分:1)
我意识到这是一个过时的帖子,以前可能没有此解决方案,但是您可以插入ActiveX控件元素并使用“ Microsoft Forms 2.0 Frame”来控制信息。
您还需要创建一个自定义类来处理按钮的按下,因为您不能像普通按钮一样将宏直接附加到它们上。
这是我的一个例子:
buttonEventHandler
DECLARE @array VARCHAR(100) = '1001, 3, 1003';
WITH
cte_n1 (n) AS (SELECT 1 FROM (VALUES (1),(1),(1),(1),(1),(1),(1),(1),(1),(1)) n (n)),
cte_n2 (n) AS (SELECT 1 FROM cte_n1 a CROSS JOIN cte_n1 b),
cte_Tally (n) AS (
SELECT TOP (LEN(@array))
ROW_NUMBER() OVER (ORDER BY (SELECT NULL))
FROM
cte_n2 a CROSS JOIN cte_n2 b
),
cte_starts AS (
SELECT
n = 1
UNION ALL
SELECT
t.n + 2
FROM
cte_Tally t
WHERE
SUBSTRING(@array, t.n, 2) = ', '
),
cte_split_array AS (
SELECT
s.n,
partnumber = CONVERT(INT, SUBSTRING(@array, s.n, LEAD(s.n, 1, 8002) OVER (ORDER BY s.n) - s.n - 2))
FROM
cte_starts s
)
SELECT
partnumber = ISNULL(bd.partnumber , 0)
FROM
cte_split_array sa
LEFT JOIN dbo.bindata bd
ON sa.partnumber = bd.partnumber
ORDER BY
sa.n;
xButton
Option Explicit
Public Sub Click(Sender As Integer)
End Sub
在Microsoft Excel对象中:thisWorkbook
Private WithEvents btn As MSForms.commandButton
Private bEventHandler As buttonEventHandler
Private b As Integer
Public Sub createObject(EventHandlerOf As MSForms.commandButton, EventHandler As buttonEventHandler, xB As Integer)
Set btn = EventHandlerOf
Set bEventHandler = EventHandler
b = xB
End Sub
Private Sub btn_Click()
If Not bEventHandler Is Nothing Then bEventHandler.Click (b)
End Sub
答案 3 :(得分:0)
您可以将MyForm.Show代码放在Workbook.Open事件上,以便在您打开文件时启动表单...我已经完成了。您甚至可以选择放置表单的位置。
你的愿望,如果可能的话(我非常肯定它不是),可以触发并发的VB代码:例如自动计算单元格和表单代码。这是一个问题,因为XL是单个VBA线程,因此不可能发生两件事。表单正在显示,它的代码正在运行,或XL应用程序正在运行并正在执行单元格/图形/等东西。