gpt4 book ai didi

vba - 引用ActiveX控件: Run-time Error 438时,VBA错误处理程序的 “For Each __ in __”失败

转载 作者:行者123 更新时间:2023-12-03 07:54:02 24 4
gpt4 key购买 nike

我有一个充满ActiveX控件的工作表。我知道他们在工作表上有错误,所以这是我实现的用于重置控件并保持其行为受控的功能。

问题在于,错误处理程序无法捕获由于尝试访问ListBox的auto-size属性而发生的运行时错误438(列表框没有auto-size属性,因此run-时间438错误)。

    Public Sub RefreshCtrlSheet(Optional ByRef HiddenElements As Variant)

'This sub refreshes ActiveX Objects on the Ctrl Sheet
Dim objX As Object 'Holds OLEObjects from Control Sheet
Dim tempWidth As Double 'Store size of object to restore
Dim tempHeight As Double 'after resetting
Dim tempLeft As Double
Dim tempTop As Double
Dim i As Integer

With Sheet1

'Error Handler
On Error GoTo NotTheObjsUrLooking4

For Each objX In .OLEObjects

'If Name has Button in it
If InStr(objX.Name, "Button") > 0 Then

'Implement different button sizes
If objX.Name = "LoadDataButton" Then
tempHeight = 24.75
tempWidth = 24.75
Else
tempHeight = 30
tempWidth = 80
End If

Else
tempHeight = objX.Height
tempWidth = objX.Width
End If

'Check to see if elements should be hidden
If Not IsMissing(HiddenElements) Then
For i = 1 To UBound(HiddenElements)
If InStr(objX.Name, HiddenElements(i)) Then
objX.Visible = False
End If
Next i
End If

tempLeft = objX.Left
tempTop = objX.Top

'Autosize to refresh shingking controls (ActiveX Bug)
objX.object.AutoSize = True '----------------------RUNTIME ERROR HERE!
objX.object.AutoSize = False
objX.Width = tempWidth
objX.Height = tempHeight
objX.Left = tempLeft
objX.Top = tempTop

NotTheObjsUrLooking4: '----------------------------THIS WORKS EVERY OTHER ERROR
Next objX

On Error GoTo 0
End With
End Sub

当我添加一个新的ActiveX ListBox时,它开始出现问题,这很奇怪,因为我已经有了另一个,从未出现过问题。

感谢任何人都能提供的帮助!

编辑:

谢谢Mat就是这样。

新代码适用于:
...
'Error Handler
On Error GoTo CleanFail
...

'Other code

...
NotTheObjsUrLooking4:
Next objX
End With
On Error GoTo 0
Exit Sub

CleanFail:
Err.Clear
Resume NotTheObjsUrLooking4
End Sub

最佳答案

这不是VBA中错误处理的工作方式。

是的,这是一个跳转,但这是一个错误处理子例程的跳转。 NotTheObjsUrLooking4不是子例程,它只是“继续”标签,是控制流/逻辑的一部分。

制作一个CleanFail标签:

    ...
Exit Sub

CleanFail:
Err.Clear
Resume NotTheObjsUrLooking4
End Sub

然后调整您的 On Error语句,改为跳转到 CleanFail:
    On Error GoTo CleanFail

这将使执行跳出循环并进入该错误处理子例程,该例程清除错误并基本上说这些不是您要查找的droids对象...并继续进行下一次迭代。

删除 On Error GoTo 0,不需要它。

关于vba - 引用ActiveX控件: Run-time Error 438时,VBA错误处理程序的 “For Each __ in __”失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36777419/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com