2012-04-05 7 views
5

ich einige sehr grundlegende und einfache VBA-Code haben im Worksheet_SelectionChange Ereignis wie folgt aus:.Seltsam Excel VBA Fehler „Ausdruck zu komplex“ -1 # IND

btnB.Top = btnA.Top + btnA.Height 

Es läuft auf meinem Computer in Ordnung, aber es funktioniert sporadisch auf dem Computer meines Kollegen. Scheint wie 3 von 5 Klicks um das Blatt den "Expression Too Complex" Fehler erzeugen. Die anderen 2 funktionieren ohne einen Fehler zu werfen. Ich habe versucht:

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

Und das gleiche, funktioniert manchmal, manchmal wirft es den Fehler. Als der Fehler passierte, brach ich und überprüfte den Wert von , der "-1.#IND" war. Ich habe diesen Wert gegoogelt und entdeckt, dass er interdeterminiert ist. btnA.Top ist ungefähr 11.500, also ist es kein Überlaufproblem. Es scheint keinen Sinn oder Grund zu diesem Thema zu geben. In 16 Jahren VB- und VBA-Programmierung habe ich noch nie etwas Ähnliches gesehen oder gehört. Danke für jede Hilfe/Einsicht.

bearbeiten Voll Code:

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

Wie können Sie btnB.Top ein Double zuweisen? –

+0

Weil es ein Doppel ist. TypeName (btnB.Top) = Double – DontFretBrett

+0

Was sind btnA, btnB? Einige Objekttypen scheinen eine .Top-Eigenschaft zu haben, bei der es sich um eine einzelne anstelle von Double handelt. EDIT: Macht nichts - antwortete gerade jetzt in deinem Kommentar. –

Antwort

0

#IND ist ein NaN (Not a Number), die einen Wert von numerischen Datentyp ist, der einen nicht definierten/unrepresentable Wert darstellt. In Fließkomma-Berechnungen, wie Sie sagen, zeigt Windows es als -1. # IND (unbestimmt).

es zu bekommen Ich glaube, Sie haben wie etwas zu tun:

Dim d As Double 

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

Wenn Sie einen Fehler haben Handhabung es dann entfernen, um das Problem zu testen. Sie könnten auch eine Art von Bug erleben. Für Probleme wie Ihre kann es schwierig sein zu diagnostizieren, ohne die Arbeitsmappe selbst zu sehen. Sie können sie auf www.ozgrid.com/forum hochladen, damit wir uns testen können.

+0

Ich habe keine Fehlerbehandlung auf dem Sub. Selbst wenn ich eine Fehlerbehandlung (wie bei einem Fehler resume next) hinzufüge, löst es immer noch den Fehler aus. Klingt wie ein Fehler. Ich kann die Arbeitsmappe (Unternehmensrichtlinie) nicht hochladen, aber es hilft sowieso nicht viel, weil der Code auf meinem Computer und mehreren anderen, die ich bis auf eine Ausnahme ausprobiert habe, perfekt funktioniert. Es ist SUPER einfacher Code. Es gibt keinen Fehler. Ich denke, es muss ein Fehler sein – DontFretBrett

+0

Ich glaube nicht, dass wir Ihnen helfen können, Sie geben uns einfach nicht die erforderlichen Informationen. Sie könnten mindestens das gesamte selection_change-Ereignis posten. – Reafidy

+0

Knospe, es ist ernsthaft so einfach wie ... Worksheet_SelectionChange (Ziel als Bereich): btnB.Top = btnA.Top + BtnA.Height: btnC.Top = btnB.Top + btnB.Height: End Sub. Kein Witz, ich übertreibe nicht die Einfachheit. Ich kann das ganze Arbeitsbuch nicht hochladen, aber es würde sowieso keinen Unterschied machen. Ich weiß, du fühlst, dass ich etwas verlasse, weil es keinen Sinn ergibt. Das ist das Problem, es macht keinen Sinn und ich kann nicht herausfinden, warum es auf allen Computern außer einem funktioniert. – DontFretBrett

0

versuchen, dies zu dem Code hinzufügen

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

Es wird nicht einen Überlauf erzeugen dann

1

Ich weiß, das verrückt erscheinen mag, aber vielleicht die Schaltflächen auf dem Arbeitsblatt verweisen auf Basis ... Vielleicht ist es etwas nur bekloppt genug, um auf der anderen Maschine, dass es in einem Blatt sucht, die nicht die Tasten auf sie haben, so dass diese Art von Fehlern ...

diese Hilfe
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 

Hoffnung produzieren würde s !!