2012-04-05 13 views
5

Ho qualche codice molto semplice e base VBA in caso Worksheet_SelectionChange come la seguente:.Strano Excel VBA errore "Espressione troppo complessa" -1 # IND

btnB.Top = btnA.Top + btnA.Height 

Funziona bene sul mio computer, ma funziona sporadicamente sul computer del mio collega. Sembra che 3 su 5 clic sul foglio generino l'errore "Expression Too Complex". Gli altri 2 funzionano senza generare un errore. Ho provato:

Dim D as Double:D = btnA.Top + btnA.Height 
btnB.Top = D 

E la stessa cosa, funziona a volte, a volte genera l'errore. Quando si è verificato l'errore, ho rotto e controllato il valore di D che era "-1.#IND". Ho cercato su Google quel valore e l'ho scoperto significa che è interdeterminato. btnA.Top è circa 11.500 quindi non è un problema di overflow. Non sembra esserci alcuna rima o ragione a questo problema. In 16 anni di programmazione VB e VBA, non ho mai visto o sentito nulla di simile. Grazie per qualsiasi aiuto/intuizione.

Modifica codice completo:

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

come si può assegnare un doppio a btnB.Top? –

+0

Perché è un doppio. TypeName (btnB.Top) = Double – DontFretBrett

+0

Cosa sono btnA, btnB? Alcuni tipi di oggetti sembrano avere una proprietà .Top che è un singolo anziché doppio. EDIT: non importa - ha risposto proprio ora nel tuo commento. –

risposta

0

#IND è un NAN (Not a Number), che è un valore di tipo di dati numerici che rappresenta un valore non identificato/irrappresentabile. Nei calcoli in virgola mobile come si afferma, Windows lo visualizza come -1. # IND (indeterminato).

per farlo credo che si deve fare qualcosa di simile:

Dim d As Double 

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

Se avete gestire qualsiasi errore quindi rimuoverlo per verificare il problema. Potresti anche sperimentare qualche tipo di errore. Quindi per problemi come il tuo può essere difficile da diagnosticare senza vedere la cartella di lavoro stessa, puoi caricarla su www.ozgrid.com/forum in modo che possiamo testare noi stessi.

+0

Non ho alcuna gestione degli errori sul sub. Anche quando aggiungo la gestione degli errori (come per l'errore riprendi dopo), genera comunque l'errore. Sembra un insetto. Non riesco a caricare la cartella di lavoro (politica aziendale), ma potrebbe non essere di grande aiuto perché il codice funziona perfettamente sul mio computer e molti altri che ho provato tranne uno. È un codice semplice SUPER. Non c'è errore. Sto pensando che dev'essere un bug – DontFretBrett

+0

Non penso che possiamo aiutarti, semplicemente non ci forniscono le informazioni richieste. Potresti almeno postare l'intero evento selection_change. – Reafidy

+0

Bud, è davvero semplice come ... Worksheet_SelectionChange (Target as Range): btnB.Top = btnA.Top + BtnA.Height: btnC.Top = btnB.Top + btnB.Height: End Sub. No scherzo, non sono sotto/sopra esagerando la semplicità. Non riesco a caricare l'intera cartella di lavoro, ma non farebbe comunque la differenza. So che ti sembra di lasciare qualcosa perché non ha senso. Questo è il problema, non ha senso e non riesco a capire perché funzioni su tutti i computer tranne uno. – DontFretBrett

0

Prova ad aggiungere questo al codice

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

E 'abitudine di produrre un overflow poi

1

So che questo potrebbe sembrare folle, ma forse riferimento i pulsanti sulla base del foglio di lavoro ... Forse c'è qualcosa solo abbastanza sull'altra macchina loopy che sta cercando in un foglio che non ha i tasti su di esso in modo che sarebbe produrre questo tipo di errore ...

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 

Spero che questo aiuto S!!