Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
652to656
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
652to656
652to656
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Code zu langsam

Code zu langsam
17.08.2005 17:15:09
Norbert
Hallo,
mit dem folgenden Code übertrage ich Daten aus einer Userform in eine Tabelle.
Die Schleife sucht nach einer leeren Zeile und prüft gleichzeitig ob ein Datensatz existiert der mit dem neuen kollidiert. Solange die Anzahl der Datensätze klein ist klappt alles wunderbar. Wenn mehr als 100 Datensätze vorhanden sind dauert das Ganze ca.10 sek.
Hat jemand eine bessere Idee?

Private Sub CommandButton1_Click()
Dim rng As Range
Dim test As Integer
Call StopWatch
test = 0
If cboName = Empty Or cboGrund = Empty Or dtpAnfang = Empty Or dtpEnde = Empty Or dtpEnde < dtpAnfang Then
MsgBox " Bitte Eingaben prüfen"
Exit Sub
End If
For Each rng In Worksheets("Urlaub").Range("A2:A500").Cells
If cboName.Text = rng Then
If CDate(dtpAnfang.Value) <= CDate(rng.Offset(0, 1)) And CDate(dtpEnde.Value) >= CDate(rng.Offset(0, 1)) _
Or CDate(dtpAnfang.Value) >= CDate(rng.Offset(0, 1)) And CDate(dtpAnfang.Value) <= CDate(rng.Offset(0, 2)) Then
test = 1
MsgBox "Es existiert schon ein Datensatz in diesem Zeitraum"
End If
End If
If IsEmpty(rng) Then
If test < 1 Then
rng = cboName.Text
rng.Offset(0, 1) = dtpAnfang.Value
rng.Offset(0, 2) = dtpEnde.Value
rng.Offset(0, 3) = cboGrund.Text
MsgBox (StopWatch(False))
End
End If
End If
Next rng
End Sub

gruss Norbert

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Code zu langsam
17.08.2005 17:57:43
IngGi
Hallo Norbert,
mangels Userform ungetestet. So wird nicht jeder Datensatz geprüft, sondern nur diejenigen, die über cboname.text auch tatsächlich gefunden werden. Damit sollte das Ganze deutlich kürzer werden. Der neue Datensatz wird immer in der ersten Zeile eingefügt, in der in Spalte A kein Eintrag vorhanden ist. Es sei denn natürlich, der Datensatz wird gefunden. Dann wird die msgbox ausgegeben. Aber wie gesagt - ungetestet.

Sub xy()
Dim rng As Range
Dim test As Integer
Call StopWatch
test = 0
If cboname = Empty Or cboGrund = Empty Or dtpAnfang = Empty Or dtpEnde = Empty Or dtpEnde < dtpAnfang Then
MsgBox " Bitte Eingaben prüfen"
Exit Sub
End If
Do
If rng Is Nothing Then
rng=Worksheets("Urlaub").Range("A2:A500").Find cboname.Text
Else
rng = Worksheets("Urlaub").Range("A2:A500").FindNext
End If
If Not rng Is Nothing Then
If CDate(dtpAnfang.Value) <= CDate(rng.Offset(0, 1)) And CDate(dtpEnde.Value) >= CDate(rng.Offset(0, 1)) _
Or CDate(dtpAnfang.Value) >= CDate(rng.Offset(0, 1)) And CDate(dtpAnfang.Value) <= CDate(rng.Offset(0, 2)) Then
test = 1
End If
End If
Loop Until rng Is Nothing
If test = 1 Then
MsgBox "Es existiert schon ein Datensatz in diesem Zeitraum"
Else
Set rng = Worksheets("Urlaub").Range("A65536").End(xlUp).Offset(1, 0)
rng = cboname.Text
rng.Offset(0, 1) = dtpAnfang.Value
rng.Offset(0, 2) = dtpEnde.Value
rng.Offset(0, 3) = cboGrund.Text
MsgBox (StopWatch(False))
End If
End Sub

Gruß Ingolf
Anzeige
AW: Code zu langsam
17.08.2005 18:10:52
Norbert
Hallo Ingolf,
danke für deine Antwort. Ich habe mal die Laufzeit geprüft, leider hat dein Code keinen wesendlichen Geschwindigkeitszuwachs gebracht. Selbst wenn ich die Prüfung deaktiviere bringt es nicht viel. Das suchen der nächsten freien Zeile ist das Problem.
Wenn es dir hilft schicke ich dir die UserForm.
Gruß
Norbert
AW: Code zu langsam
17.08.2005 18:34:36
IngGi
Hallo Norbert,
das Suchen der nächsten leeren Zeile bzw. Zelle in Spalte A ist ja nur noch ein kleiner Schritt. Ich glaube vielmehr, dass das Problem in den Daten liegt. Wenn es viele Datensätze mit identischem Eintrag in Spalte A gibt, geben sich unsere beiden Varianten nicht viel. In diesem Fall wäre vielleicht zu überlegen, ob man nicht mit einem anderen Datenfeld eine geschicktere Vorauswahl treffen kann, auf die sich dann die restlichen Prüfungen beschränken lassen. Dazu muss man aber die Daten kennen. Wenn es keine heiklen Daten sind, kannst du die Datei ja mal hochladen. Was mich angeht, muss ich dich allerdings auf morgen vertrösten. Ich lass' die Frage mal offen. Möglicherweise findet sich ja auch jemand anderes mit einer Idee.
Gruß Ingolf
Anzeige
AW: Code zu langsam
17.08.2005 19:37:40
Norbert
Hallo Ingolf,
habe das Problem gelöst. Der Code war nicht das Problem, der braucht nur Sekundenbruchteile. Das Problem war, das auf dem Bereich Verknüpfungen und "sverweis" liegen. Ich schalte vor der Suche die automatische Neuberechnung aus und anschließend wieder ein.(Application.Calculation = xlCalculationManual)
Danke und Gruß
Norbert

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige