将用户表单直接放在excel工作表上

将用户表单直接放在excel工作表上,excel,vba,Excel,Vba,有没有办法直接在excel工作表上插入用户表单 我们可以添加内置控件以及活动的x控件。我不明白为什么我们不能在同一工作簿中添加用户表单 谢谢不,我认为不可能 Userforms只是保存ActiveX控件的容器。电子表格也是ActiveX控件容器,所以我不确定在容器中放置容器会有什么好处 您可以轻松地将一组单元格着色为用户窗体,并将ActiveX控件置于该范围内。这将模拟嵌入电子表格中的用户表单。您将丢失用户表单级别的事件,可能还有其他一些事情。但是如果你想要这些东西,你可能只需要使用一个user

有没有办法直接在excel工作表上插入用户表单

我们可以添加内置控件以及活动的x控件。我不明白为什么我们不能在同一工作簿中添加用户表单


谢谢

不,我认为不可能

Userforms只是保存ActiveX控件的容器。电子表格也是ActiveX控件容器,所以我不确定在容器中放置容器会有什么好处

您可以轻松地将一组单元格着色为用户窗体,并将ActiveX控件置于该范围内。这将模拟嵌入电子表格中的用户表单。您将丢失用户表单级别的事件,可能还有其他一些事情。但是如果你想要这些东西,你可能只需要使用一个userform


如果您想做的事情我遗漏了,请告诉我。

您可以将MyForm.Show代码放在工作簿上。打开事件可在每次打开文件时启动表单。。。我已经做到了。您甚至可以选择放置表单的位置


如果可能的话(我很肯定不是),你的愿望可能会触发并发VB代码:例如自动计算单元格和表单代码。这是一个问题,因为XL是单个VBA线程,因此不可能有两种情况发生。表单正在显示,其代码正在运行,或者XL应用程序正在运行,正在执行单元格/图形等操作。

将其放入工作表模块中 VB:

专用子工作表_Activate() UserForm1.Show
End Sub

我意识到这是一篇旧文章,这个解决方案在过去可能不可用,但您可以插入ActiveX控件元素并使用“Microsoft Forms 2.0框架”来控制信息

您还需要创建一个自定义类来处理按钮按下,因为您不能像普通按钮那样将宏直接附加到按钮上

以下是我的一个例子:

按钮手柄

Option Explicit

Public Sub Click(Sender As Integer)

End Sub
xButton

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
在Microsoft Excel对象中:此工作簿

Public Sub buttonEventHandler_Click(Sender As Integer)
Select Case Sender
Case 1
    'Do Stuff
End Select
End Sub

Private Sub workbook_open()
Sheet1.Frame1.Activate
Set xbtn = New Collection
Dim o As Object

Dim xB As New XButton
xB.createObject Sheet1.Frame1.Controls("excelCommandButton"), ThisWorkbook, 1
xbtn.Add xB
Set xB = Nothing
End Sub

谢谢你的信息。我觉得情况就是这样。让用户点击一个按钮来打开用户表单感觉非常多余。在利益方面,我相信这将使我们的生活更轻松!我不把用户表单看作一个容器,而是一个自我调节的控件。因此,它可能直接属于电子表格。@rushui,请看我的答案,无需单击按钮即可打开表单。@rushui如您所述,您可以将表单控件直接添加到工作表中并为其编码。将它们设置在图纸的一个部分中,甚至分组并格式化以保持原位。这将做你想做的一切。