2012-04-05 342 views
5

我在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

回答

0

#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

0

嘗試增加這代碼

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

它不會產生溢出然後

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 

希望這有助於小號!