奇怪的Excel的VBA错误“表达式太复杂” -1#IND

问题描述:

我在Worksheet_SelectionChange事件像下面的一些非常基本的和简单的VBA代码:奇怪的Excel的VBA错误“表达式太复杂” -1#IND

btnB.Top = btnA.Top + btnA.Height 

它运行罚款我的电脑上,但它的工作原理零星地在我的同事的电脑上。似乎在表格周围出现5次点击中的3次会产生"Expression Too Complex"错误。另外两个工作没有抛出错误。我试过了:

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

你怎么能指定一个双btnB.Top? – 2012-04-05 20:52:04

+0

因为它是双重的。 TypeName(btnB.Top)=双重 – DontFretBrett 2012-04-05 22:32:18

+0

什么是btnA,btnB?某些类型的对象似乎有一个.Top属性,它是一个Single而不是Double。编辑:没关系 - 刚才在你的评论中回答。 – 2012-04-05 22:35:35

#IND为NaN(不是数字),它是数字数据类型的值,该值代表一个未定义的/不可表示的值。在您指定的浮点计算中,windows将其显示为-1。#IND(indeterminate)。

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

Dim d As Double 

On Error Resume Next 
d = 0/0 
On Error GoTo 0 

如果你有那么任何错误处理删除它来测试问题。您也可能遇到某种错误。因此,对于像您这样的问题,如果没有看到工作簿本身就很难进行诊断,您可以将其上传到www.ozgrid.com/forum,以便我们测试自己。

+0

我没有错误处理的子。即使当我添加错误处理(如错误继续下一个),它仍然会抛出错误。听起来像一个错误。我无法上传工作簿(公司政策),但它可能无济于事,因为代码在我的计算机和我尝试过的其他人中完美无缺。这是超简单的代码。没有错误。我认为它一定是一个错误 – DontFretBrett 2012-04-09 17:27:43

+0

我不认为我们可以帮助你,你根本没有给我们所需的信息。您至少可以发布整个selection_change事件。 – Reafidy 2012-04-09 23:17:02

+0

Bud,它的操作非常简单... Worksheet_SelectionChange(Target as Range):btnB.Top = btnA.Top + BtnA.Height:btnC.Top = btnB.Top + btnB.Height:End Sub。不是开玩笑,我不会夸大简单。我无法上传整个工作簿,但它无论如何不会有所作为。我知道你觉得我正在丢掉一些东西,因为它没有任何意义。这就是问题所在,它没有任何意义,我不知道为什么它可以在除一台之外的所有计算机上运行。 – DontFretBrett 2012-04-10 04:12:14

尝试增加这代码

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

它不会产生溢出然后

我知道这看起来疯狂,但也许引用根据工作表后的按钮...也许有什么东西刚刚够在另一台机器上的多圈,它正在寻求在不具备上的按钮,这样会产生这种错误的表...

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 

希望这有助于小号!