【发布时间】: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