【问题标题】:Is there a way to programatically add Form Controls?有没有办法以编程方式添加表单控件?
【发布时间】:2017-01-09 05:45:19
【问题描述】:

我正在处理带有表单控件的电子表格,该控件打开用于数据输入目的的用户表单。表单的提交按钮填充一行单元格,并在该行的最后两个单元格上添加两个按钮。它将插入与用户一样多的行,并且每次创建两个新按钮时都会使用它们自己的不同名称。但是,这些是 ActiveX 控件,一旦同事打开文件并尝试在他们的笔记本电脑上使用,它们就会给我带来与其他 Windows/Office 版本的兼容性问题。

这是我用来在电子表格上添加一个命令按钮的代码(另一个按钮基本相同,只是变量不同):

Dim i As Long, Hght As Long
Dim Name As String, NName As String


i = 0
Hght = 305.25

NName = "cmdAction" & i

For Each OLEObject In ActiveSheet.OLEObjects
    If Left(OLEObject.Name, 9) = "cmdAction" Then
        Name = Right(OLEObject.Name, Len(OLEObject.Name) - 9)
        If Name >= i Then
            i = Name + 1
        End If
        NName = "cmdAction" & i
        Hght = Hght + 27
    End If
Next
  Dim UpdateEntry As OLEObject, N%

Set UpdateEntry = ActiveSheet.OLEObjects.Add(ClassType:="Forms.CommandButton.1", Link:=False _
    , DisplayAsIcon:=False, Left:=Selection.Offset(0, 23).Left, Top:=Selection.Offset(0, 23).Top, Width:=72, Height _
    :=24)


UpdateEntry.Name = NName     
UpdateEntry.Object.Caption = "Edit Entry"
With ThisWorkbook.VBProject.VBComponents(ActiveSheet.CodeName).CodeModule
    N = .CountOfLines
.InsertLines N + 1, "Private Sub " & NName & "_Click()"
.InsertLines N + 2, vbTab & "Code for button goes here"
.InsertLines N + 3, vbTab & "End Sub"
End With

我想知道是否可以做同样的事情,但是创建的按钮是表单控件而不是 ActiveX?

显示的错误是运行时错误 32809:应用程序定义或对象定义错误。经过广泛的研究,我发现这是由于一旦不同版本的 Windows 更改了工作表,工作表就会损坏。修复它的唯一方法是创建一个新工作表,将所有内容复制到新工作表,删除损坏的工作表并将新工作表重命名为以前的名称。这可行,但无法复制 ActiveX 控件,因为它们将被重命名并且相应的代码不会在其中,但是用于打开用户窗体的电子表格上的表单控件可以正常工作,这就是为什么我认为我唯一的解决方案是将所有 ActiveX 更改为表单控件。

不胜感激。

【问题讨论】:

  • 从来没有专门做过这样的事情,但是这个链接有用吗? link 看起来你需要对象。添加
  • 这听起来像是一个开始,我可以进一步研究一下,非常感谢。

标签: vba excel activex controls


【解决方案1】:

不要使用 ActiveX 按钮,而是使用 Shapes 并设置 Shape.OnAction 属性来调用通常放置在 ActiveX 按钮后面的宏。在宏中,您可以使用 Application.Caller 来获取被点击的形状的名称,从而让您知道点击了哪个按钮并相应地分支您的代码。

【讨论】:

  • 感谢您的回复,形状是否会像表单控件一样链接到单元格?如果我选择整个工作表来复制它,表单控件也会被复制,但 ActiveX 不会被复制。形状也会被单元格复制吗?
  • 是的,形状会被复制。
猜你喜欢
  • 2016-02-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多