Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema MsgBox
BildScreenshot zu MsgBox MsgBox-Seite mit Beispielarbeitsmappe aufrufen

Laufzeitfehler 1004, Anwendungs und obj.

Betrifft: Laufzeitfehler 1004, Anwendungs und obj. von: HannaG
Geschrieben am: 14.12.2007 23:47:13

Dim bolTimer As Boolean

Sub sort()



 Hallo, kriege beim Compilieren immer den folgenden Fehler "Laufzeitfehler 1004. Anwendungs-  _
und objektdefinierter Fehler.
Der Code soll, einmal gestartet, die 5 Zeilen alle 5 Sekunden aktualisieren. Irgendwas stimmt  _
nicht? 
Gruß
Hanna





  Rows("1:5").Select
    Selection.sort Key1:=Range("L1"), Order1:=xlDescending, Header:=xlGuess, _
        OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
        DataOption1:=xlSortNormal
        Call Timer
End Sub



Sub Timer()
Dim NextTime As Date
If Not bolTimer Then Exit Sub
NextTime = Now + TimeValue("00:00:05")
Application.OnTime NextTime, "Tabelle1.sort"
End Sub


  

Betrifft: AW: Laufzeitfehler 1004, Anwendungs und obj. von: Daniel
Geschrieben am: 15.12.2007 00:22:48

Hi

hilfreich wäre natürlich zu wissen, wo genau der Fehler auftritt.

bei mir funzt das Makro einwandfrei, allerding hab ich Zeile "If Not BolTimer then Exit sub" auskommentiert, da bolTimer ja nirgendwo gesetzt wird und das Makro daher an dieser Stelle abegbrochen wird.

Wenn der Fehler weiterhin besteht, solltest du mal ne beispieldatei hochladen.

Gruß, Daniel

btw SORT ist schon von VBA belegt und sollte daher nicht als Makroname oder Variablenbezeichnung verwendet werden. Das könnte zu Verwirrungen führen.

Gruß, Daniel


  

Betrifft: AW: Laufzeitfehler 1004, Anwendungs und obj. von: Erich G.
Geschrieben am: 15.12.2007 09:23:36

Hallo Hanna,
was Daniel schrieb, gilt auch für das Wort "Timer". Das ist eine VBA-Funktion,
du solltest deiner Routine einen anderen Namen geben. So läuft es:

' in das Modul der Tabelle1:
Option Explicit

Sub xSort()
   Rows("1:5").Sort Key1:=Range("L1"), Order1:=xlDescending, Header:=xlGuess, _
        OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
        DataOption1:=xlSortNormal
   Call xTimer
End Sub

' in ein normales Modul:
Option Explicit

Dim bolTimer As Boolean

Sub xTimer()
   bolTimer = Sheets(1).Cells(6, 1) ' zum Test
   If Not bolTimer Then Exit Sub
   Application.OnTime Now + TimeValue("00:00:05"), "Tabelle1.xSort"
End Sub

Hier eine Beispielmappe:
https://www.herber.de/bbs/user/48466.xls

Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort


  

Betrifft: AW: Laufzeitfehler 1004, Anwendungs und obj. von: fcs
Geschrieben am: 15.12.2007 10:10:57

Hallo Hanna,

bei der Verwendung von OnTime ist es extrem wichtig, dass die Objekte in den Prozeduren explizit deklariert werden und das die mit OnTime angestossenen Makros beim Schliessen der Datei auch kontrolliert deaktiviert oder beendet werden.

Da dein Makro alle 5 Sekunden startet hab ich den Weg gewählt, dass wenn der Timer beim Schließen noch aktiv ist, die Variable "bolClose" auf True gesetzt und dann die Sort-Aktion abgebrochen wird. Das Schließen dauert dann ggf. ein paar Sekunden.

Alternativ kann man in der Workbook_Close-Prozedur auch den Parameter "Schedule" der Methode OnTime auf "False" setzten. Das erfordert jedoch das die Zeit der Ausführung der OnTime-Aktion in einer in einem allgemeinen Modul als Public deklarierten Variablen gespeichert wird. Wegen der kurzen Zeitabstände bei der Ausführung des Timers funktioniert dies in deinem Fall jedoch nicht immer korrekt.

Die Select-Methode sollte nicht verwendet werden oder nur nachdem die entsprechende Arbeitsmappe und das Tabellenblatt aktiviert wurden. Sonst kommt es zu dem Fehler "Objekt nicht gefunden" wenn das Tabellenblatt oder die Arbeitsmappe gewechselt wurde, oder das Makro wird ggf. auf die falschen Objekte angewendet.

Nachfolgend mein Vorschlag, wie du die Makros etwa aufbauen solltest, um die Fehlermeldung zu vermeiden.

Gruß
Franz

'Code unter "DieseArbeitsmappe":
Private Sub Workbook_BeforeClose(Cancel As Boolean)
  If bolTimer = True Then
    bolTimer = False
    bolClose = True
    Cancel = True
  End If
End Sub


'Code/Variblendeklaration in einem allgemeinen Modul:
Public bolTimer As Boolean, bolClose As Boolean


'Anpassung deines bisherigen Codes: 
Sub TimerSortierenOnOff()
'Diese Prozedur hab ich mir zum Testen erstellt
  bolTimer = Not bolTimer
  bolClose = False
  If bolTimer = False Then
    MsgBox "Sortier-Timer ist abgeschaltet!"
  Else
    Call Timer
  End If
End Sub

Sub Sort()
  Dim Bereich As Range
  If bolClose = True Then Exit Sub
  On Error GoTo Fehler
  Set Bereich = ThisWorkbook.Worksheets(1).Rows("1:5")
  With Bereich
    .Sort Key1:=.Range("L1"), Order1:=xlDescending, Header:=xlGuess, _
        OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom ', _
        DataOption1:=xlSortNormal
  End With
  Call Timer
  Exit Sub
Fehler:
  Msgbox "Sortieren Zeilen 1 bis 5, Fehler bei Bereichszuweisung, Timer wird abgebrochen"
End Sub

Sub Timer()
  Dim NextTime As Date
  If Not bolTimer Then Exit Sub
  NextTime = Now + TimeValue("00:00:05")
  Application.OnTime NextTime, "Tabelle1.sort"
End Sub




 

Beiträge aus den Excel-Beispielen zum Thema "Laufzeitfehler 1004, Anwendungs und obj."