奇怪的Excel VBA错误“expression太复杂”-1。#IND

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" 。 我search了这个价值,并发现它意味着interdeterminate。 btnA.Top大约是11,500,所以这不是一个溢出问题。 这个问题似乎没有韵或理由。 在VB和VBA编程16年来,我从来没有见过或听说过这样的事情。 感谢任何帮助/见解。

编辑完整代码:

 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 

我知道这可能看起来很疯狂,但也许参考基于工作表的button…也许有一些东西只是在另一台机器上足够的loopy,它正在一张没有button的工作表上看,所以会产生这个那种错误…

 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 

希望这可以帮助!!

#IND是一个NaN(非数字),它是一个数字数据types的值,表示一个未定义/不可表示的值。 在浮点计算中,窗口显示为-1。#IND(indeterminate)。

为了得到它,我相信你必须做的事情是这样的:

 Dim d As Double On Error Resume Next d = 0 / 0 On Error GoTo 0 

如果你有任何error handling,然后删除它来testing的问题。 您也可能遇到某种错误。 因此,对于像您这样的问题,可能很难在没有看到工作簿本身的情况下进行诊断,您可以将其上传到www.ozgrid.com/forum,以便我们可以testing自己。

尝试添加到代码

 Private Sub Worksheet_SelectionChange(ByVal Target As Range) application.EnableEvents = False ''''your code here application.EnableEvents = True End Sub 

它不会产生溢出