我在Worksheet_SelectionChange
事件中有一些非常基本和简单的VBA代码,如下所示:
btnB.Top = btnA.Top + btnA.Height
它在我的计算机上运行良好,但它偶尔会在我同事的计算机上运行。似乎工作表中的5次点击中有3次会产生"Expression Too Complex"
错误。另外2个工作没有抛出错误。我试过了:
Dim D as Double:D = btnA.Top + btnA.Height
btnB.Top = D
同样的事情,有时会起作用,有时会抛出错误。当错误发生时,我打破了并检查了D
"-1.#IND"
的值。我搜索了这个价值并发现它意味着相互间接。 btnA.Top
约为11,500,所以这不是溢出问题。这个问题似乎没有押韵或理由。在16年的VB和VBA编程中,我从未见过或听说过这样的东西。感谢您的帮助/见解。
编辑完整代码:
Sub LineUpBtns()
CommandButton2.Top = CommandButton1.Top + CommandButton1.Height
CommandButton3.Top = CommandButton2.Top + CommandButton2.Height
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
LineUpBtns
End Sub
答案 0 :(得分:1)
我知道这可能看起来很疯狂,但也许可以根据工作表参考按钮...也许在其他机器上有一些东西只是循环,它正在一张没有按钮的工作表上查看会产生这种错误...
Sub LineUpBtns()
Sheets("Sheet1").Shapes("CommandButton2").Top = Sheets("Sheet1").Shapes("CommandButton1").Top + Sheets("Sheet1").Shapes("CommandButton1").Height
Sheets("Sheet1").Shapes("CommandButton3").Top = Sheets("Sheet1").Shapes("CommandButton2").Top + Sheets("Sheet1").Shapes("CommandButton2").Height
End Sub
希望这会有所帮助!!
答案 1 :(得分:0)
#IND
是NaN(非数字),它是表示未定义/不可表示值的数值数据类型的值。在您声明的浮点计算中,Windows将其显示为-1。#IND(不确定)。
为了得到它,我相信你必须做类似的事情:
Dim d As Double
On Error Resume Next
d = 0 / 0
On Error GoTo 0
如果您有任何错误处理,请将其删除以测试问题。你也可能遇到某种错误。因此,对于像你这样的问题,如果没有看到工作簿本身就很难诊断,你可以将它上传到www.ozgrid.com/forum,这样我们就可以自己测试了。
答案 2 :(得分:0)
尝试将其添加到代码
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
application.EnableEvents = False
''''your code here
application.EnableEvents = True
End Sub
它不会产生溢出然后