2016-10-14 2 views
1

Kompilieren Ich habe einige Code, der den Prä-Prozessor verwendet Befehle: #If, #Else und #End Ifmit VBA Application.StatusBar in Präprozessor Routine verursacht Fehler Laufzeit wenn

im Grunde muss ich

#If Mac then 
    msgbox "Can't update the list when running on a mac" 

#Else 
    Application.StatusBar = "updating names..." 

    ***other code here****   

    Application.StatusBar = false 
#End if 

Der Code funktioniert Gut auf meinem Computer, aber auf anderen, wenn das Arbeitsblatt geöffnet und der Code kompiliert wird, erscheint eine Fehlermeldung:

Method 'StatusBar' of object '_Application' failed

Beim Öffnen der Tabelle in der geschützten Ansicht tritt ein Fehler auf. Wenn nicht in der geschützten Ansicht, wird der Fehler nicht angezeigt. Es funktioniert gut, sobald das Sub aufgerufen wird, nachdem es geöffnet wurde, aber wenn es beim Öffnen kompiliert wird, fällt es um.

Wenn ich die Statusleiste-Befehle entfernen, tritt der Fehler nicht auf.

Ich habe versucht, ein 'On Error Resume Next' hinzuzufügen, aber das stoppt den Fehler nicht.

So scheint es, dass ich nicht die Statusleiste innerhalb einer Präprozessor-Routine verwenden kann, und sicher sein, dass es funktioniert.

Ich benutze Excel 2016 und ich habe den Fehler auf Excel 2013 gesehen. Beide Maschinen sind 64 Bit Windows 8.1 und tatsächlich beide Maschinen sind genau die gleichen Spezifikationen ASUS UX305F mit Core-M-Prozessor.

Kann jemand Licht in was könnte passieren?

+0

"ein Laufzeitfehler beim Kompilieren" - das wäre ein * Kompilierfehler * - bei der Fehlermeldung handelt es sich eindeutig nicht um einen Kompilierfehler. Es tritt zur Laufzeit auf, wenn VBA die Präprozessordirektiven ausführt. Es wäre schön, die relevanten "# If" Präprozessor-Bedingungen einzubeziehen. –

+0

danke für die Korrektur meiner verwechselt Terminologie. Ich habe aktualisiert, um die verwendete Direktive zu zeigen. Ich werde ThisWorkbook.Application.statusbar versuchen und zurück melden.Ich habe nicht den PC, der den Fehler verursachte, also mailt der Typ, um es zu versuchen – MrPea

+1

@Slai das '_Application_Objekt in der Fehlermeldung zeigt auf' Application', das richtig als solches erkannt wird; Ich würde mich wundern, wenn ich mit "ThisWorkbook" etwas verändern würde, da es genau der gleiche Objektzeiger ist. –

Antwort

1

Ich kann das Problem nicht reproduzieren, aber unter der Annahme:

  • Application.StatusBar funktioniert außerhalb Precompilers Richtlinien

Und:

  • Precompiler-Richtlinien nur zum Deaktivieren des Makro verwendet werden auf einer Mac-Umgebung

einfach neu organisieren Dinge ein wenig, so dass der Code in einer Windows-Umgebung bestimmt ist nicht eingeschlossen in Precompiler-Richtlinien auszuführen:

Public Sub Macro1() 
    #If Mac Then 
     MsgBox "Can't update the list when running on a Mac" 
     Exit Sub 
    #Else 
     DoSomething 
    #End If 
End Sub 

Und dann bewegen die eigentliche Logik DoSomething, so dass die tatsächlichen Code frei von Precompiler-Richtlinien:

Private Sub DoSomething() 
    Application.StatusBar = "updating names..." 

    '***other code here****   

    Application.StatusBar = false 
End Sub 

schlimmsten Fall wird der Mac-Benutzer, klicken sie Ihre Schaltfläche einen Compiler-Fehler erhalten, und der Code nicht ausgeführt werden ... aber es ist sowieso nicht laufen sollte, so ...

+0

Ahhh gute Idee! Es funktioniert immer noch in meiner Einrichtung mit Ihrer Methode, so dass ich überprüfen werde, ob es an demjenigen funktioniert, an dem es gescheitert ist, und am Montag darüber Bericht erstatte. Fasziniert, was es an erster Stelle zum Scheitern bringt, aber es gibt größere Dinge, um die sich die Statusleiste kümmern muss! – MrPea

Verwandte Themen