Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1576to1580
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
Inhaltsverzeichnis

code läuft extrem langsam

code läuft extrem langsam
29.08.2017 23:12:48
stef26
Hallo Zusammen,
ich brauch nochmals Unterstützung von Profis. Ich lasse Anmeldezeiten in eine externe XLS schreiben.
Dazu habe ich eine Userform über der ich folgendes mache:
a) Das Bild des Buttons wird auf "Bitte warten" geändert
b) Tabellenblatt leeren
c) Prüfen ob Datei geöffnet ist
d) Wenn sie nicht geöffnet ist, dann den Inhalt kopieren
e) Weiterer Eintrag (aktuelle Zeit) wird vorgenommen und danach zurückgeschrieben
f) Datei gespeichert und geschlossen
g) Bild des Buttons wird wieder zurückgestellt.
Soweit funktioniert alles nach Wunsch. Mein Problem ist, dass diese kleine Aktion ca. 25 Sekunden benötigt. Für Datei öffnen eintragen. Speichern und schliessen.
Datei liegt aktuell noch lokal und öffnet manuell sofort.
Meine Datei mit der Userform lässt sich auch sehr schnell bearbeiten.
Kann mir jemand sagen, warum das so lange dauert?
Bzw. wie ich dies schneller machen kann?
Private Sub Kommen_Click()
'Bild wechsel
Kommen.Picture = LoadPicture(Sheets("setup").Range("B12").Value)
Repaint
'Daten aus MAZeit aktualisieren
Application.ScreenUpdating = False  'Bildschirmreaktionen ausschalten
Dim wb As Workbook: Set wb = ThisWorkbook
Dim WbZ As Workbook
Dim FSO As Object, Verz, SubVerz, Datei, Stapel As Collection, Pfad$
'alte Daten aus der Tabelle entfernen
Sheets("Anwesenheitszeit").Activate
Range("A1:B500").Select
Selection.ClearContents
With Selection.Interior
.Pattern = xlNone
.TintAndShade = 0
.PatternTintAndShade = 0
End With
'neue Daten einlesen
Application.DisplayAlerts = False 'Meldungen unterdrücken
Pfad = Sheets("Setup").Range("B11").Text 'MAZeiten öffnen
'Funktion Abfrage ob diese Datei soeben geöffnen ist
If DateiGeoeffnet(Pfad) = False Then
Application.AskToUpdateLinks = False
Set WbZ = Workbooks.Open(Pfad)
WbZ.Worksheets(1).Range("A1:B500").Copy
wb.Worksheets("Anwesenheitszeit").Range("A1").PasteSpecial xlValues
Else
'Datei ware bereits geöffnet
MsgBox "Bitte noch einmal probieren, Daten konnten nicht gespeichert werden"
'Bild wechsel
Kommen.Picture = LoadPicture(Sheets("setup").Range("B14").Value)
Repaint
Exit Sub
End If
Dim LoLetzte As Long
Dim Mitarbeiter As Long
wb.Activate
Sheets("Anwesenheitszeit").Activate
Mitarbeiter = Sheets("Anwesenheitszeit").Range("C2").Value
LoLetzte = IIf(IsEmpty(Cells(Rows.Count, 1)), _
Cells(Rows.Count, 1).End(xlUp).row, Rows.Count) + 1
Cells(LoLetzte, 1) = Time ' abgelaufene Zeit in Zelle eintragen
Mitarbeiter = Mitarbeiter + 1
Sheets("Anwesenheitszeit").Range("C2").Value = Mitarbeiter
LetzteUhrzeit.Caption = Time
LEWasBox.Caption = "angemeldet"
Calculate
AnzahlMA.Caption = Sheets("Anwesenheitszeit").Range("C2").Value  'Aktuelle Anzahl der  _
Mitarbeiter
Zeit.Caption = Format(Sheets("Anwesenheitszeit").Range("E1").Value, "h,mm") & " h"
Zeit2.Caption = Format(Sheets("Anwesenheitszeit").Range("E1").Value, "h,mm") & " h"     ' _
Gesamtanwesenheitszeit für die Tabelle Produktivität
'Daten zurückschreiben
wb.Worksheets("Anwesenheitszeit").Range("A1:B500").Copy
WbZ.Worksheets(1).Range("A1").PasteSpecial xlValues
WbZ.Close True
Application.AskToUpdateLinks = True
Application.DisplayAlerts = True  'Meldungen wieder aktivieren
Application.ScreenUpdating = True 'Bildschirmreaktionen einschalten
'Bild wechsel
Kommen.Picture = LoadPicture(Sheets("setup").Range("B14").Value)
Repaint
End Sub

Private Function DateiGeoeffnet(DerPfad As String) As Boolean
On Error Resume Next
Open DerPfad For Binary Access Read Lock Read As #1
Close #1
If Err.Number  0 Then
DateiGeoeffnet = True
Err.clear
End If
End Function

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

Betreff
Datum
Anwender
Anzeige
AW: code läuft extrem langsam
30.08.2017 07:24:04
Luschi
Hallo stef26,
um Excel-Bremsen beim Manipulieren von Daten per Vba zu lösen, fehlen am Beginn der Prozedur die folgenden 2 Anweisungen:
Application.EnableEvents = False
Application.Calculation = xlCalculationManual
und am Schluß
Application.EnableEvents = True
Application.Calculation = xlCalculationAutomatic
Insgesamt informiere Dich mal per Google über: vba GetMoreSpeed
Gruß von Luschi
aus klein-Paris
AW: code läuft extrem langsam
30.08.2017 09:23:17
Daniel
Hi
ggf müsstest du mal testen, wo der Zeitfresser liegt.
kommentiere mal alle Zeilen die mit Kommen.Picture = LoadPicture( beginnen aus.
Wenns dann schneller geht. solltest du überlegen, ob du nicht besser besser einfach nur die Farbe und den Text des Buttons änderst, anstelle jedes mal ein neues Bild einzulesen.
wenn du wissen willst, ob deine Datei noch geöffnet ist oder nicht, würde ich das einfach so programmieren:
dim WB as workbook
On Error Resume next
set WB = Workbooks(Dateiname)
On error Goto 0
if wb is Nothing Then
Datei ist nicht geöffnet
Else
Datei ist bereits geöffnet
End if

das dürfte auch etwas schneller sein als deine Funktion.
außerdem müssten hier noch die Selects entfernt werden:
'alte Daten aus der Tabelle entfernen
Sheets("Anwesenheitszeit").Activate
Range("A1:B500").Select
Selection.ClearContents
With Selection.Interior
.Pattern = xlNone
.TintAndShade = 0
.PatternTintAndShade = 0
End With

dh besser so
'alte Daten aus der Tabelle entfernen
With Sheets("Anwesenheitszeit").Range("A1:B500")
.ClearContents
With .Interior
.Pattern = xlNone
.TintAndShade = 0
.PatternTintAndShade = 0
End With
End with
außerdem gibt's im Code noch das eine oder andere .Activate, welches du nicht brauchst.
Gruß Daniel
Anzeige
AW: code läuft extrem langsam
30.08.2017 09:53:11
stef26
Hallo Danie,
danke für deine Rückmeldungen. Das mit Activate ist mir gar nicht aufgefallen.
Werde deine Hinweise mal einpflegen.
Besten Dank !
Gruß
Stefan
AW: code läuft extrem langsam
30.08.2017 09:37:49
stef26
ok mach ich
besten Dank
Gruß
Stefan

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige