我创建了一个带有几个activeX元素的excelfile。到目前为止,该文件已按预期工作,现在我正在解决在日常业务过程中可能发生的“用户错误”。对于以后使用activeX元素(Toggle,Command和SpinButtons)非常重要,因此我创建了一些子来还原每个元素。他们正在按预期方式工作。
问题:现在,如果有人删除按钮怎么办?我尝试使用If-Statements(如果> element <则什么也没有...),但是没有用。下一种方法是“出错时转到”。因此,我建立了一个ErrorHandler,并作为常规代码按预期工作。处理程序使用所需名称创建一个SpinButton。如果我在代码中生成错误(a = 1/0),则处理程序正在执行其工作,但这只是“体外”。
在体内,如果我所需的> element <不存在,我的代码将以错误结尾(未找到编译error_方法或对象),但是我的处理程序不执行任何操作,尽管这是其唯一目的。
我的代码:
Sub Cal_SpinButton_Nr()
Subroutine:
On Error GoTo CreateObject:
With Tabelle5.SpinButton_Nr
.Left = 198
.Height = 65.25
.Top = 1.5
.Width = 54.75
.Orientation = fmOrientationVertical
.BackColor = &H8000000F
.ForeColor = &H80000012
End With
Exit Sub
CreateObject:
Tabelle5.OLEObjects.Add("Forms.SpinButton.1").Name = "SpinButton_Nr2"
'Resume Subroutine
End Sub
Option Explicit已打开,并且子项不包含变量。只要有一个对象(SpinButton_Nr),它就可以工作。没有对象,我得到一个编译错误。
现在,“ Resume Subroutine”(恢复子例程)已被静音,以避免无休止的循环(我通过先使“ exit sub”(沉默子)静音,然后按F5 ...来吸取教训),常规功能是再次触发相同的sub以便将新对象放入正确的地方。出于(“体外”)测试的原因,新对象称为_Nr2,后来称为_Nr。
现在的问题是:为什么“出错时”声明未涵盖编译错误?如何修改代码以使其正常工作?
语法应为“如果> element <存在,则设置属性,如果<element>
不存在,则创建它并随后设置属性。
我建议以下内容:
因此,在开始格式化之前,您实际上要测试旋转按钮是否存在(如果不创建的话)。在您的过程中,没有奇怪的错误处理和goto跳转。
Option Explicit
Sub Cal_SpinButton_Nr()
Dim ws As Worksheet
Set ws = ThisWorkbook.Worksheets("Tabelle5") '<-- tab name
'OR
'Set ws = Tabelle5 '<-- VBA code name
Dim SpinBtn As Object
On Error Resume Next 'next line errors if no spinbutton exists
Set SpinBtn = ws.OLEObjects("SpinButton_Nr")
On Error Goto 0 'always re-activate error reporting!
'if no spinbutton is found create it before formatting starts
If SpinBtn Is Nothing Then
Set SpinBtn = ws.OLEObjects.Add("Forms.SpinButton.1")
SpinBtn.Name = "SpinButton_Nr"
End If
'format spin button
With SpinBtn
.Left = 198
.Height = 65.25
.Top = 1.5
.Width = 54.75
'not that for these .Object is necessary because of using .OLEObjects("SpinButton_Nr")
.Object.Orientation = fmOrientationVertical
.Object.BackColor = &H8000000F
.Object.ForeColor = &H80000012
End With
End Sub
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句