Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
932to936
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
932to936
932to936
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Laufzeitfehler 1004, Anwendungs und obj.

Laufzeitfehler 1004, Anwendungs und obj.
14.12.2007 23:47:00
HannaG
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


3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Laufzeitfehler 1004, Anwendungs und obj.
15.12.2007 00:22:00
Daniel
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

AW: Laufzeitfehler 1004, Anwendungs und obj.
15.12.2007 09:23:36
Erich
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

Anzeige
AW: Laufzeitfehler 1004, Anwendungs und obj.
15.12.2007 10:10:57
fcs
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


Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige